-\chapter{Files e directories}
+\chapter{File e directory}
\label{cha:files_and_dirs}
In questo capitolo tratteremo in dettaglio le modalità con cui si gestiscono
Ad ogni file unix associa sempre l'utente che ne è proprietario (il cosiddetto
\textit{owner}) e il gruppo di appartenenza, secondo il meccanismo degli
identificatori di utenti e gruppi (\textsl{uid} e \textsl{gid}), e accessibili
-da programm tramite i campi \var{st\_uid} e \var{st\_gid} della struttura
+da programma tramite i campi \var{st\_uid} e \var{st\_gid} della struttura
\var{stat} (si veda \secref{sec:filedir_stat}). Ad ogni file viene inoltre
associato un insieme di permessi che sono divisi in tre classi, e cioè
attribuiti rispettivamente all'utente proprietario del file, a un qualunque
utente faccia parte del gruppo cui appartiene il file, e a tutti gli altri
utenti.
-I permessi sono espressi da un insieme di 12 bit: di questi i nove meno
-significativi sono usati a gruppi di tre per indicare i permessi base di
-lettura, scrittura ed esecuzione (indicati rispettivamente con le lettere
-\textsl{w}, \textit{r} \textsl{x} nei comandi di sistema) applicabili
-rispettivamente al proprietario, al gruppo, a tutti. I restanti tre bit
-(\textsl{suid}, \textsl{sgid}, e \textsl{sticky}) sono usati per indicare
-alcune caratteristiche più complesse su cui torneremo in seguito (vedi
+I permessi, così come vengono presi dai comandi e dalle routine di sistema
+sono espressi da un numero di 12 bit; di questi i nove meno significativi sono
+usati a gruppi di tre per indicare i permessi base di lettura, scrittura ed
+esecuzione (indicati rispettivamente con le lettere \textsl{w}, \textit{r}
+\textsl{x} nei comandi di sistema) applicabili rispettivamente al
+proprietario, al gruppo, a tutti. I restanti tre bit (\textsl{suid},
+\textsl{sgid}, e \textsl{sticky}) sono usati per indicare alcune
+caratteristiche più complesse su cui torneremo in seguito (vedi
\secref{sec:filedir_suid_sgid} e \secref{sec:filedir_sticky}).
Anche i permessi sono tenuti per ciascun file (di qualunque tipo, quindi anche
\textit{user}), \textsl{g} (per \textit{group}) e \textsl{o} (per
\textit{other}), inoltre se si vuole indicare tutti questi gruppi insieme si
usa la lettera \textsl{a} (per \textit{all}). Si tenga ben presente questa
-distinzione, dato che in certi casi, mutuando la termimologia in uso nel VMS,
+distinzione, dato che in certi casi, mutuando la terminologia in uso nel VMS,
si parla dei permessi base come di permessi di owner, group ed all, le cui
-iniziali possono da luogo a confuzione. Le costanti che permettono di accedere
+iniziali possono da luogo a confusione. Le costanti che permettono di accedere
al valore numerico di questi bit sono riportate in \ntab.
\begin{table}[htb]
processo appartiene ad un gruppo appropriato, in questo caso i permessi per
tutti gli altri non vengono controllati.
-\subsection{I flag \texttt{suid} e \texttt{sgid}}
+\subsection{I flag \textsl{suid} e \textsl{sgid}}
\label{sec:filedir_suid_sgid}
-Quandi si lancia un programma in genere l'\textit{effective user id} e
-l'\textit{effective group id} sono settati rispettivamente all'uid e al gid
-dell'utente che ha lanciato il programma.
-
-
-Ma nei dodici bit del campo \var{st\_mode} relativi ai permessi esiste un bit
-speciale, il \textit{set-user-ID bit} o suid, che se settato fa si che quando
-un programma viene lanciato invece di avere assegnato come \textit{effective
- user id} l'uid di chi lo lancia, assume quello del proprietario del file.
-Analogamente il \textit{set-group-ID bit} o sgid settato per un file ha lo
-stesso effetto sull'\textit{effective group id}.
-
-Questa caratteristica viene usata per permettere agli utenti normali di usare
-programmi che abbisognano di privilegi speciali; l'esempio classico è il
-comando \cmd{passwd} che ha la necessità di modificare il file delle password,
-che può essere scritto solo dall'amministratore. Per questo il comando
-\cmd{passwd} appartiene a root e ha il suid bit settato per cui quando viene
-lanciato da un utente normale ha comunque i privilegi di root.
+Come si è accennato (in \secref{sec:filedir_perm_overview}) nei dodici bit del
+campo \var{st\_mode} usati per il controllo di accesso oltre ai bit dei
+permessi veri e propri, ci sono altri tre bit che vengono usati per indicare
+alcune proprietà speciali dei file. Due di questi sono i bit detti
+\textsl{suid} e \textsl{sgid}.
+
+Come spiegato in dettaglio in \secref{sec:prochand_exec}, quando si lancia un
+programma il comportamendo normale del kernel è quello di settare
+l'\textit{effective user id} e l'\textit{effective group id} del nuovo
+processo all'uid e al gid del processo corrente, che corrispondono dell'utente
+con cui si è entrati nel sistema.
+
+Se però il file del programma (che ovviamente deve essere eseguibile) ha il
+bit \textsl{suid} (o \textit{set-user-ID bit}) settato al posto dell'uid del
+processo originario il kernel assegnerà come \textit{effective user id} al
+nuovo processo l'uid del proprietario del file. Analogamente avere il bit
+\textsl{sgid} (o \textit{set-group-ID bit}) settato ha lo stesso effetto
+sull'\textit{effective group id}.
+
+I bit \textsl{suid} e \textsl{sgid} vengono usati per permettere agli utenti
+normali di usare programmi che abbisognano di privilegi speciali; l'esempio
+classico è il comando \cmd{passwd} che ha la necessità di modificare il file
+delle password, quest'ultimo ovviamente può essere scritto solo
+dall'amministratore, ma non è necessairo chiamare l'amministratore per
+cambiare la propria pasword. Infatti il comando \cmd{passwd} appartiene a root
+ma ha il suid bit settato per cui quando viene lanciato da un utente normale
+parte con i privilegi di root.
Chiaramente avere un processo che ha privilegi superiori a quelli che avrebbe
-normalmente un utente comporta vari rischi, e questo tipo di programmi devono
-essere scritti accuratamente (torneremo sull'argomento in
+normalmente l'utente che lo ha lanciato comporta vari rischi, e questo tipo di
+programmi devono essere scritti accuratamente (torneremo sull'argomento in
\secref{sec:prochand_perms}).
I due bit suid e sgid possono essere controllati all'interno di \var{st\_mode}
con l'uso delle due costanti \macro{S\_ISUID} e \macro{S\_ISGID}, definite in
-\tabref{tab:filedir_file_mode_flags}.
+\tabref{tab:filedir_file_mode_flags}. I file possono essere identificati con
+il comando \cmd{ls -l} in quanto presentano la lettera \cmd{s} al posto della
+\cmd{x} in corrispondenza dei permessi di utente o gruppo. La stessa lettera
+\cmd{s} può essere usata nel comando \cmd{chmod} per settare questi bit.
+
+Gli stessi bit vengono ad assumere in significato completamente diverso per le
+directory, in questo caso infatti linux usa la convezione di SVR4 per indicare
+con questi bit l'uso della semantica BSD nella creazione di nuovi file
+(si veda \secref{sec:filedir_ownership}).
+
+Infine il caso in cui il file abbia il bit \textsl{sgid} settato ma non il
+corrispondente bit per l'esecuzione viene utilizzato per attivare per quel
+file il \textit{mandatory locking} (argomento affrontato nei dettagli in
+\secref{sec:xxx_mandatory_lock}).
\subsection{Il flag \texttt{sticky}}
\label{sec:filedir_sticky}
-L'ultimo
+L'ultimo
-\subsection{La titolarità di nuovi files e directory}
+\subsection{La titolarità di nuovi file e directory}
\label{sec:filedir_ownership}
funzione \texttt{stat} ed esamineremo alcune funzioni utilizzabili per
manipolare una parte di questa informazione. Tutto quello che invece riguarda
il meccanismo di controllo di accesso ad i file e le relative funzioni di
-manipolazione sarà invece esaminanto in \secref{sec:filedir_access_control}.
+manipolazione sarà invece esaminato in \secref{sec:filedir_access_control}.
\subsection{Le funzioni \texttt{stat}, \texttt{fstat} e \texttt{lstat}}
\subsection{La dimensione dei file}
\label{sec:filedir_file_size}
-Il membro \var{st\_size} contiene la dimensione del file in bytes (se il file
+Il membro \var{st\_size} contiene la dimensione del file in byte (se il file
è un file normale, nel caso di un link simbolico al dimensione è quella del
pathname che contiene).
(valore specifico ritornato da linux che non consente l'uso di
\texttt{unlink} con le directory, e non conforme allo standard POSIX, che
prescrive invece l'uso di \texttt{EPERM} in caso l'operazione non sia
- consnetita o il processo non abbia privilegi sufficienti).
+ consentita o il processo non abbia privilegi sufficienti).
\item \texttt{EROFS} \var{pathname} è su un filesystem montato in sola
lettura.
\item \texttt{EISDIR} \var{pathname} fa riferimento a una directory.
La funzione restituisce zero in caso di successo e -1 per un errore, in caso
di errore. La variabile \texttt{errno} viene settata secondo i codici di
- errore standard di accesso ai files (trattati in dettaglio in
+ errore standard di accesso ai file (trattati in dettaglio in
\secref{sec:filedir_access_control}) ai quali si aggiungono i seguenti:
\begin{errlist}
\item \texttt{EEXIST} Un file (o una directory) con quel nome esiste di
\end{table}
si noti che non si è specificato il comportamento delle funzioni che operano
con i file descriptor, in quanto la gestione del link simbolico viene in
-genere effttuata dalla funzione che restituisce il file descriptor
+genere effettuata dalla funzione che restituisce il file descriptor
(normalmente la \func{open}).
\begin{figure}[htb]
La funzione restituisce zero in caso di successo e -1 per un errore, in caso
di errore \texttt{errno} viene settata secondo i codici di errore standard
- di accesso ai files (trattati in dettaglio in
+ di accesso ai file (trattati in dettaglio in
\secref{sec:filedir_access_control}) ai quali si aggiungono i seguenti:
\begin{errlist}
\item \texttt{EACCESS}
Entrambe le funzioni restituiscono zero in caso di successo e -1 per un
errore, in caso di errore \texttt{errno} viene settata secondo i codici di
- errore standard di accesso ai files (trattati in dettaglio in
+ errore standard di accesso ai file (trattati in dettaglio in
\secref{sec:filedir_access_control}) ai quali si aggiunge il codice
\texttt{ENOTDIR} nel caso il \texttt{filename} indichi un file che non sia
una directory.