Riscritti meglio guid e sgid
[gapil.git] / filedir.tex
index db9c352402dc45ab9846afe37bd79ca9fa471008..9843aff7148cbce59bd66f2b2147160740254ecc 100644 (file)
@@ -1,4 +1,4 @@
-\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
@@ -35,20 +35,21 @@ accesso molto pi
 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
@@ -61,9 +62,9 @@ In genere ci si riferisce a questi permessi usando le lettere \textsl{u} (per
 \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]
@@ -191,44 +192,66 @@ 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
 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}
 
 
@@ -266,7 +289,7 @@ nell'inode. Vedremo in questa sezione come sia possibile accedervi usando la
 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}}
@@ -439,7 +462,7 @@ poi si effettua il confronto con la combinazione di tipi scelta.
 \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). 
 
@@ -773,7 +796,7 @@ effettua con la funzione \texttt{unlink}; il suo prototipo 
     (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.
@@ -913,7 +936,7 @@ dichiarate nell'header file \texttt{unistd.h}.
   
   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
@@ -992,7 +1015,7 @@ link simbolico e quali possono operare direttamente sul suo contenuto.
 \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]
@@ -1049,7 +1072,7 @@ programma deve includere il file \texttt{sys/types.h}.
   
   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} 
@@ -1159,7 +1182,7 @@ per cambiare directory di lavoro.
 
   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.