La creazione di un nuovo collegamento diretto non copia il contenuto del file,
ma si limita a creare una voce nella directory specificata con \var{newpath} e
-ad aumentare di uno il numero di referenze al file (riportato nel campo
+ad aumentare di uno il numero di riferimenti al file (riportato nel campo
\var{st\_nlink} della struttura \var{stat}, vedi \secref{sec:file_stat})
aggiungendo il nuovo nome ai precedenti. Si noti che uno stesso file può
essere così chiamato con vari nomi in diverse directory.
\subsection{Le funzioni \func{remove} e \func{rename}}
\label{sec:file_remove}
-Al contrario di quanto avviene con altri unix in Linux non è possibile usare
+Al contrario di quanto avviene con altri Unix, in Linux non è possibile usare
\func{unlink} sulle directory; per cancellare una directory si può usare la
funzione \func{rmdir} (vedi \secref{sec:file_dir_creat_rem}), oppure la
funzione \func{remove}. Questa è la funzione prevista dallo standard ANSI C
\subsection{La directory di lavoro}
\label{sec:file_work_dir}
-A ciascun processo è associato ad una directory nel filesystem che è chiamata
+A ciascun processo è associata una directory nel filesystem che è chiamata
directory corrente o directory di lavoro (\textit{current working directory})
che è quella a cui si fa riferimento quando un filename è espresso in forma
relativa, dove il ``relativa'' fa riferimento appunto a questa directory.
-Quando un utente effettua il login questa directory viene impostata alla
+Quando un utente effettua il login, questa directory viene impostata alla
\textit{home directory} del suo account. Il comando \cmd{cd} della shell
consente di cambiarla a piacere, spostandosi da una directory ad un'altra, il
comando \cmd{pwd} la stampa sul terminale. Siccome la directory corrente
\label{sec:file_temp_file}
In molte occasioni è utile poter creare dei file temporanei; benché la cosa
-sembri semplice in realtà il problema è più sottile di quanto non appaia a
+sembri semplice, in realtà il problema è più sottile di quanto non appaia a
prima vista. Infatti anche se sembrerebbe banale generare un nome a caso e
creare il file dopo aver controllato che questo non esista, nel momento fra il
-controllo e la creazione si ha giusto lo spazio per una \textit{race
+controllo e la creazione si ha giusto lo spazio per una possibile \textit{race
condition} (si ricordi quanto visto in \secref{sec:proc_race_cond}).
Le \acr{glibc} provvedono varie funzioni per generare nomi di file temporanei,
su un file, su un link simbolico e su un file descriptor.
La struttura \var{stat} usata da queste funzioni è definita nell'header
-\file{sys/stat.h} e in generale dipende dall'implementazione, la versione
+\file{sys/stat.h} e in generale dipende dall'implementazione; la versione
usata da Linux è mostrata in \figref{fig:file_stat_struct}, così come
riportata dalla pagina di manuale di \func{stat} (in realtà la definizione
effettivamente usata nel kernel dipende dall'architettura e ha altri campi
\label{sec:file_types}
Come riportato in \tabref{tab:file_file_types} in Linux oltre ai file e alle
-directory esistono vari altri oggetti che possono stare su un filesystem. Il
-tipo di file è ritornato dalla \func{stat} come maschera binaria nel campo
+directory esistono altri oggetti che possono stare su un filesystem. Il tipo
+di file è ritornato dalla \func{stat} come maschera binaria nel campo
\var{st\_mode} (che che contiene anche le informazioni relative ai permessi).
Dato che il valore numerico può variare a seconda delle implementazioni, lo
-standard POSIX definisce un insieme di macro per verificare il tipo di files,
+standard POSIX definisce un insieme di macro per verificare il tipo di file,
queste vengono usate anche da Linux che supporta pure le estensioni allo
standard per i link simbolici e i socket definite da BSD; l'elenco completo
delle macro con cui è possibile estrarre l'informazione da \var{st\_mode} è
\subsection{Le dimensioni dei file}
\label{sec:file_file_size}
-Il membro \var{st\_size} contiene la dimensione del file in byte (se il file è
-un file regolare, nel caso di un link simbolico la dimensione è quella del
-pathname che contiene).
+Il membro \var{st\_size} contiene la dimensione del file in byte (se si tratta
+di un file regolare, nel caso di un link simbolico la dimensione è quella del
+pathname che contiene, per le fifo è sempre nullo).
Il campo \var{st\_blocks} definisce la lunghezza del file in blocchi di 512
byte. Il campo \var{st\_blksize} infine definisce la dimensione preferita per
tramite la funzione \func{stat}, che li restituisce attraverso tre campi della
struttura \var{stat} di \figref{fig:file_stat_struct}. Il significato di detti
tempi e dei relativi campi è riportato nello schema in
-\tabref{tab:file_file_times}, dove si è anche riportato un esempio delle
-funzioni che effettuano cambiamenti su di essi.
+\tabref{tab:file_file_times}, dove è anche riportato un esempio delle funzioni
+che effettuano cambiamenti su di essi.
\begin{table}[htb]
\centering
Una delle caratteristiche fondamentali di tutti i sistemi unix-like è quella
del controllo di accesso ai file, che viene implementato per qualunque
-filesystem standard. In questa sezione ne esamineremo i concetti essenziali e
-le funzioni usate per gestirne i vari aspetti.
+filesystem standard.\footnote{per standard si intende che implementa le
+ caratteristiche previste dallo standard POSIX. In Linux sono disponibili
+ anche una serie di altri filesystem, come quelli di Windiws e del Mac, che
+ non supportano queste caratteristiche.} In questa sezione ne esamineremo i
+concetti essenziali e le funzioni usate per gestirne i vari aspetti.
\subsection{I permessi per l'accesso ai file}
Ad ogni file Linux associa sempre l'utente che ne è proprietario (il
cosiddetto \textit{owner}) ed un gruppo di appartenenza, secondo il meccanismo
-degli identificatori di utenti e gruppi (\acr{uid} e \acr{gid}). Questi valori
+degli identificatori di utente e gruppo (\acr{uid} e \acr{gid}). Questi valori
sono accessibili da programma tramite la funzione \func{stat}, e sono
mantenuti nei campi \var{st\_uid} e \var{st\_gid} della struttura \var{stat}
(si veda \secref{sec:file_stat}).\footnote{Questo è vero solo per filesystem
prevede tre permessi fondamentali strutturati su tre livelli di accesso.
Esistono varie estensioni a questo modello,\footnote{come le \textit{Access
Control List} che possono essere aggiunte al filesystem standard con
- opportune patch, e sono presenti in filesystem non ancora inclusi nel kernel
- ufficiale come \textsl{xfs}, o meccanismi di controllo ancora più
- sofisticati come il \textit{mandatory access control} di SE-Linux.} ma nella
-maggior parte dei casi il meccanismo standard è più che sufficiente a
-soffisfare tutte le necessità più comuni. I tre permessi di base associati ad
-ogni file sono:
+ opportune patch, la cui introduzione nei kernel ufficiali è iniziata con la
+ serie 2.5.x. per arrivare a meccanismi di controllo ancora più sofisticati
+ come il \textit{mandatory access control} di SE-Linux.} ma nella maggior
+parte dei casi il meccanismo standard è più che sufficiente a soddisfare tutte
+le necessità più comuni. I tre permessi di base associati ad ogni file sono:
\begin{itemize*}
\item il permesso di lettura (indicato con la lettera \texttt{r}, dall'inglese
\textit{read}).
I restanti tre bit (noti come \acr{suid}, \acr{sgid}, e \textsl{sticky}) sono
usati per indicare alcune caratteristiche più complesse del meccanismo del
controllo di accesso su cui torneremo in seguito (in
-\secref{sec:file_suid_sgid} e \secref{sec:file_sticky}).
+\secref{sec:file_suid_sgid} e \secref{sec:file_sticky}); lo schema di
+allocazione dei bit è riportato in \figref{fig:file_perm_bit}.
+
+\begin{figure}[htb]
+ \centering
+ \includegraphics[width=6cm]{img/fileperm}
+ \caption{Lo schema dei bit utilizzati per specificare i permessi di un file
+ contenuti nel campo \var{st\_mode} di \var{fstat}.}
+ \label{fig:file_perm_bit}
+\end{figure}
Anche i permessi, come tutte le altre informazioni pertinenti al file, sono
memorizzati nell'inode; in particolare essi sono contenuti in alcuni bit del
\end{table}
I permessi vengono usati in maniera diversa dalle varie funzioni, e a seconda
-che si riferiscano a dei file, dei link simbolici o delle directory, qui ci
+che si riferiscano a dei file, dei link simbolici o delle directory; qui ci
limiteremo ad un riassunto delle regole generali, entrando nei dettagli più
avanti.
\end{enumerate}
Si tenga presente che questi passi vengono eseguiti esattamente in
-quest'ordine. Questo vuol dire che se un processo è il proprietario di un file
+quest'ordine. Questo vuol dire che se un processo è il proprietario di un file,
l'accesso è consentito o negato solo sulla base dei permessi per l'utente; i
permessi per il gruppo non vengono neanche controllati. Lo stesso vale se il
processo appartiene ad un gruppo appropriato, in questo caso i permessi per
corrispondenti del gruppo \textit{real} del processo corrente, che normalmente
corrispondono dell'utente con cui si è entrati nel sistema.
-Se però il file del programma\footnote{per motivi di sicurezza il kernel
- ignora i bit \acr{suid} e \acr{sgid} per gli script eseguibili.} (che
-ovviamente deve essere eseguibile) ha il bit \acr{suid} impostato, il kernel
-assegnerà come userid effettivo al nuovo processo l'\acr{uid} del proprietario
-del file al posto dell'\acr{uid} del processo originario. Avere il bit
-\acr{sgid} impostato ha lo stesso effetto sul groupid effettivo del processo.
+Se però il file del programma (che ovviamente deve essere
+eseguibile\footnote{per motivi di sicurezza il kernel ignora i bit \acr{suid}
+ e \acr{sgid} per gli script eseguibili.}) ha il bit \acr{suid} impostato, il
+kernel assegnerà come userid effettivo al nuovo processo l'\acr{uid} del
+proprietario del file al posto dell'\acr{uid} del processo originario. Avere
+il bit \acr{sgid} impostato ha lo stesso effetto sul groupid effettivo del
+processo.
I bit \acr{suid} e \acr{sgid} vengono usati per permettere agli utenti normali
di usare programmi che abbisognano di privilegi speciali; l'esempio classico è
riportati in \tabref{tab:file_mode_flags}.
Gli stessi bit vengono ad assumere in significato completamente diverso per le
-directory, normalmente infatti Linux usa la convenzione di SVR4 per indicare
+directory, normalmente infatti Linux usa la convenzione di SVr4 per indicare
con questi bit l'uso della semantica BSD nella creazione di nuovi file (si
veda \secref{sec:file_ownership} per una spiegazione dettagliata al
proposito).
Infine Linux utilizza il bit \acr{sgid} per una ulteriore estensione mutuata
-da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostare senza che lo sia
-anche il corrispondente bit di esecuzione viene utilizzato per attivare per
-quel file il \textit{mandatory locking} (argomento che affronteremo in
-dettagliopiù avanti in \secref{sec:file_mand_locking}).
+da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostato senza che lo
+sia anche il corrispondente bit di esecuzione viene utilizzato per attivare
+per quel file il \textit{mandatory locking} (affronteremo questo argomento in
+dettaglio più avanti, in \secref{sec:file_mand_locking}).
\subsection{Il bit \textsl{sticky}}
Benché ormai non venga più utilizzato per i file, lo \textsl{sticky bit} ha
invece assunto un uso importante per le directory;\footnote{lo \textsl{sticky
bit} per le directory è un'estensione non definita nello standard POSIX,
- Linux però la supporta, così come BSD e SVR4.} in questo caso se il bit è
+ Linux però la supporta, così come BSD e SVr4.} in questo caso se tale bit è
impostato un file potrà essere rimosso dalla directory soltanto se l'utente ha
il permesso di scrittura su di essa ed inoltre è vera una delle seguenti
condizioni:
all'userid effettivo del processo che lo crea; per il \acr{gid} invece prevede
due diverse possibilità:
\begin{itemize*}
-\item il \acr{gid} del file corrisponde al group id effettivo del processo.
+\item il \acr{gid} del file corrisponde al groupid effettivo del processo.
\item il \acr{gid} del file corrisponde al \acr{gid} della directory in cui
esso è creato.
\end{itemize*}
partenza, in tutte le sottodirectory. La semantica SVr4 offre la possibilità
di scegliere, ma per ottenere lo stesso risultato di coerenza che si ha con
BSD necessita che per le nuove directory venga anche propagato anche il bit
-\acr{sgid}. Questo è il comportamento predefinito di \func{mkdir}, ed è in
-questo modo ad esempio che Debian assicura che le sottodirectory create nelle
+\acr{sgid}. Questo è il comportamento predefinito di \cmd{mkdir}, ed è in
+questo modo ad esempio che Debian assicura che le sottodirectory create nella
home di un utente restino sempre con il \acr{gid} del gruppo primario dello
stesso.
\begin{errlist}
\item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del
proprietario del file o non è zero.
+ \item[\macro{EROFS}] Il file è su un filesystem in sola lettura.
\end{errlist}
- ed inoltre \macro{EROFS} e \macro{EIO}; \func{chmod} restituisce anche
- \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM},
- \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche
- \macro{EBADF}.}
+ ed inoltre \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT},
+ \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
+ \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche \macro{EBADF}.}
\end{functions}
-I valori possibili per \var{mode} sono indicati in
-\tabref{tab:file_permission_const}. I valori possono esser combinati con l'OR
-binario delle relative costanti simboliche, o specificati direttamente, come
-per l'analogo comando di shell, con il valore numerico (la shell lo vuole in
-ottale, dato che i bit dei permessi sono divisibili in gruppi di tre). Ad
-esempio i permessi standard assegnati ai nuovi file (lettura e scrittura per
-il proprietario, sola lettura per il gruppo e gli altri) sono corrispondenti
-al valore ottale $0644$, un programma invece avrebbe anche il bit di
-esecuzione attivo, con un valore di $0755$, se si volesse attivare il bit
-\acr{suid} il valore da fornire sarebbe $4755$.
+Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una
+variabile dell'apposito tipo primitivo \type{mode\_t} (vedi
+\tabref{tab:intro_primitive_types}) utilizzato per specificare i permessi sui
+file.
\begin{table}[!htb]
\centering
\macro{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
\hline
\end{tabular}
- \caption{I valori delle costanti usate per indicare i permessi dei file.}
+ \caption{Valori delle costanti usate per indicare i vari bit di
+ \param{mode} utilizzato per impostare i permessi dei file.}
\label{tab:file_permission_const}
\end{table}
-Il cambiamento dei permessi di un file attraverso queste funzioni ha comunque
-alcune limitazioni, provviste per motivi di sicurezza. Questo significa che
-anche se si è proprietari del file non tutte le operazioni sono permesse, in
-particolare:
+Le costanti con cui specificare i singoli bit di \param{mode} sono riportate
+in \tabref{tab:file_permission_const}. Il valore di \param{mode} può essere
+ottenuto combinando fra loro con un OR binario le costanti simboliche relative
+ai vari bit, o specificato direttamente, come per l'omonimo comando di shell,
+con un valore numerico (la shell lo vuole in ottale, dato che i bit dei
+permessi sono divisibili in gruppi di tre), che si può calcolare direttamente
+usando lo schema si utilizzo dei bit illustrato in \figref{fig:file_perm_bit}.
+
+Ad esempio i permessi standard assegnati ai nuovi file (lettura e scrittura
+per il proprietario, sola lettura per il gruppo e gli altri) sono
+corrispondenti al valore ottale $0644$, un programma invece avrebbe anche il
+bit di esecuzione attivo, con un valore di $0755$, se si volesse attivare il
+bit \acr{suid} il valore da fornire sarebbe $4755$.
+
+Il cambiamento dei permessi di un file eseguito attraverso queste funzioni ha
+comunque alcune limitazioni, previste per motivi di sicurezza. L'uso delle
+funzioni infatti è possibile solo se l'userid effettivo del processo
+corrisponde a quello del proprietario del file o dell'amministratore,
+altrimenti esse falliranno con un errore di \macro{EPERM}.
+
+Ma oltre a questa regola generale, di immediata comprensione, esistono delle
+limitazioni ulteriori. Per questo motivo, anche se si è proprietari del file,
+non tutti i valori possibili di \param{mode} sono permessi o hanno effetto;
+in particolare accade che:
\begin{enumerate}
\item siccome solo l'amministratore può impostare lo \textit{sticky bit}, se
l'userid effettivo del processo non è zero esso viene automaticamente
cancellato (senza notifica di errore) qualora sia stato indicato in
- \var{mode}.
-\item per via della semantica SVr4 nella creazione dei nuovi file, si può
- avere il caso in cui il file creato da un processo è assegnato a un gruppo
- per il quale il processo non ha privilegi. Per evitare che si possa
- assegnare il bit \acr{sgid} ad un file appartenente a un gruppo per cui non
- si hanno diritti, questo viene automaticamente cancellato (senza notifica di
- errore) da \var{mode} qualora il gruppo del file non corrisponda a quelli
- associati al processo (la cosa non avviene quando l'userid effettivo del
- processo è zero).
+ \param{mode}.
+\item per quanto detto in \secref{sec:file_ownership} riguardo la creazione
+ dei nuovi file, si può avere il caso in cui il file creato da un processo è
+ assegnato a un gruppo per il quale il processo non ha privilegi. Per evitare
+ che si possa assegnare il bit \acr{sgid} ad un file appartenente a un gruppo
+ per cui non si hanno diritti, questo viene automaticamente cancellato da
+ \param{mode} (senza notifica di errore) qualora il gruppo del file non
+ corrisponda a quelli associati al processo (la cosa non avviene quando
+ l'userid effettivo del processo è zero).
\end{enumerate}
Per alcuni filesystem\footnote{il filesystem \acr{ext2} supporta questa
caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore
misura di sicurezza, volta a scongiurare l'abuso dei bit \acr{suid} e
-\acr{sgid}; essa consiste nel cancellare automaticamente questi bit qualora un
-processo che non appartenga all'amministratore scriva su un file. In questo
-modo anche se un utente malizioso scopre un file \acr{suid} su cui può
-scrivere, un'eventuale modifica comporterà la perdita di ogni ulteriore
-privilegio.
+\acr{sgid}; essa consiste nel cancellare automaticamente questi bit dai
+permessi di un file qualora un processo che non appartenga all'amministratore
+effettui una scrittura. In questo modo anche se un utente malizioso scopre un
+file \acr{suid} su cui può scrivere, un'eventuale modifica comporterà la
+perdita di questo privilegio.
\subsection{La funzione \func{umask}}
\label{sec:file_umask}
%completo vedi \ntab), i permessi (vedi \secref{sec:file_perms}), le date (vedi
%\secref{sec:file_times}).
+
+\subsection{Un quadro d'insieme sui permessi}
+\label{sec:file_riepilogo}
+
+Avendo affrontato in maniera separata il comportamento delle varie funzioni ed
+il significato dei singoli bit dei permessi sui file, vale la pena fare un
+riepilogo in cui si riassumono le caratteristiche di ciascuno di essi, in modo
+da poter fornire un quadro d'insieme.
+
+In \tabref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari bit
+per un file; per quanto riguarda l'applicazione dei permessi per proprietario,
+gruppo ed altri si ricordi quanto illustrato in
+\secref{sec:file_perm_overview}. Per compattezza nella tabella si sono
+specificati i bit di \acr{suid}, \acr{sgid} e \acr{stiky} con la notazione
+illustrata anche in \figref{fig:file_perm_bit}.
+
+\begin{table}[!htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|p{7cm}|}
+ \hline
+ \multicolumn{3}{|c|}{}&
+ \multicolumn{3}{|c|}{user}&
+ \multicolumn{3}{|c|}{group}&
+ \multicolumn{3}{|c|}{other}&
+ \multirow{2}{*}{\textbf{Operazioni possibili}} \\
+ \cline{1-12}
+ \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\
+ \hline
+ \hline
+ 1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\
+ -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\
+ -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
+ -&-&1&-&-&-&-&-&-&-&-&-&Ineffettivo\\
+ -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il propritario\\
+ -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo propritario\\
+ -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\
+ -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il propritario\\
+ -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo propritario\\
+ -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\
+ -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il propritario\\
+ -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo propritario\\
+ -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
+ \hline
+ \end{tabular}
+ \caption{Tabella riassuntiva del significato dei bit dei permessi per un
+ file.}
+ \label{tab:file_fileperm_bits}
+\end{table}
+
+In \tabref{tab:file_dirperm_bits} si sono riassunti gli effetti dei vari bit
+per una directory; anche in questo caso si sono specificati i bit di
+\acr{suid}, \acr{sgid} e \acr{stiky} con la notazione illustrata anche in
+\figref{fig:file_perm_bit}.
+
+\begin{table}[!htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|p{7cm}|}
+ \hline
+ \multicolumn{3}{|c|}{}&
+ \multicolumn{3}{|c|}{user}&
+ \multicolumn{3}{|c|}{group}&
+ \multicolumn{3}{|c|}{other}&
+ \multirow{2}{*}{\textbf{Operazioni possibili}} \\
+ \cline{1-12}
+ \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\
+ \hline
+ \hline
+ 1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\
+ -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\
+ -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
+ -&-&1&-&-&-&-&-&-&-&-&-&Ineffettivo\\
+ -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il propritario\\
+ -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo propritario\\
+ -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\
+ -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il propritario\\
+ -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo propritario\\
+ -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\
+ -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il propritario\\
+ -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo propritario\\
+ -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
+ \hline
+ \end{tabular}
+ \caption{Tabella riassuntiva del significato dei bit dei permessi per una
+ directory.}
+ \label{tab:file_dirperm_bits}
+\end{table}
+
+
\subsection{La funzione \func{chroot}}
\label{sec:file_chroot}
-Benché non abbia niente a che fare con permessi, utenti e gruppi, questa
-funzione viene usata spesso per restringere le capacità di acccesso di un
+Benché non abbia niente a che fare con permessi, utenti e gruppi, la funzione
+\func{chroot} viene usata spesso per restringere le capacità di acccesso di un
programma ad una sezione limitata del filesystem, per cui ne parleremo in
questa sezione.