Trattati i protected symlinks
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 21 Aug 2018 23:54:48 +0000 (01:54 +0200)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 21 Aug 2018 23:54:48 +0000 (01:54 +0200)
errors.tex
filedir.tex
procadv.tex
ringraziamenti.tex

index 9d57e147fd49bb55c1598213b9eae1adead4162f..0d40a33ec772766a88a71dd3ef364253a574314f 100644 (file)
@@ -36,109 +36,111 @@ In questa sezione sono raccolti i codici restituiti dalle \textit{system call}
 attinenti ad errori che riguardano operazioni specifiche relative alla
 gestione dei file.
 
-\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
-\item[\errcode{EPERM} \textit{Operation not permitted}.] L'operazione non è
-  permessa: solo il proprietario del file o un processo con sufficienti
-  privilegi può eseguire l'operazione.
-\item[\errcode{ENOENT} \textit{No such file or directory}.] Il file indicato
-  dal \textit{pathname} non esiste: o una delle componenti non esiste o il
-  \textit{pathname} contiene un link simbolico spezzato.  Errore tipico di un
-  riferimento ad un file che si suppone erroneamente essere esistente.
-\item[\errcode{EIO} \textit{Input/output error}.] Errore di input/output:
-  usato per riportare errori hardware in lettura/scrittura su un dispositivo.
-\item[\errcode{ENXIO} \textit{No such device or address}.] Dispositivo
-  inesistente: il sistema ha tentato di usare un dispositivo attraverso il
-  file specificato, ma non lo ha trovato. Può significare che il file di
-  dispositivo non è corretto, che il modulo relativo non è stato caricato nel
-  kernel, o che il dispositivo è fisicamente assente o non funzionante.
-\item[\errcode{ENOEXEC} \textit{Invalid executable file format}.] Il file non
-  ha un formato eseguibile, è un errore riscontrato dalle funzioni
-  \func{exec}.
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
+\item[\errcode{EACCES} \textit{Permission denied}.] Permesso negato; l'accesso
+  al file o alla directory non è consentito: i permessi del file o della
+  directory o quelli necessari ad attraversare un \textit{pathname} non
+  consentono l'operazione richiesta. 
 \item[\errcode{EBADF} \textit{Bad file descriptor}.] File descriptor non
   valido: si è usato un file descriptor inesistente, o aperto in sola lettura
   per scrivere, o viceversa, o si è cercato di eseguire un'operazione non
   consentita per quel tipo di file descriptor.
-\item[\errcode{EACCES} \textit{Permission denied}.] Permesso negato; l'accesso
-  al file o alla directory non è consentito: i permessi del file o della
-  directory non consentono l'operazione richiesta.
-\item[\errcode{ELOOP} \textit{Too many symbolic links encountered}.] Ci sono
-  troppi link simbolici nella risoluzione di un \textit{pathname}.
-\item[\errcode{ENAMETOOLONG} \textit{File name too long}.] Si è indicato un
-  \textit{pathname} troppo lungo per un file o una directory.
-\item[\errcode{ENOTBLK} \textit{Block device required}.] Si è specificato un
-  file che non è un \textit{block device} in un contesto in cui era necessario
-  specificare un \textit{block device} (ad esempio si è tentato di montare un
-  file ordinario).
-\item[\errcode{EEXIST} \textit{File exists}.] Si è specificato un file
-  esistente in un contesto in cui ha senso solo specificare un nuovo file.
 \item[\errcode{EBUSY} \textit{Resource busy}.] Una risorsa di sistema che non
   può essere condivisa è occupata. Ad esempio si è tentato di cancellare la
   directory su cui si è montato un filesystem.
-\item[\errcode{EXDEV} \textit{Cross-device link}.] Si è tentato di creare un
-  link diretto che attraversa due filesystem differenti.
-\item[\errcode{ENODEV} \textit{No such device}.] Si è indicato un tipo di
-  device sbagliato ad una funzione che ne richiede uno specifico.
-\item[\errcode{ENOTDIR} \textit{Not a directory}.] Si è specificato un file
-  che non è una directory in una operazione che richiede una directory.
+\item[\errcode{EDQUOT} \textit{Quota exceeded}.] Si è ecceduta la quota di
+  disco dell'utente, usato sia per lo spazio disco che per il numero di
+  \textit{inode}.
+\item[\errcode{EEXIST} \textit{File exists}.] Si è specificato un file
+  esistente in un contesto in cui ha senso solo specificare un nuovo file.
+\item[\errcode{EFBIG} \textit{File too big}.] Si è ecceduto il limite imposto
+  dal sistema sulla dimensione massima che un file può avere.
+\item[\errcode{EFTYPE} \textit{Inappropriate file type or format}.] Il file è
+  di tipo sbagliato rispetto all'operazione richiesta o un file di dati ha un
+  formato sbagliato. Alcuni sistemi restituiscono questo errore quando si
+  cerca di impostare lo \textit{sticky bit} su un file che non è una
+  directory.
+\item[\errcode{EIO} \textit{Input/output error}.] Errore di input/output:
+  usato per riportare errori hardware in lettura/scrittura su un dispositivo.
 \item[\errcode{EISDIR} \textit{Is a directory}.] Il file specificato è una
   directory; non può essere aperto in scrittura, né si possono creare o
   rimuovere link diretti ad essa.
+\item[\errcode{ELOOP} \textit{Too many symbolic links encountered}.] Ci sono
+  troppi link simbolici nella risoluzione di un \textit{pathname}.
 \item[\errcode{EMFILE} \textit{Too many open files}.] Il processo corrente ha
   troppi file aperti e non può aprirne altri. Anche i descrittori duplicati ed
   i socket vengono tenuti in conto.\footnote{il numero massimo di file aperti
     è controllabile dal sistema; in Linux si può impostare usando il comando
     \cmd{ulimit}, esso è in genere indicato dalla costante \const{OPEN\_MAX},
     vedi sez.~\ref{sec:sys_limits}.}
+\item[\errcode{EMLINK} \textit{Too many links}.] Ci sono già troppi link al
+  file, il numero massimo è specificato dalla variabile \const{LINK\_MAX},
+  vedi sez.~\ref{sec:sys_limits}.
+\item[\errcode{ENAMETOOLONG} \textit{File name too long}.] Si è indicato un
+  \textit{pathname} troppo lungo per un file o una directory.
 \item[\errcode{ENFILE} \textit{File table overflow}.] Il sistema ha troppi
   file aperti in contemporanea. Si tenga presente che anche i socket contano
   come file. Questa è una condizione temporanea, ed è molto difficile che si
   verifichi nei sistemi moderni.
-\item[\errcode{ENOTTY} \textit{Not a terminal}.] Si è tentata una operazione
-  di controllo relativa ad un terminale su un file che non lo è.
-\item[\errcode{ETXTBSY} \textit{Text file busy}.] Si è cercato di eseguire un
-  file che è aperto in scrittura, o di scrivere su un file che è in
-  esecuzione.
-\item[\errcode{EFBIG} \textit{File too big}.] Si è ecceduto il limite imposto
-  dal sistema sulla dimensione massima che un file può avere.
+\item[\errcode{ENODEV} \textit{No such device}.] Si è indicato un tipo di
+  device sbagliato ad una funzione che ne richiede uno specifico.
+\item[\errcode{ENOENT} \textit{No such file or directory}.] Il file indicato
+  dal \textit{pathname} non esiste: o una delle componenti non esiste o il
+  \textit{pathname} contiene un link simbolico spezzato.  Errore tipico di un
+  riferimento ad un file che si suppone erroneamente essere esistente.
+\item[\errcode{ENOEXEC} \textit{Invalid executable file format}.] Il file non
+  ha un formato eseguibile, è un errore riscontrato dalle funzioni
+  \func{exec}.
+\item[\errcode{ENOLCK} \textit{No locks available}.] È usato dalle utilità per
+  la gestione del file locking; non viene generato da un sistema GNU, ma può
+  risultare da un'operazione su un server NFS di un altro sistema.
 \item[\errcode{ENOSPC} \textit{No space left on device}.] La directory in cui
   si vuole creare il link non ha spazio per ulteriori voci, o si è cercato di
   scrivere o di creare un nuovo file su un dispositivo che è già pieno.
-\item[\errcode{ESPIPE} \textit{Invalid seek operation}.] Si cercato di
-  eseguire una \func{lseek} su un file che non supporta questa operazione (ad
-  esempio su una \textit{pipe}, da cui il nome).
-\item[\errcode{EROFS} \textit{Read-only file system}.]  Si è cercato di
-  eseguire una operazione di scrittura su un file o una directory che risiede
-  su un filesystem montato un sola lettura.
-\item[\errcode{EMLINK} \textit{Too many links}.] Ci sono già troppi link al
-  file, il numero massimo è specificato dalla variabile \const{LINK\_MAX},
-  vedi sez.~\ref{sec:sys_limits}.
+\item[\errcode{ENOTBLK} \textit{Block device required}.] Si è specificato un
+  file che non è un \textit{block device} in un contesto in cui era necessario
+  specificare un \textit{block device} (ad esempio si è tentato di montare un
+  file ordinario).
+\item[\errcode{ENOTDIR} \textit{Not a directory}.] Si è specificato un file
+  che non è una directory in una operazione che richiede una directory.
+\item[\errcode{ENOTEMPTY} \textit{Directory not empty}.] La directory non è
+  vuota quando l'operazione richiede che lo sia. È l'errore tipico che si ha
+  quando si cerca di cancellare una directory contenente dei file.
+\item[\errcode{ENOTTY} \textit{Not a terminal}.] Si è tentata una operazione
+  di controllo relativa ad un terminale su un file che non lo è.
+\item[\errcode{ENXIO} \textit{No such device or address}.] Dispositivo
+  inesistente: il sistema ha tentato di usare un dispositivo attraverso il
+  file specificato, ma non lo ha trovato. Può significare che il file di
+  dispositivo non è corretto, che il modulo relativo non è stato caricato nel
+  kernel, o che il dispositivo è fisicamente assente o non funzionante.
+\item[\errcode{EPERM} \textit{Operation not permitted}.] L'operazione non è
+  permessa: solo il proprietario del file o un processo con sufficienti
+  privilegi può eseguire l'operazione.
 \item[\errcode{EPIPE} \textit{Broken pipe}.] Non c'è un processo che stia
   leggendo l'altro capo della \textit{pipe}. Ogni funzione che restituisce
   questo errore genera anche un segnale \signal{SIGPIPE}, la cui azione
   predefinita è terminare il programma; pertanto non si potrà vedere questo
   errore fintanto che \signal{SIGPIPE} non viene gestito o bloccato.
-\item[\errcode{ENOTEMPTY} \textit{Directory not empty}.] La directory non è
-  vuota quando l'operazione richiede che lo sia. È l'errore tipico che si ha
-  quando si cerca di cancellare una directory contenente dei file.
-\item[\errcode{EUSERS} \textit{Too many users}.] Troppi utenti, il sistema delle
-  quote rileva troppi utenti nel sistema.
-\item[\errcode{EDQUOT} \textit{Quota exceeded}.] Si è ecceduta la quota di disco
-  dell'utente.
+\item[\errcode{EREMOTE} \textit{Object is remote}.] Si è fatto un tentativo di
+  montare via NFS un filesystem remoto con un nome  che già specifica un
+  filesystem montato via NFS. 
+\item[\errcode{EROFS} \textit{Read-only file system}.]  Si è cercato di
+  eseguire una operazione di scrittura su un file o una directory che risiede
+  su un filesystem montato un sola lettura.
+\item[\errcode{ESPIPE} \textit{Invalid seek operation}.] Si cercato di
+  eseguire una \func{lseek} su un file che non supporta questa operazione (ad
+  esempio su una \textit{pipe}, da cui il nome).
 \item[\errcode{ESTALE} \textit{Stale NFS file handle}.] Indica un problema
   interno a NFS causato da cambiamenti del filesystem del sistema remoto. Per
   recuperare questa condizione in genere è necessario smontare e rimontare il
   filesystem NFS.
-\item[\errcode{EREMOTE} \textit{Object is remote}.] Si è fatto un tentativo di
-  montare via NFS un filesystem remoto con un nome  che già specifica un
-  filesystem montato via NFS. 
-\item[\errcode{ENOLCK} \textit{No locks available}.] È usato dalle utilità per
-  la gestione del file locking; non viene generato da un sistema GNU, ma può
-  risultare da un'operazione su un server NFS di un altro sistema.
-\item[\errcode{EFTYPE} \textit{Inappropriate file type or format}.] Il file è
-  di tipo sbagliato rispetto all'operazione richiesta o un file di dati ha un
-  formato sbagliato. Alcuni sistemi restituiscono questo errore quando si
-  cerca di impostare lo \textit{sticky bit} su un file che non è una
-  directory.
+\item[\errcode{ETXTBSY} \textit{Text file busy}.] Si è cercato di eseguire un
+  file che è aperto in scrittura, o di scrivere su un file che è in
+  esecuzione.
+\item[\errcode{EUSERS} \textit{Too many users}.] Troppi utenti, il sistema delle
+  quote rileva troppi utenti nel sistema.
+\item[\errcode{EXDEV} \textit{Cross-device link}.] Si è tentato di creare un
+  link diretto che attraversa due filesystem differenti.
 \end{basedescript}
 
 \section{Gli errori dei processi}
@@ -148,10 +150,7 @@ In questa sezione sono raccolti i codici restituiti dalle \textit{system call}
 attinenti ad errori che riguardano operazioni specifiche relative alla
 gestione dei processi.
 
-\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
-\item[\errcode{ESRCH} \textit{No process matches the specified process ID}.]
-  Non esiste un processo o un \textit{process group} corrispondenti al valore
-  dell'identificativo specificato.
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\errcode{E2BIG} \textit{Argument list too long}.] La lista degli
   argomenti passati è troppo lunga: è una condizione prevista da POSIX quando
   la lista degli argomenti passata ad una delle funzioni \func{exec} occupa
@@ -163,6 +162,9 @@ gestione dei processi.
   per nuovi processi (vedi sez.~\ref{sec:sys_resource_limit}) sarà ecceduto
   alla prossima \func{fork}; è un codice di errore di BSD, che non viene
   utilizzato al momento su Linux. 
+\item[\errcode{ESRCH} \textit{No process matches the specified process ID}.]
+  Non esiste un processo o un \textit{process group} corrispondenti al valore
+  dell'identificativo specificato.
 \end{basedescript}
 
 
@@ -173,36 +175,7 @@ In questa sezione sono raccolti i codici restituiti dalle \textit{system call}
 attinenti ad errori che riguardano operazioni specifiche relative alla
 gestione dei socket e delle connessioni di rete.
 
-\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
-\item[\errcode{ENOTSOCK} \textit{Socket operation on non-socket}.] Si è
-  tentata un'operazione su un file descriptor che non è un socket quando
-  invece era richiesto un socket.
-\item[\errcode{EMSGSIZE} \textit{Message too long}.] Le dimensioni di un
-  messaggio inviato su un socket sono eccedono la massima lunghezza supportata.
-\item[\errcode{EPROTOTYPE} \textit{Protocol wrong type for socket}.]
-  Protocollo sbagliato per il socket. Il socket usato non supporta il
-  protocollo di comunicazione richiesto.
-\item[\errcode{ENOPROTOOPT} \textit{Protocol not available}.] Protocollo non
-  disponibile. Si è richiesta un'opzione per il socket non disponibile con il
-  protocollo usato.
-\item[\errcode{EPROTONOSUPPORT} \textit{Protocol not supported}.] Protocollo
-  non supportato. Il tipo di socket non supporta il protocollo richiesto (un
-  probabile errore nella specificazione del protocollo).
-\item[\errcode{ESOCKTNOSUPPORT} \textit{Socket type not supported}.] Socket
-  non supportato. Il tipo di socket scelto non è supportato.
-\item[\errcode{EOPNOTSUPP} \textit{Operation not supported on transport
-    endpoint}.] L'operazione richiesta non è supportata. Alcune funzioni non
-  hanno senso per tutti i tipi di socket, ed altre non sono implementate per
-  tutti i protocolli di trasmissione. Questo errore quando un socket non
-  supporta una particolare operazione, e costituisce una indicazione generica
-  che il server non sa cosa fare per la chiamata effettuata.
-\item[\errcode{EPFNOSUPPORT} \textit{Protocol family not supported}.] Famiglia
-  di protocolli non supportata. La famiglia di protocolli richiesta non è
-  supportata.
-\item[\errcode{EAFNOSUPPORT} \textit{Address family not supported by
-    protocol}.]  Famiglia di indirizzi non supportata. La famiglia di
-  indirizzi richiesta non è supportata, o è inconsistente con il protocollo
-  usato dal socket.
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\errcode{EADDRINUSE} \textit{Address already in use}.] L'indirizzo del
   socket richiesto è già utilizzato (ad esempio si è eseguita \func{bind}
   su una porta già in uso).
@@ -210,50 +183,75 @@ gestione dei socket e delle connessioni di rete.
     address}.]  L'indirizzo richiesto non è disponibile (ad esempio si
   è cercato di dare al socket un nome che non corrisponde al nome
   della stazione locale), o l'interfaccia richiesta non esiste.
-\item[\errcode{ENETDOWN} \textit{Network is down}.] L'operazione sul socket è
-  fallita perché la rete è sconnessa.
-\item[\errcode{ENETUNREACH} \textit{Network is unreachable}.] L'operazione è
-  fallita perché l'indirizzo richiesto è irraggiungibile (ad esempio la
-  sottorete della stazione remota è irraggiungibile).
-\item[\errcode{ENETRESET} \textit{Network dropped connection because of
-    reset}.]  Una connessione è stata cancellata perché l'host remoto è
-  caduto.
+\item[\errcode{EAFNOSUPPORT} \textit{Address family not supported by
+    protocol}.]  Famiglia di indirizzi non supportata. La famiglia di
+  indirizzi richiesta non è supportata, o è inconsistente con il protocollo
+  usato dal socket.
 \item[\errcode{ECONNABORTED} \textit{Software caused connection abort}.] Una
   connessione è stata abortita localmente. 
+\item[\errcode{ECONNREFUSED} \textit{Connection refused}.] Un host remoto ha
+  rifiutato la connessione (in genere dipende dal fatto che non c'è un server
+  per soddisfare il servizio richiesto).  
 \item[\errcode{ECONNRESET} \textit{Connection reset by peer}.] Una connessione
   è stata chiusa per ragioni fuori dal controllo dell'host locale, come il
   riavvio di una macchina remota o un qualche errore non recuperabile sul
   protocollo.
+\item[\errcode{EDESTADDRREQ} \textit{Destination address required}.] Non c'è
+  un indirizzo di destinazione predefinito per il socket. Si ottiene questo
+  errore mandando dato su un socket senza connessione senza averne prima
+  specificato una destinazione.
+\item[\errcode{EISCONN} \textit{Transport endpoint is already connected}.] Si
+  è tentato di connettere un socket che è già connesso.
+\item[\errcode{EMSGSIZE} \textit{Message too long}.] Le dimensioni di un
+  messaggio inviato su un socket sono eccedono la massima lunghezza supportata.
+\item[\errcode{ENETDOWN} \textit{Network is down}.] L'operazione sul socket è
+  fallita perché la rete è sconnessa.
+\item[\errcode{ENETRESET} \textit{Network dropped connection because of
+    reset}.]  Una connessione è stata cancellata perché l'host remoto è
+  caduto.
+\item[\errcode{ENETUNREACH} \textit{Network is unreachable}.] L'operazione è
+  fallita perché l'indirizzo richiesto è irraggiungibile (ad esempio la
+  sottorete della stazione remota è irraggiungibile).
 \item[\errcode{ENOBUFS} \textit{No buffer space available}.] Tutti i buffer per
   le operazioni di I/O del kernel sono occupati. In generale questo errore è
   sinonimo di \errcode{ENOMEM}, ma attiene alle funzioni di input/output. In
   caso di operazioni sulla rete si può ottenere questo errore invece
   dell'altro.
-\item[\errcode{EISCONN} \textit{Transport endpoint is already connected}.] Si
-  è tentato di connettere un socket che è già connesso.
+\item[\errcode{ENOPROTOOPT} \textit{Protocol not available}.] Protocollo non
+  disponibile. Si è richiesta un'opzione per il socket non disponibile con il
+  protocollo usato.
 \item[\errcode{ENOTCONN} \textit{Transport endpoint is not connected}.] Il
   socket non è connesso a niente. Si ottiene questo errore quando si cerca di
   trasmettere dati su un socket senza avere specificato in precedenza la loro
   destinazione. Nel caso di socket senza connessione (ad esempio socket UDP)
   l'errore che si ottiene è \errcode{EDESTADDRREQ}.
-\item[\errcode{EDESTADDRREQ} \textit{Destination address required}.] Non c'è
-  un indirizzo di destinazione predefinito per il socket. Si ottiene questo
-  errore mandando dato su un socket senza connessione senza averne prima
-  specificato una destinazione.
+\item[\errcode{ENOTSOCK} \textit{Socket operation on non-socket}.] Si è
+  tentata un'operazione su un file descriptor che non è un socket quando
+  invece era richiesto un socket.
+\item[\errcode{EOPNOTSUPP} \textit{Operation not supported on transport
+    endpoint}.] L'operazione richiesta non è supportata. Alcune funzioni non
+  hanno senso per tutti i tipi di socket, ed altre non sono implementate per
+  tutti i protocolli di trasmissione. Questo errore quando un socket non
+  supporta una particolare operazione, e costituisce una indicazione generica
+  che il server non sa cosa fare per la chiamata effettuata.
+\item[\errcode{EPFNOSUPPORT} \textit{Protocol family not supported}.] Famiglia
+  di protocolli non supportata. La famiglia di protocolli richiesta non è
+  supportata.
+\item[\errcode{EPROTONOSUPPORT} \textit{Protocol not supported}.] Protocollo
+  non supportato. Il tipo di socket non supporta il protocollo richiesto (un
+  probabile errore nella specificazione del protocollo).
+\item[\errcode{EPROTOTYPE} \textit{Protocol wrong type for socket}.]
+  Protocollo sbagliato per il socket. Il socket usato non supporta il
+  protocollo di comunicazione richiesto.
 \item[\errcode{ESHUTDOWN} \textit{Cannot send after transport endpoint
     shutdown}.] Il socket su cui si cerca di inviare dei dati ha avuto uno
   shutdown.
-\item[\errcode{ETOOMANYREFS} \textit{Too many references: cannot splice}.] La
-  \acr{glibc} dice ???
+\item[\errcode{ESOCKTNOSUPPORT} \textit{Socket type not supported}.] Socket
+  non supportato. Il tipo di socket scelto non è supportato.
 \item[\errcode{ETIMEDOUT} \textit{Connection timed out}.] Un'operazione sul
   socket non ha avuto risposta entro il periodo di timeout.
-\item[\errcode{ECONNREFUSED} \textit{Connection refused}.] Un host remoto ha
-  rifiutato la connessione (in genere dipende dal fatto che non c'è un server
-  per soddisfare il servizio richiesto).  
-\item[\errcode{EHOSTDOWN} \textit{Host is down}.] L'host remoto di una
-  connessione è giù.
-\item[\errcode{EHOSTUNREACH} \textit{No route to host}.]  L'host remoto di una
-  connessione non è raggiungibile.
+\item[\errcode{ETOOMANYREFS} \textit{Too many references: cannot splice}.] La
+  \acr{glibc} dice ???
 \end{basedescript}
 
 
@@ -263,31 +261,7 @@ In questa sezione sono raccolti i codici restituiti dalle \textit{system call}
 attinenti ad errori generici, si trovano qui tutti i codici di errore non
 specificati nelle sezioni precedenti.
 
-\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
-\item[\errcode{EINTR} \textit{Interrupted function call}.] Una funzione di
-  libreria è stata interrotta. In genere questo avviene causa di un segnale
-  asincrono al processo che impedisce la conclusione della chiamata, la
-  funzione ritorna con questo errore una volta che si sia correttamente
-  eseguito il gestore del segnale. In questo caso è necessario ripetere la
-  chiamata alla funzione.
-\item[\errcode{ENOMEM} \textit{No memory available}.] Il kernel non è in grado
-  di allocare ulteriore memoria per completare l'operazione richiesta.
-\item[\errcode{EDEADLK} \textit{Deadlock avoided}.] L'allocazione di una
-  risorsa avrebbe causato un \textit{deadlock}. Non sempre il sistema è in
-  grado di riconoscere queste situazioni, nel qual caso si avrebbe il blocco.
-\item[\errcode{EFAULT} \textit{Bad address}.] Una stringa passata come
-  argomento è fuori dello spazio di indirizzi del processo, in genere questa
-  situazione provoca direttamente l'emissione di un segnale di \textit{segment
-    violation} (\signal{SIGSEGV}).
-\item[\errcode{EINVAL} \textit{Invalid argument}.] Errore utilizzato per
-  segnalare vari tipi di problemi dovuti all'aver passato un argomento
-  sbagliato ad una funzione di libreria.
-\item[\errcode{EDOM} \textit{Domain error}.] È usato dalle funzioni matematiche
-  quando il valore di un argomento è al di fuori dell'intervallo in cui esse
-  sono definite.
-\item[\errcode{ERANGE} \textit{Range error}.] È usato dalle funzioni
-  matematiche quando il risultato dell'operazione non è rappresentabile nel
-  valore di ritorno a causa di un overflow o di un underflow.
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\errcode{EAGAIN} \textit{Resource temporarily unavailable}.] La funzione è
   fallita ma potrebbe funzionare se la chiamata fosse ripetuta. Questo errore
   accade in due tipologie di situazioni:
@@ -306,11 +280,22 @@ specificati nelle sezioni precedenti.
     carenza è spesso indice di qualcosa che non va nel sistema, è pertanto
     opportuno segnalare esplicitamente questo tipo di errori.
   \end{itemize}
-\item[\errcode{EWOULDBLOCK} \textit{Operation would block}.] Indica che
-  l'operazione richiesta si bloccherebbe, ad esempio se si apre un file in
-  modalità non bloccante, una \func{read} restituirebbe questo errore per
-  indicare che non ci sono dati; in Linux è identico a \errcode{EAGAIN}, ma in
-  altri sistemi può essere specificato un valore diverso.
+\item[\errcode{EALREADY} \textit{Operation already in progress}.] L'operazione è
+  già in corso. Si è tentata un'operazione già in corso su un oggetto posto in
+  modalità non-bloccante.
+\item[\errcode{EDEADLK} \textit{Deadlock avoided}.] L'allocazione di una
+  risorsa avrebbe causato un \textit{deadlock}. Non sempre il sistema è in
+  grado di riconoscere queste situazioni, nel qual caso si avrebbe il blocco.
+\item[\errcode{EFAULT} \textit{Bad address}.] Una stringa passata come
+  argomento è fuori dello spazio di indirizzi del processo, in genere questa
+  situazione provoca direttamente l'emissione di un segnale di \textit{segment
+    violation} (\signal{SIGSEGV}).
+\item[\errcode{EDOM} \textit{Domain error}.] È usato dalle funzioni matematiche
+  quando il valore di un argomento è al di fuori dell'intervallo in cui esse
+  sono definite.
+\item[\errcode{EILSEQ} \textit{Illegal byte sequence}.] Nella decodifica di un
+  carattere esteso si è avuta una sequenza errata o incompleta o si è
+  specificato un valore non valido.
 \item[\errcode{EINPROGRESS} \textit{Operation now in progress}.] Operazione in
   corso. Un'operazione che non può essere completata immediatamente è stata
   avviata su un oggetto posto in modalità non-bloccante. Questo errore viene
@@ -319,9 +304,17 @@ specificati nelle sezioni precedenti.
   l'errore indica che l'operazione è stata avviata correttamente e occorrerà
   del tempo perché si possa completare. La ripetizione della chiamata darebbe
   luogo ad un errore \errcode{EALREADY}.
-\item[\errcode{EALREADY} \textit{Operation already in progress}.] L'operazione è
-  già in corso. Si è tentata un'operazione già in corso su un oggetto posto in
-  modalità non-bloccante.
+\item[\errcode{EINTR} \textit{Interrupted function call}.] Una funzione di
+  libreria è stata interrotta. In genere questo avviene causa di un segnale
+  asincrono al processo che impedisce la conclusione della chiamata, la
+  funzione ritorna con questo errore una volta che si sia correttamente
+  eseguito il gestore del segnale. In questo caso è necessario ripetere la
+  chiamata alla funzione.
+\item[\errcode{EINVAL} \textit{Invalid argument}.] Errore utilizzato per
+  segnalare vari tipi di problemi dovuti all'aver passato un argomento
+  sbagliato ad una funzione di libreria.
+\item[\errcode{ENOMEM} \textit{No memory available}.] Il kernel non è in grado
+  di allocare ulteriore memoria per completare l'operazione richiesta.
 \item[\errcode{ENOSYS} \textit{Function not implemented}.] Indica che la
   funzione non è supportata o nelle librerie del C o nel kernel. Può dipendere
   sia dalla mancanza di una implementazione, che dal fatto che non si è
@@ -332,13 +325,18 @@ specificati nelle sezioni precedenti.
   supportata. Questo significa che la funzione non implementa quel particolare
   comando o opzione o che, in caso di oggetti specifici (file descriptor o
   altro) non è in grado di supportare i parametri richiesti.
-\item[\errcode{EILSEQ} \textit{Illegal byte sequence}.] Nella decodifica di un
-  carattere esteso si è avuta una sequenza errata o incompleta o si è
-  specificato un valore non valido.
+\item[\errcode{ERANGE} \textit{Range error}.] È usato dalle funzioni
+  matematiche quando il risultato dell'operazione non è rappresentabile nel
+  valore di ritorno a causa di un overflow o di un underflow.
+\item[\errcode{EWOULDBLOCK} \textit{Operation would block}.] Indica che
+  l'operazione richiesta si bloccherebbe, ad esempio se si apre un file in
+  modalità non bloccante, una \func{read} restituirebbe questo errore per
+  indicare che non ci sono dati; in Linux è identico a \errcode{EAGAIN}, ma in
+  altri sistemi può essere specificato un valore diverso.
 \end{basedescript}
 
 
-\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 % definiti nel manuale delle glibc ma inesistenti in linux/errno.h
 %\item[\errcode{EBADRPC} \textit{}.] 
 %\item[\errcode{ERPCMISMATCH} \textit{}.] 
@@ -361,12 +359,17 @@ errore che arriva ad una funzione di lettura che opera su uno stream. Non
 essendo gli stream definiti su Linux il kernel non genera mai questo tipo di
 messaggio. 
 
+\item[\errcode{EIDRM} \textit{Identifier removed}.] Indica che l'oggetto del
+  \textit{SysV IPC} a cui si fa riferimento è stato cancellato.
+
 \item[\errcode{EMULTIHOP} \textit{Multihop attempted}.] Definito da POSIX come
   errore dovuto all'accesso a file remoti attraverso più macchine, quando ciò
   non è consentito. Non viene mai generato su Linux.
 
-\item[\errcode{EIDRM} \textit{Identifier removed}.] Indica che l'oggetto del
-  \textit{SysV IPC} a cui si fa riferimento è stato cancellato.
+\item[\errcode{ENOATTR} \textit{No such attribute}.] È un codice di errore
+  specifico di Linux utilizzato dalle funzioni per la gestione degli attributi
+  estesi dei file (vedi sez.~\ref{sec:file_xattr}) quando il nome
+  dell'attributo richiesto non viene trovato.
 
 \item[\errcode{ENODATA} \textit{No data available}.] Viene indicato da POSIX
   come restituito da una \func{read} eseguita su un file descriptor in
@@ -374,11 +377,6 @@ messaggio.
   Linux viene utilizzato \errcode{EAGAIN}. Lo stesso valore però viene usato
   come sinonimo di \errcode{ENOATTR}.
 
-\item[\errcode{ENOATTR} \textit{No such attribute}.] È un codice di errore
-  specifico di Linux utilizzato dalle funzioni per la gestione degli attributi
-  estesi dei file (vedi sez.~\ref{sec:file_xattr}) quando il nome
-  dell'attributo richiesto non viene trovato.
-
 \item[\errcode{ENOLINK} \textit{Link has been severed}.] È un errore il cui
   valore è indicato come \textsl{riservato} nelle \textit{Single Unix
     Specification}. Dovrebbe indicare l'impossibilità di accedere ad un file a
index 7973c78c70fb656f2cea3340ae53858b7d96d135..45aef2a94e1e95f2c3c589af5b0a173fa46a70f4 100644 (file)
@@ -1451,9 +1451,9 @@ fanno comunque riferimento allo stesso \textit{inode} e quindi tutti
 otterranno lo stesso file.
 
 Quando si vuole aggiungere ad una directory una voce che faccia riferimento ad
-un file già esistente nella modalità appena descritta, per ottenere quello che
-viene denominato ``\textsl{collegamento diretto}'' (o \textit{hard link}), si
-deve usare la funzione di sistema \funcd{link}, il cui prototipo è:
+un file già esistente come appena descritto, per ottenere quello che viene
+denominato ``\textsl{collegamento diretto}'' (o \textit{hard link}), si deve
+usare la funzione di sistema \funcd{link}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{unistd.h}
@@ -1469,19 +1469,22 @@ deve usare la funzione di sistema \funcd{link}, il cui prototipo è:
     (il numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi
     sez.~\ref{sec:sys_limits}).
   \item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e
-    \param{newpath} non supporta i collegamenti diretti, è una directory o non
-    si rispettano i criteri per i \textit{protected hardlink}.\footnotemark
+    \param{newpath} non supporta i collegamenti diretti, è una directory o per
+    \param{oldpath} non si rispettano i criteri per i \textit{protected
+      hardlink}.\footnotemark 
   \item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non fanno
     riferimento ad un filesystem montato sullo stesso 
     \textit{mount point}.
-  \end{errlist} ed inoltre \errval{EACCES}, \errval{EFAULT}, \errval{EIO},
-  \errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM},
-  \errval{ENOSPC}, \errval{ENOTDIR}, \errval{EROFS} nel loro significato
-  generico.}
+  \end{errlist} ed inoltre \errval{EACCES}, \errval{EDQUOT}, \errval{EFAULT},
+  \errval{EIO}, \errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{ENOMEM}, \errval{ENOSPC}, \errval{ENOTDIR}, \errval{EROFS} nel loro
+  significato generico.}
 \end{funcproto}
 
 \footnotetext{i \textit{protected hardlink} sono una funzionalità di
-  protezione introdotta con il kernel 3.16 (vedi sez..}
+  protezione introdotta con il kernel 3.16 (si veda
+  sez.~\ref{sec:procadv_security_misc} per i dettagli) che limita la capacità
+  di creare un \textit{hard link} ad un file qualunque.}
 
 La funzione crea in \param{newpath} un collegamento diretto al file indicato
 da \param{oldpath}. Per quanto detto la creazione di un nuovo collegamento
@@ -1503,19 +1506,17 @@ riferimento ad essi all'interno dello stesso \textit{mount point}.\footnote{si
   tenga presente infatti, come detto in sez.~\ref{sec:filesystem_mounting},
   che a partire dal kernel 2.4 uno stesso filesystem può essere montato più
   volte su directory diverse.}
-
 La funzione inoltre opera sia sui file ordinari che sugli altri oggetti del
 filesystem, con l'eccezione delle directory. In alcune versioni di Unix solo
 l'amministratore è in grado di creare un collegamento diretto ad un'altra
 directory: questo viene fatto perché con una tale operazione è possibile
 creare dei \textit{loop} nel filesystem (vedi fig.~\ref{fig:file_link_loop})
-che molti programmi non sono in grado di gestire e la cui rimozione
-diventerebbe piuttosto complicata.\footnote{in genere per questo tipo di
-  errori occorre eseguire il programma \cmd{fsck} per riparare il filesystem,
-  in quanto in caso di \textit{loop} la directory creata non sarebbe vuota e
-  non si potrebbe più rimuoverla.}
+la cui rimozione diventerebbe piuttosto complicata.\footnote{occorrerebbe
+  infatti eseguire il programma \cmd{fsck} per riparare il filesystem, perché
+  in caso di \textit{loop} la directory non potrebbe essere più svuotata,
+  contenendo comunque se stessa, e quindi non potrebbe essere rimossa.}
 
-Data la pericolosità di questa operazione, e vista che i collegamenti
+Data la pericolosità di questa operazione, e visto che i collegamenti
 simbolici (che tratteremo a breve) ed i \textit{bind mount} (già visti in
 sez.~\ref{sec:filesystem_mounting}) possono fornire la stessa funzionalità
 senza questi problemi, nel caso di Linux questa capacità è stata completamente
@@ -1597,6 +1598,8 @@ sistema che permette di creare un nuovo collegamento simbolico è
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
+  \item[\errcode{EACCES}]  o non si hanno i permessi sulla directory in cui
+    creare il \textit{link}.
   \item[\errcode{EEXIST}] esiste già un file \param{newpath}.
   \item[\errcode{ENOENT}] una componente di \param{newpath} non esiste o
     \param{oldpath} è una stringa vuota.
@@ -1604,11 +1607,12 @@ sistema che permette di creare un nuovo collegamento simbolico è
     supporta i collegamenti simbolici.
   \item[\errcode{EROFS}] \param{newpath} è su un filesystem montato in sola
     lettura.
-  \end{errlist} ed inoltre \errval{EACCES}, \errval{EFAULT}, \errval{EIO},
+  \end{errlist} ed inoltre \errval{EDQUOT}, \errval{EFAULT}, \errval{EIO},
   \errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOMEM}, \errval{ENOSPC} e
   \errval{ENOTDIR} nel loro significato generico.}
 \end{funcproto}
 
+
 La funzione crea un nuovo collegamento simbolico \param{newpath} che fa
 riferimento ad \param{oldpath}.  Si tenga presente che la funzione non
 effettua nessun controllo sull'esistenza di un file di nome \param{oldpath},
index 7c88a71d883bd1038953039c64d47cdf17c3d9f6..2859e8b0f6529864d8c424edae9e385e6e23874a 100644 (file)
@@ -14,7 +14,7 @@ I/O ecc.
 \section{Funzioni di gestione e controllo}
 \label{sec:proc_manage_control}
 
-In questa sezione prenderemo in esame alcune specifice \textit{system call}
+In questa sezione prenderemo in esame alcune specifiche \textit{system call}
 dedicate al controllo processi sia per quanto riguarda l'impostazione di
 caratteristiche specialistiche, che per quanto riguarda l'analisi ed il
 controllo della loro esecuzione.
@@ -25,7 +25,7 @@ controllo della loro esecuzione.
 Benché la gestione ordinaria dei processi possa essere effettuata attraverso
 le funzioni che abbiamo già esaminato nei capitoli \ref{cha:process_interface}
 e \ref{cha:process_handling}, esistono una serie di proprietà e
-caratteristiche specifiche dei proecessi per la cui gestione è stata
+caratteristiche specifiche dei processi per la cui gestione è stata
 predisposta una apposita \textit{system call} che fornisce una interfaccia
 generica per tutte le operazioni specialistiche. La funzione di sistema è
 \funcd{prctl} ed il suo prototipo è:\footnote{la funzione non è standardizzata
@@ -225,11 +225,11 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 
 \item[\constd{PR\_SET\_SECCOMP}] Attiva il \textit{secure computing mode} per
   il processo corrente. Introdotta a partire dal kernel 2.6.23 la funzionalità
-  è stata ulteriorimente estesa con il kernel 3.5, salvo poi diventare un
+  è stata ulteriormente estesa con il kernel 3.5, salvo poi diventare un
   sottoinsieme della \textit{system call} \func{seccomp} a partire dal kernel
   3.17. Prevede che si indichi per \param{arg2} il valore
   \const{SECCOMP\_MODE\_STRICT} (unico possibile fino al kernel 2.6.23) per
-  selezionare il cosidetto \textit{strict mode} o, dal kernel 3.5,
+  selezionare il cosiddetto \textit{strict mode} o, dal kernel 3.5,
   \const{SECCOMP\_MODE\_FILTER} per usare il \textit{filter mode}. Tratteremo
   questa opzione nei dettagli più avanti, in sez.~\ref{sec:procadv_seccomp},
   quando affronteremo l'argomento del \textit{Secure Computing}.
@@ -414,7 +414,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 In questa sezione tratteremo le funzionalità avanzate relative alla creazione
 dei processi e del loro ambiente, sia per quanto riguarda l'utilizzo delle
 stesse per la creazione dei \textit{thread} che per la gestione dei
-\textit{namespace} che sono alla base dei cosidetti \textit{container}.
+\textit{namespace} che sono alla base dei cosiddetti \textit{container}.
 
 
 \subsection{La \textit{system call} \func{clone}}
@@ -705,7 +705,7 @@ gestione della sicurezza ed il controllo degli accessi all'interno dei
 processi, a partire dalle \textit{capabilities} e dalle funzionalità di
 \textit{Secure Computing}. Esamineremo inoltre tutte le altre funzionalità
 relative alla sicurezza come gestione delle chiavi crittografiche e varie
-estensioni e funzionalita disponibili su questo argomento.
+estensioni e funzionalità disponibili su questo argomento.
 
 
 
@@ -1319,7 +1319,7 @@ sez.~\ref{sec:sock_ioctl_netdevice}) ed impostare la tabella di instradamento.
 Una terza \textit{capability} con vasto campo di applicazione è
 \const{CAP\_SYS\_ADMIN}, che copre una serie di operazioni amministrative,
 come impostare le quote disco (vedi sez.\ref{sec:disk_quota}), attivare e
-disattivare la swap, montare, rimontare e smontare filesystem (vedi
+disattivare la \textit{swap}, montare, rimontare e smontare filesystem (vedi
 sez.~\ref{sec:filesystem_mounting}), effettuare operazioni di controllo su
 qualunque oggetto dell'IPC di SysV (vedi sez.~\ref{sec:ipc_sysv}), operare
 sugli attributi estesi dei file di classe \texttt{security} o \texttt{trusted}
@@ -2019,7 +2019,7 @@ comprometterne la sicurezza eseguendo codice non sotto il proprio controllo.
 
 Nella prima versione del meccanismo, introdotto con il kernel 2.6.23 e
 disponibile solo avendo è abilitato il supporto nel kernel con
-\texttt{CONFIG\_SECCOMP}, questo veniva attovato con \func{prctl} indicando
+\texttt{CONFIG\_SECCOMP}, questo veniva attivato con \func{prctl} indicando
 l'opzione \const{PR\_SET\_SECCOMP}, che all'epoca supportava soltanto l'uso
 del valore \const{SECCOMP\_MODE\_STRICT} per \param{arg2}.
 
@@ -2053,7 +2053,7 @@ operazioni se non quelle citate.
 \subsection{Altre funzionalità di sicurezza.}
 \label{sec:procadv_security_misc}
 
-Oltre alle funzionalità specifiche esaminite nelle sezioni precedenti, il
+Oltre alle funzionalità specifiche esaminate nelle sezioni precedenti, il
 kernel supporta una varietà di ulteriori impostazioni di sicurezza,
 accessibili nelle maniere più varie, che abbiamo raccolto in questa sezione.
 
@@ -2061,23 +2061,25 @@ Una serie di modalità di sicurezza sono attivabili a richiesta attraverso
 alcune opzioni di controllo attivabili via \func{sysctl} o il filesystem
 \texttt{/proc}, un elenco delle stesse e dei loro effetti è il seguente:
 
-\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlrelfiled{fs}{protected\_hardlinks}] Un valore nullo, il default,
   mantiene il comportamento standard che non pone restrizioni alla creazione
   di \textit{hard link}. Se il valore viene posto ad 1 vengono invece attivate
-  una serie di restrizioni, che se non soddisfatte causano il fallimento di
-  \func{link} con un errore di \errval{EPERM}. Perché questo non avvenga
-  almeno una delle seguenti condizioni deve essere soddisfatta:
+  una serie di restrizioni protettive, denominate
+  \itindex{protected~hardlinks} \textit{protected hardlinks}, che se non
+  soddisfatte causano il fallimento di \func{link} con un errore di
+  \errval{EPERM}. Perché questo non avvenga almeno una delle seguenti
+  condizioni deve essere soddisfatta:
   \begin{itemize*}
-  \item il processo chiamante deve avere i privilegi amministrativi (la
-    \textit{capability}) \const{CAP\_FOWNER}); in caso di utilizzo
+  \item il chiamante deve avere privilegi amministrativi (la
+    \textit{capability} \const{CAP\_FOWNER}). In caso di utilizzo
     dell'\textit{user namespace} oltre a possedere \const{CAP\_FOWNER} è
     necessario che l'\ids{UID} del proprietario del file sia mappato nel
     \textit{namespace}.
   \item il \textit{filesystem} \ids{UID} del chiamante (normalmente
     equivalente all'\ids{UID} effettivo) deve corrispondere a quello del
     proprietario del file a cui si vuole effettuare il collegamento.
-  \item sono soddistatte tutte le seguenti condizioni:
+  \item devono essere soddisfatte tutte le seguenti condizioni:
     \begin{itemize*}
     \item il file è un file ordinario
     \item il file non ha il \acr{suid} bit attivo
@@ -2086,6 +2088,70 @@ alcune opzioni di controllo attivabili via \func{sysctl} o il filesystem
     \item il chiamante ha i permessi di lettura e scrittura sul file
     \end{itemize*}
   \end{itemize*}
+
+  In sostanza in questo caso un utente potrà creare un collegamento diretto ad
+  un altro file solo se ne è il proprietario o se questo è un file ordinario
+  senza permessi speciali ed a cui ha accesso in lettura e scrittura.
+
+  Questa funzionalità fornisce una protezione generica che non inficia l'uso
+  ordinario di \func{link}, ma rende impraticabili una serie di possibili
+  abusi della stessa; oltre ad impedire l'uso di un \textit{hard link} come
+  variante in un attacco di \textit{symlink race} (eludendo i
+  \textit{protected symlinks} di cui al punto successivo), evita anche che si
+  possa lasciare un riferimento ad un eventuale programma \acr{suid}
+  vulnerabile, creando un collegamento diretto allo stesso.
+
+
+\item[\sysctlrelfiled{fs}{protected\_symlinks}] Un valore nullo, il default,
+  mantiene il comportamento standard che non pone restrizioni nel seguire i
+  link simbolici. Se il valore viene posto ad 1 vengono attivate delle
+  restrizioni protettive, denominate \itindex{protected~symlinks}
+  \textit{protected symlinks}. Quando vengono attivate una qualunque funzione
+  che esegua la risoluzione di un \textit{pathname} contenente un link
+  simbolico non conforme alle restrizioni fallirà con un errore di
+  \errval{EACCESS}. Per evitare l'errore deve essere soddisfatta una delle
+  seguenti condizioni:
+  \begin{itemize*}
+  \item il link non è in una directory con permessi analoghi a \file{/tmp}
+    (scrivibile a tutti e con lo \textit{sticky bit} attivo);
+  \item il link è in una directory con permessi analoghi a \file{/tmp} ma è
+    soddisfatta una delle condizioni seguenti: 
+    \begin{itemize*}
+    \item il link simbolico appartiene al chiamante: il controllo viene fatto
+      usando il \textit{filesystem} \ids{UID} (che normalmente corrisponde
+      all'\ids{UID} effettivo).
+    \item il link simbolico ha lo stesso proprietario della directory.
+    \end{itemize*}
+  \end{itemize*}
+
+  Questa funzionalità consente di rendere impraticabili alcuni attacchi in cui
+  si approfitta di una differenza di tempo fra il controllo e l'uso di un
+  file, utilizzando quella che viene usualmente chiamata una
+  \itindex{symlink~race} \textit{symlink race}.\footnote{si tratta di un
+    sottoinsieme di quella classe di attacchi chiamata genericamente
+    \textit{TOCTTOU}, acronimo appunto di \textit{Time of check to time of
+      use}.} 
+
+  Un possibile esempio di questo tipo di attacco è quello contro un programma
+  che viene eseguito per conto di un utente privilegiato (ad esempio un
+  programma con il \acr{suid} o lo \acr{sgid} bit attivi) che prima controlla
+  l'esistenza di un file e se non esiste lo crea. Se questa procedura, che è
+  tipica della creazione di file temporanei sotto \file{/tmp}, non viene
+  eseguita in maniera corretta,\footnote{ad esempio con le modalità che
+    abbiamo trattato in sez.~\ref{sec:file_temp_file}, che per quanto note da
+    tempo continuano ad essere ignorate.} un attaccante ha una finestra di
+  tempo in cui può creare prima del programma un \textit{link simbolico} ad un
+  file di sua scelta, compresi file di dispositivo o file a cui non avrebbe
+  accesso, facendolo poi utilizzare al programma.
+
+  Attivando la funzionalità si rende impossibile seguire un link simbolico in
+  una directory temporanea come \texttt{/tmp}, a meno che questo non sia di
+  proprietà del chiamante, o che questo non appartenga al proprietario della
+  directory. Questo impedisce che i link simbolici creati da un attaccante
+  possano essere seguiti da un programma privilegiato (perché apparterranno
+  all'attaccante) mentre quelli creati dall'amministratore (che i genere è il
+  proprietario di \texttt{/tmp}) saranno seguiti comunque.
+
 \end{basedescript}
 
 
@@ -2165,3 +2231,40 @@ Da fare
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End:
+
+%  LocalWords:  system call namespace prctl IRIX kernel sys int option long
+%  LocalWords:  unsigned arg errno EACCESS EBADF EBUSY EFAULT EINVAL ENXIO PR
+%  LocalWords:  EOPNOTSUPP EPERM CAPBSET READ capability sez tab capabilities
+%  LocalWords:  bounding CAP SETPCAP DUMPABLE dump suid sgid UID DISABLE GET
+%  LocalWords:  ENDIAN endianness BIG big endian LITTLE little PPC PowerPC ia
+%  LocalWords:  FPEMU NOPRINT SIGFPE FPEXC point exception FP EXC SW ENABLE
+%  LocalWords:  OVF overflow UND underflow RES INV DISABLED NONRECOV ASYNC AO
+%  LocalWords:  KEEPCAPS pag exec SECURE KEEP CAPS securebits LOCKED NAME NUL
+%  LocalWords:  char PDEATHSIG SIGCHLD fork PTRACER PID tracer process ptrace
+%  LocalWords:  Security Modules ANY Yama SECCOMP secure computing seccomp vm
+%  LocalWords:  STRICT strict FILTER filter SIGKILL TIMING STATISTICAL TSC fn
+%  LocalWords:  TIMESTAMP timestamp Stamp Counter SIGSEGV UNALIGN SIGBUS MCE
+%  LocalWords:  KILL siginfo MCEERR memory failure early kill CLEAR child cap
+%  LocalWords:  reaper SUBREAPER init value result thread like flags stack FS
+%  LocalWords:  race condition malloc NULL copy write glibc vsyscall sched RT
+%  LocalWords:  void pid ptid struct desc tls ctid EAGAIN ENOMEM exit Posix
+%  LocalWords:  Library PARENT SETTID SETTLS TID CLEARTID futex FILES table
+%  LocalWords:  descriptor umask dell'I scheduler SIGHAND STOPPED SYSVSEM IPC
+%  LocalWords:  UNTRACED VFORK vfork mount filesystem LSM Mandatory Access fs
+%  LocalWords:  Control DAC MAC SELinux Smack Tomoyo AppArmor Discrectionary
+%  LocalWords:  permitted inheritable effective fig security ADMIN forced new
+%  LocalWords:  allowed dall' bound MODULE nell' all' capset sendmail SETGID
+%  LocalWords:  setuid orig IMMUTABLE MKNOD OVERRIDE SEARCH CHOWN FSETID LOCK
+%  LocalWords:  FOWNER saved FIXUP NOROOT AUDIT BLOCK SUSPEND SETFCAP group
+%  LocalWords:  socket domain locking mlock mlockall shmctl mmap OWNER LEASE
+%  LocalWords:  lease immutable append only mknod BIND SERVICE BROADCAST RAW
+%  LocalWords:  broadcast multicast PACKET CHROOT chroot NICE PACCT RAWIO TTY
+%  LocalWords:  accounting ioperm iopl RESOURCE CONFIG hangup vhangup SYSLOG
+%  LocalWords:  WAKE ALARM CLOCK BOOTTIME REALTIME sticky NOATIME fcntl swap
+%  LocalWords:  multicasting dell'IPC SysV trusted IOPRIO CLASS IDLE lookup
+%  LocalWords:  scheduling dcookie NEWNS unshare nice NUMA ioctl journaling
+%  LocalWords:  ext capget header hdrp datap const ESRCH SOURCE undef version
+%  LocalWords:  libcap lcap obj to text dup clear DIFFERS get ncap caps ssize
+%  LocalWords:  argument length all setpcap from string name proc cat capgetp
+%  LocalWords:  capsetp getcap read sigreturn sysctl protected hardlinks tmp
+%  LocalWords:  dell' symlink symlinks pathname TOCTTOU of
index 2461a41cb6121b3433d2419990fea5949b2cfcf2..b9b7321b706fb7d8a7c045296ef8a32af7b63a7a 100644 (file)
@@ -32,11 +32,10 @@ GaPiL. In ordine rigorosamente alfabetico desidero citare:
 
 Infine, vorrei ringraziare il Firenze Linux User Group (FLUG), di cui mi
 pregio di fare parte, che ha messo a disposizione il repository CVS su cui era
-presente la prima versione della Guida, ed il relativo spazio web, e Truelite
-Srl, l'azienda che ho fondato e di cui sono responsabile tecnico, che fornisce
-il nuovo repository SVN, tutto quanto è necessario alla pubblicazione della
-guida ed il sistema di tracciamento dei sorgenti su
-\url{http://gapil.truelite.it/sources}.
+presente la prima versione della Guida, ed il relativo spazio web, e
+\href{https://www.truelite.it}{Truelite Srl}, l'azienda che ho fondato e di
+cui sono amministratore, che fornisce le risorse per il nuovo repository Git
+ed per il sito del progetto: \url{https://gapil.gnulinux.it}.
 
 
 % LocalWords:  GaPiL Masini calling convention Maischberger HTML Group FLUG CVS