Riscritti meglio guid e sgid
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 8 Aug 2001 21:02:11 +0000 (21:02 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 8 Aug 2001 21:02:11 +0000 (21:02 +0000)
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
 \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
 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.
 
 \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
 \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
 \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
 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]
 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.
 
 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}
 
 \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
 
 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
 \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}
 
 
 
 \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}
 
 
 \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
 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{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}
 
 \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). 
 
 è 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
     (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.
   \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
   
   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
   \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
 \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]
 (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
   
   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} 
   \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
 
   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.
   \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.