Inseriti i codici di errore.
[gapil.git] / filedir.tex
index 940c4bbdb313a8bad2a3ccbcaa8d582990862937..b7192d5e16826717298b844964f100f8716f5865 100644 (file)
@@ -122,14 +122,15 @@ per poter troncare il file con l'opzione \macro{O\_TRUNC}.
 Non si può creare un file fintanto che non si disponga del permesso di
 esecuzione e di quello di scrittura per la directory di destinazione; gli
 stessi permessi occorrono per cancellare un file da una directory (si ricordi
-che questo non implica necessariamente la rimozione fisica del file), non è
-necessario nessun tipo di permesso per il file stesso (infatti esso non viene
-toccato, viene solo modificato il contenuto della directory, rimuovendo la
-voce che ad esso fa rifermento).
+che questo non implica necessariamente la rimozione del contenuto del file dal
+disco), non è necessario nessun tipo di permesso per il file stesso (infatti
+esso non viene toccato, viene solo modificato il contenuto della directory,
+rimuovendo la voce che ad esso fa rifermento).
 
 Per poter eseguire un file (che sia un programma compilato od uno script di
-shell), occorre il permesso di esecuzione per il medesimo, inoltre solo i file
-regolari possono essere eseguiti. 
+shell, od un altro tipo di file eseguibile riconosciuto dal kernel), occorre
+avere il permesso di esecuzione, inoltre solo i file regolari possono essere
+eseguiti.
 
 I permessi per un link simbolico sono ignorati, contano quelli del file a cui
 fa riferimento; per questo in genere \cmd{ls} per un link simbolico riporta
@@ -219,28 +220,30 @@ l'\textit{effective user id} e l'\textit{effective group id} del nuovo
 processo all'uid e al gid del processo corrente, che normalmente 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} settato, il kernel assegnerà come \textit{effective user id}
-al nuovo processo l'uid del proprietario del file al posto dell'uid del
-processo originario.  Avere il bit \textsl{sgid} settato ha lo stesso effetto
-sull'\textit{effective group id} del processo.
+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} settato, il kernel
+assegnerà come \textit{effective user id} al nuovo processo l'uid del
+proprietario del file al posto dell'uid del processo originario.  Avere il bit
+\acr{sgid} settato ha lo stesso effetto sull'\textit{effective group id} del
+processo.
 
 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 è necessario chiamare l'amministratore per
-cambiare la propria password. 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.
+cambiare la propria password. Infatti il comando \cmd{passwd} appartiene a
+root ma ha il bit suid 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 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}) per evitare che possano essere usati per
-guadagnare privilegi non consentiti.
+programmi devono essere scritti accuratamente per evitare che possano essere
+usati per guadagnare privilegi non consentiti (torneremo sull'argomento in
+\secref{sec:prochand_perms}).
 
-La presenza dei bit \textsl{suid} e \textsl{sgid} su un file può essere
+La presenza dei bit \acr{suid} e \acr{sgid} su un file può essere
 rilevata con il comando \cmd{ls -l}, in tal caso comparirà 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
@@ -276,21 +279,22 @@ L'effetto di questo bit era che il segmento di testo del programma (si veda
 prima volta che questo veniva lanciato, e vi permaneva fino al riavvio della
 mecchina (da questo il nome di \textsl{sticky bit}); essendo la swap un file
 continuo indicizzato direttamente in questo modo si poteva risparmiare in
-tempo di caricamento rispetto alla ricerca del file su disco.
+tempo di caricamento rispetto alla ricerca del file su disco. Lo
+\textsl{sticky bit} è indicato usando la lettera \cmd{t} al posto della
+\cmd{x} nei permessi per gli altri.
 
 Ovviamente per evitare che gli utenti potessero intasare la swap solo
 l'amministratore era in grado di settare questo bit, che venne chiamato anche
-\textit{saved text bit}, da cui deriva il nome della costante. Le attuali
-implementazioni di memoria virtuale e filesystem rendono sostanzialmente
-inutile questo procedimento. Lo \textsl{sticky bit} è indicato attraverso la
-lettera \cmd{t} al posto della \cmd{x} nei permessi per gli altri.
+con il nome di \textit{saved text bit}, da cui deriva quello della costante.
+Le attuali implementazioni di memoria virtuale e filesystem rendono
+sostanzialmente inutile questo procedimento.
 
 Benché ormai non venga più utilizzato per i file, lo \textsl{sticky bit} ha
-assunto un uso corrente per le directory\footnote{lo \textsl{sticky bit} è una
-  estensione non definita nello standard POSIX, Linux però la supporta, così
-  come BSD e SVR4}, in questo caso se il bit è settato un file potrà essere
-rimosso dalla directory soltanto se l'utente ha il permesso di scrittura ed
-inoltre è vera una delle seguenti condizioni:
+assunto un uso corrente per le directory\footnote{lo \textsl{sticky bit} per
+  le directory è una estensione non definita nello standard POSIX, Linux però
+  la supporta, così come BSD e SVR4}, in questo caso se il bit è settato un
+file potrà essere rimosso dalla directory soltanto se l'utente ha il permesso
+di scrittura ed inoltre è vera una delle seguenti condizioni:
 \begin{itemize}
 \item l'utente è proprietario del file
 \item l'utente è proprietario della directory
@@ -299,13 +303,13 @@ inoltre 
 un classico esempio di directory che ha questo bit settato è \file{/tmp}, i
 permessi infatti di solito sono settati come:
 \begin{verbatim}
-$ ls -l /tmp
+$ ls -ld /tmp
 drwxrwxrwt    6 root     root         1024 Aug 10 01:03 /tmp
 \end{verbatim}%$
 in questo modo chiunque può leggere, scrivere ed eseguire i file temporanei
 ivi memorizzati, sia crearne di nuovi, ma solo l'utente che ha creato un file
-nella directory potrà cancellarlo o rinominarlo, evitando così che utente
-possa, più o meno consapevolemnte, cancellare i file degli altri.
+nella directory potrà cancellarlo o rinominarlo, così si può evitare che un
+utente possa, più o meno consapevolemnte, cancellare i file degli altri.
 
 
 \subsection{La titolarità di nuovi file e directory}
@@ -419,17 +423,17 @@ i cui prototipi sono:
   
   \funcdecl{int fchmod(int fd, mode\_t mode)} Analoga alla precedente, ma usa
   il file descriptor \var{fd} per indicare il file.
-
+  
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori:
+  caso di errore \texttt{errno} può assumere i valori:
   \begin{errlist}
   \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello
     del proprietario del file o non è zero.
   \end{errlist}
-  Oltre a questi entrambe restituiscono gli errori \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{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}.
 \end{functions}
 
 I valori possibili per \var{mode} sono indicati in \ntab. I valori possono
@@ -450,38 +454,23 @@ il valore da fornire sarebbe $4755$.
     \hline
     \hline
     \macro{S\_ISUID} & 04000 & set user ID \\
-
     \macro{S\_ISGID} & 02000 & set group ID \\
-    
     \macro{S\_ISVTX} & 01000 & sticky bit \\
-
     \hline
     \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
-
     \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura  \\
-
     \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
-
     \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
-
     \hline
     \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi  \\
-
     \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura  \\
-
     \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
-
     \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
-
     \hline
     \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
-
     \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura  \\
-
     \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
-
     \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.}
@@ -509,10 +498,10 @@ particolare:
 
 Per alcuni filesystem\footnote{il filesystem \textsl{ext2} supporta questa
   caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore
-misura di sicurezza, volta ad scongiurare l'abuso dei bit \textsl{suid} e
-\textsl{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 \textsl{suid} su cui può
+misura di sicurezza, volta ad 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.
 
@@ -550,9 +539,9 @@ possibile cancellare automaticamente i permessi non voluti, senza doverlo fare
 esplicitamente.
 
 In genere il valore di \func{umask} viene stabilito una volta per tutte al
-login, e di norma gli utenti non hanno motivi per modificarlo. Se però si
-vuole che un processo possa creare un file che chiunque possa leggere allora
-occorrerà cambiare il valore di \func{umask}.
+login a $022$, e di norma gli utenti non hanno motivi per modificarlo. Se però
+si vuole che un processo possa creare un file che chiunque possa leggere
+allora occorrerà cambiare il valore di \func{umask}.
 
 \subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}}
 \label{sec:file_chown}
@@ -584,12 +573,12 @@ sono tre e i loro prototipi sono i seguenti:
   \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.
 \end{functions}
 
-Soltanto l'amministratore può cambiare il proprietario di un file, seguendo la
-semantica di BSD che non consente agli utenti di assegnare i loro file ad
-altri (per evitare eventuali aggiramenti delle quote). L'amministratore può
-cambiare il gruppo di un file, il proprietario può cambiare il gruppo dei file
-che gli appartengono solo se il nuovo gruppo è il suo gruppo primario o uno
-dei gruppi a cui appartiene.
+In Linux soltanto l'amministratore può cambiare il proprietario di un file,
+seguendo la semantica di BSD che non consente agli utenti di assegnare i loro
+file ad altri (per evitare eventuali aggiramenti delle quote).
+L'amministratore può cambiare il gruppo di un file, il proprietario può
+cambiare il gruppo dei file che gli appartengono solo se il nuovo gruppo è il
+suo gruppo primario o uno dei gruppi a cui appartiene.
 
 La funzione \func{chown} segue i link simbolici, per operare direttamente su
 in link simbolico si deve usare la funzione \func{lchown}\footnote{fino alla
@@ -623,18 +612,19 @@ generali relative alle caratteristiche di ciascun file, a partire dalle
 informazioni relative al controllo di accesso, sono mantenute nell'inode.
 
 Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
-usando la funzione \texttt{stat}, esamineremo poi le varie funzioni che si
-possono per manipolare le restanti informazioni (avendo esaminato quelle per
-la gestione del controllo di accesso in \secref{sec:file_access_control}).
+usando la funzione \texttt{stat}, che permette l'accesso a tutti i dati
+memorizzati nell'inode; esamineremo poi le varie funzioni usate per manipolare
+tutte queste informazioni (eccetto quelle che riguardano la gestione del
+controllo di accesso, già trattate in in \secref{sec:file_access_control}).
 
 
 \subsection{Le funzioni \texttt{stat}, \texttt{fstat} e \texttt{lstat}}
 \label{sec:file_stat}
 
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
-delle funzioni \func{stat}, che è la funzione che il comando \cmd{ls} usa
-per poter stampare tutti i dati dei files. I prototipi di queste funzioni sono
-i seguenti:
+delle funzioni \func{stat}; questa è la funzione che il comando \cmd{ls} usa
+per poter ottenere e mostrare tutti i dati dei files. I prototipi di queste
+funzioni sono i seguenti:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h} 
@@ -653,9 +643,9 @@ i seguenti:
   descriptor \var{filedes}.
   
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori \macro{EACCESS},
-  \macro{EBADF}, \macro{ELOOP}, \macro{EFAULT}, \macro{ENOENT},
-  \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
+  caso di errore \texttt{errno} può assumere uno dei valori: \macro{EBADF},
+  \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT},
+  \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
 \end{functions}
 
 La struttura \texttt{stat} è definita nell'header \texttt{sys/stat.h} e in