X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=e6fc42e3c6b0f546b024ce5cd347bd2649dff08e;hp=dea3f7fcfbcf5b9816129c2f9a206131fb0280df;hb=7b43a7843d483c826a6ed13224208c615a23c4d6;hpb=9b7af600ff0f73bc946c9d160c320667c7a91347 diff --git a/filedir.tex b/filedir.tex index dea3f7f..e6fc42e 100644 --- a/filedir.tex +++ b/filedir.tex @@ -137,13 +137,13 @@ scopo è risolvere il nome mancante e fornire la sua \textit{dentry} che a questo punto verrà inserita nella cache. Dato che tutte le volte che si monta un filesystem la funzione \texttt{mount} -della corrispondente \kstruct{file\_system\_type} inserisce la \textit{dentry} -iniziale nel \itindex{mount~point} \textit{mount point} dello stesso, si avrà -comunque un punto di partenza. Inoltre essendo questa \textit{dentry} relativa -a quel tipo di filesystem essa farà riferimento ad un \textit{inode} di quel -filesystem, e come vedremo questo farà sì che venga eseguita una -\texttt{lookup} adatta per effettuare la risoluzione dei nomi per quel -filesystem. +(vedi sez.~\ref{sec:filesystem_mounting}) della corrispondente +\kstruct{file\_system\_type} inserisce la \textit{dentry} iniziale nel +\textit{mount point} dello stesso, si avrà comunque un punto di +partenza. Inoltre essendo questa \textit{dentry} relativa a quel tipo di +filesystem essa farà riferimento ad un \textit{inode} di quel filesystem, e +come vedremo questo farà sì che venga eseguita una \texttt{lookup} adatta per +effettuare la risoluzione dei nomi per quel filesystem. \itindend{pathname} \itindend{pathname~resolution} @@ -653,12 +653,11 @@ memorizzati. L'operazione di attivazione del filesystem è chiamata \item[\errcode{EINVAL}] il dispositivo \param{source} presenta un \itindex{superblock} \textit{superblock} non valido, o si è cercato di rimontare un filesystem non ancora montato, o di montarlo senza - che \param{target} sia un \itindex{mount~point} \textit{mount point} o di - spostarlo quando \param{target} non è un \itindex{mount~point} - \textit{mount point} o è la radice. - \item[\errcode{ELOOP}] si è cercato di spostare un \itindex{mount~point} - \textit{mount point} su una sottodirectory di \param{source} o si sono - incontrati troppi collegamenti simbolici nella risoluzione di un nome. + che \param{target} sia un \textit{mount point} o di spostarlo + quando \param{target} non è un \textit{mount point} o è la radice. + \item[\errcode{ELOOP}] si è cercato di spostare un \textit{mount point} su + una sottodirectory di \param{source} o si sono incontrati troppi + collegamenti simbolici nella risoluzione di un nome. \item[\errcode{EMFILE}] in caso di filesystem virtuale, la tabella dei dispositivi fittizi (chiamati \textit{dummy} nella documentazione inglese) è piena. @@ -674,12 +673,14 @@ memorizzati. L'operazione di attivazione del filesystem è chiamata \errval{ENOENT}, \errval{ENOTDIR} nel loro significato generico.} \end{funcproto} +\itindbeg{mount~point} + La funzione monta sulla directory indicata da \param{target}, detta -\itindex{mount~point} \textit{mount point}, il filesystem contenuto nel file -di dispositivo indicato da \param{source}. In entrambi i casi, come daremo per -assunto da qui in avanti tutte le volte che si parla di directory o file nel -passaggio di un argomento di una funzione, si intende che questi devono essere -indicati con la stringa contenente il loro \textit{pathname}. +\textit{mount point}, il filesystem contenuto nel file di dispositivo indicato +da \param{source}. In entrambi i casi, come daremo per assunto da qui in +avanti tutte le volte che si parla di directory o file nel passaggio di un +argomento di una funzione, si intende che questi devono essere indicati con la +stringa contenente il loro \textit{pathname}. Normalmente un filesystem è contenuto su un disco o una partizione, ma come illustrato in sez.~\ref{sec:file_vfs_work} la struttura del \textit{Virtual @@ -710,20 +711,20 @@ filesystem e ciascuno ha i suoi, pertanto si rimanda alla documentazione della pagina di manuale di questo comando e dei singoli filesystem. Dopo l'esecuzione della funzione il contenuto del filesystem viene resto -disponibile nella directory specificata come \itindex{mount~point} -\textit{mount point}, il precedente contenuto di detta directory viene -mascherato dal contenuto della directory radice del filesystem montato. Fino -ai kernel della serie 2.2.x non era possibile montare un filesystem se un -\textit{mount point} era già in uso. +disponibile nella directory specificata come \textit{mount point}, il +precedente contenuto di detta directory viene mascherato dal contenuto della +directory radice del filesystem montato. Fino ai kernel della serie 2.2.x non +era possibile montare un filesystem se un \textit{mount point} era già in uso. A partire dal kernel 2.4.x inoltre è divenuto possibile sia spostare -atomicamente un \itindex{mount~point} \textit{mount point} da una directory ad -un'altra, sia montare lo stesso filesystem in diversi \itindex{mount~point} -\textit{mount point}, sia montare più filesystem sullo stesso -\itindex{mount~point} \textit{mount point} impilandoli l'uno sull'altro, nel +atomicamente un \textit{mount point} da una directory ad un'altra, sia montare +lo stesso filesystem in diversi \textit{mount point}, sia montare più +filesystem sullo stesso \textit{mount point} impilandoli l'uno sull'altro, nel qual caso vale comunque quanto detto in precedenza, e cioè che solo il contenuto dell'ultimo filesystem montato sarà visibile. +\itindend{mount~point} + Oltre alle opzioni specifiche di ciascun filesystem, che si passano nella forma della lista di parole chiave indicata con l'argomento \param{data}, esistono pure alcune opzioni che si possono applicare in generale, anche se @@ -826,10 +827,9 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: comunque attivato esplicitamente per i singoli file impostando i permessi come illustrato in sez.~\ref{sec:file_mand_locking}. -\item[\const{MS\_MOVE}] Effettua uno del spostamento del \itindex{mount~point} - \textit{mount point} di un filesystem. La directory del - \itindex{mount~point} \textit{mount point} originale deve essere indicata - nell'argomento \param{source}, e la sua nuova posizione +\item[\const{MS\_MOVE}] Effettua uno del spostamento del \textit{mount point} + di un filesystem. La directory del \textit{mount point} originale deve + essere indicata nell'argomento \param{source}, e la sua nuova posizione nell'argomento \param{target}. Tutti gli altri argomenti della funzione vengono ignorati. @@ -891,36 +891,36 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: dall'amministratore.} \item[\const{MS\_NOSUID}] Viene disabilitato sul filesystem l'effetto dei bit - dei permessi \itindex{suid~bit} \acr{suid} e \itindex{sgid~bit} \acr{sgid} - (vedi sez.~\ref{sec:file_special_perm}) eventualmente presenti sui file in - esso contenuti. L'opzione viene usata come misura di precauzione per rendere - inefficace l'effetto di questi bit per filesystem in cui non ci dovrebbero - essere file dotati di questi permessi. + dei permessi \acr{suid} e \acr{sgid} (vedi sez.~\ref{sec:file_special_perm}) + eventualmente presenti sui file in esso contenuti. L'opzione viene usata + come misura di precauzione per rendere inefficace l'effetto di questi bit + per filesystem in cui non ci dovrebbero essere file dotati di questi + permessi. Di nuovo viene utilizzata, analogamente a \const{MS\_NOEXEC} e \const{MS\_NODEV}, per fornire un accesso più controllato a quei filesystem di cui gli utenti hanno il controllo dei contenuti. In questo caso si evita che un utente malizioso possa inserire su uno di questi filesystem un - eseguibile con il bit \itindex{suid~bit} \acr{suid} attivo e di proprietà - dell'amministratore o di un altro utente, che gli consentirebbe di eseguirlo - per conto di quest'ultimo. - -\item[\const{MS\_PRIVATE}] Marca un \itindex{mount~point} \textit{mount point} - come privato. Si tratta di una delle nuove opzioni (insieme a - \const{MS\_SHARED}, \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti - parte dell'infrastruttura degli \itindex{shared~subtree} \textit{shared - subtree} introdotta a partire dal kernel 2.6.15, che estendono le - funzionalità dei \itindex{bind~mount} \textit{bind mount}. In questo caso + eseguibile con il bit \acr{suid} attivo e di proprietà dell'amministratore o + di un altro utente, che gli consentirebbe di eseguirlo per conto di + quest'ultimo. + +\item[\const{MS\_PRIVATE}] Marca un \textit{mount point} come privato. Si + tratta di una delle nuove opzioni (insieme a \const{MS\_SHARED}, + \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti parte + dell'infrastruttura degli \itindex{shared~subtree} \textit{shared subtree} + introdotta a partire dal kernel 2.6.15, che estendono le funzionalità dei + \itindex{bind~mount} \textit{bind mount}. In questo caso \param{target} dovrà fare riferimento al \textit{mount point} che si intende marcare, e tutti gli altri argomenti verranno ignorati. Di default, finché non lo si marca altrimenti con una delle altre opzioni dell'interfaccia \itindex{shared~subtree} \textit{shared subtree}, ogni \textit{mount point} è privato. Ogni \textit{bind mount} ottenuto da un - \itindex{mount~point} \textit{mount point} di tipo \textit{private} si - comporta come descritto nella trattazione di \const{MS\_BIND}. Si usa questo - flag principalmente per revocare gli effetti delle altre opzioni e riportare - il comportamento a quello ordinario. + \textit{mount point} di tipo \textit{private} si comporta come descritto + nella trattazione di \const{MS\_BIND}. Si usa questo flag principalmente per + revocare gli effetti delle altre opzioni e riportare il comportamento a + quello ordinario. \item[\const{MS\_RDONLY}] Esegue il montaggio del filesystem in sola lettura, non sarà possibile nessuna modifica ai suoi contenuti. Viene usato tutte le @@ -929,13 +929,13 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: corrotto). All'avvio di default il kernel monta la radice in questa modalità. -\item[\const{MS\_REC}] Applica ricorsivamente a tutti i \itindex{mount~point} - \textit{mount point} presenti al di sotto del \textit{mount point} indicato - gli effetti della opzione degli \itindex{shared~subtree} \textit{shared - subtree} associata. Anche questo caso l'argomento \param{target} deve fare - riferimento ad un \itindex{mount~point} \textit{mount point} e tutti gli - altri argomenti sono ignorati, ed il flag deve essere indicato assieme ad - una fra \const{MS\_PRIVATE}, \const{MS\_SHARED}, \const{MS\_SLAVE} e +\item[\const{MS\_REC}] Applica ricorsivamente a tutti i \textit{mount point} + presenti al di sotto del \textit{mount point} indicato gli effetti della + opzione degli \itindex{shared~subtree} \textit{shared subtree} + associata. Anche questo caso l'argomento \param{target} deve fare + riferimento ad un \textit{mount point} e tutti gli altri argomenti sono + ignorati, ed il flag deve essere indicato assieme ad una fra + \const{MS\_PRIVATE}, \const{MS\_SHARED}, \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}. % TODO trattare l'opzione \texttt{lazytime} introdotta con il kernel 4.0, @@ -977,15 +977,14 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: \const{MS\_NOATIME} e \const{MS\_NODIRATIME}, ed infine prima del kernel 2.4.10 anche \const{MS\_NODEV}, \const{MS\_NOEXEC} e \const{MS\_NOSUID}. -\item[\const{MS\_SHARED}] Marca un \itindex{mount~point} \textit{mount point} - come \textit{shared mount}. Si tratta di una delle nuove opzioni (insieme a +\item[\const{MS\_SHARED}] Marca un \textit{mount point} come \textit{shared + mount}. Si tratta di una delle nuove opzioni (insieme a \const{MS\_PRIVATE}, \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti parte dell'infrastruttura degli \itindex{shared~subtree} \textit{shared subtree} introdotta a partire dal kernel 2.6.15, che estendono le funzionalità dei \itindex{bind~mount} \textit{bind mount}. In questo caso - \param{target} dovrà fare riferimento al \itindex{mount~point} \textit{mount - point} che si intende marcare, e tutti gli altri argomenti verranno - ignorati. + \param{target} dovrà fare riferimento al \textit{mount point} che si intende + marcare, e tutti gli altri argomenti verranno ignorati. Lo scopo dell'opzione è ottenere che tutti i successivi \itindex{bind~mount} \textit{bind mount} effettuati da un \textit{mount point} marcato da essa @@ -994,9 +993,8 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: avviene su una directory al di sotto di uno qualunque di essi. Le operazioni di montaggio e smontaggio effettuate al di sotto di un qualunque \textit{mount point} così marcato verranno ``\textsl{propagate}'' a tutti i - \itindex{mount~point} \textit{mount point} della stessa condivisione, e la - sezione di albero di file vista al di sotto di ciascuno di essi sarà sempre - identica. + \textit{mount point} della stessa condivisione, e la sezione di albero di + file vista al di sotto di ciascuno di essi sarà sempre identica. \item[\const{MS\_SILENT}] Richiede la soppressione di alcuni messaggi di avvertimento nei log del kernel (vedi sez.~\ref{sec:sess_daemon}). L'opzione @@ -1004,8 +1002,8 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: non fuorviante, la precedente \const{MS\_VERBOSE}, introdotta nel kernel 2.6.12, che aveva lo stesso effetto. -\item[\const{MS\_SLAVE}] Marca un \itindex{mount~point} \textit{mount point} - come \textit{slave mount}. Si tratta di una delle nuove opzioni (insieme a +\item[\const{MS\_SLAVE}] Marca un \textit{mount point} come \textit{slave + mount}. Si tratta di una delle nuove opzioni (insieme a \const{MS\_PRIVATE}, \const{MS\_SHARED} e \const{MS\_UNBINDABLE}) facenti parte dell'infrastruttura degli \itindex{shared~subtree} \textit{shared subtree} introdotta a partire dal kernel 2.6.15, che estendono le @@ -1021,8 +1019,7 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: questo caso vengono ``\textsl{propagate}'' soltanto dal \textit{mount point} originale (detto anche \textit{master}) verso gli \textit{slave}, mentre essi potranno eseguire al loro interno ulteriori montaggi che non saranno - propagati né negli altri né nel \itindex{mount~point} \textit{mount point} - originale. + propagati né negli altri né nel \textit{mount point} originale. \item[\const{MS\_STRICTATIME}] Ripristina il comportamento tradizionale per cui l'\textit{access time} viene aggiornato ad ogni accesso al @@ -1042,23 +1039,22 @@ con un OR aritmetico dei valori dalle costanti riportate nell'elenco seguente: compromesso in cui questo comportamento avviene solo per le directory, ed ha quindi una incidenza nettamente minore, si può usare \const{MS\_DIRSYNC}. -\item[\const{MS\_UNBINDABLE}] Marca un \itindex{mount~point} \textit{mount - point} come \textit{unbindable mount}. Si tratta di una delle nuove - opzioni (insieme a \const{MS\_PRIVATE}, \const{MS\_SHARED} e - \const{MS\_SLAVE}) facenti parte dell'infrastruttura degli - \itindex{shared~subtree} \textit{shared subtree} introdotta a partire dal - kernel 2.6.15, che estendono le funzionalità dei \itindex{bind~mount} - \textit{bind mount}. In questo caso +\item[\const{MS\_UNBINDABLE}] Marca un \textit{mount point} come + \textit{unbindable mount}. Si tratta di una delle nuove opzioni (insieme a + \const{MS\_PRIVATE}, \const{MS\_SHARED} e \const{MS\_SLAVE}) facenti parte + dell'infrastruttura degli \itindex{shared~subtree} \textit{shared subtree} + introdotta a partire dal kernel 2.6.15, che estendono le funzionalità dei + \itindex{bind~mount} \textit{bind mount}. In questo caso \param{target} dovrà fare riferimento al \textit{mount point} che si intende marcare, e tutti gli altri argomenti verranno ignorati. Un \textit{mount point} marcato in questo modo disabilita la capacità di eseguire dei \itindex{bind~mount} \textit{bind mount} del suo contenuto. Si - comporta cioè come allo stesso modo di un \itindex{mount~point} - \textit{mount point} ordinario di tipo \textit{private} con in più la - restrizione che nessuna sua sottodirectory (anche se relativa ad un - ulteriore montaggio) possa essere utilizzata per un come sorgente di un - \itindex{bind~mount} \textit{bind mount}. + comporta cioè come allo stesso modo di un \textit{mount point} ordinario di + tipo \textit{private} con in più la restrizione che nessuna sua + sottodirectory (anche se relativa ad un ulteriore montaggio) possa essere + utilizzata per un come sorgente di un \itindex{bind~mount} \textit{bind + mount}. \end{basedescript} @@ -1105,12 +1101,12 @@ non il file o il dispositivo che è stato montato,\footnote{questo è vero a funzione poteva essere usata anche specificando il file di dispositivo.} in quanto a partire dai kernel della serie 2.4.x è possibile montare lo stesso dispositivo in più punti. Nel caso più di un filesystem sia stato montato -sullo stesso \itindex{mount~point} \textit{mount point} viene smontato quello -che è stato montato per ultimo. Si tenga presente che la funzione fallisce se -il filesystem è ``\textsl{occupato}'', cioè quando ci sono ancora dei file -aperti sul filesystem, se questo contiene la directory di lavoro (vedi -sez.~\ref{sec:file_work_dir}) di un qualunque processo o il -\itindex{mount~point} \textit{mount point} di un altro filesystem. +sullo stesso \textit{mount point} viene smontato quello che è stato montato +per ultimo. Si tenga presente che la funzione fallisce se il filesystem è +``\textsl{occupato}'', cioè quando ci sono ancora dei file aperti sul +filesystem, se questo contiene la directory di lavoro (vedi +sez.~\ref{sec:file_work_dir}) di un qualunque processo o il \textit{mount + point} di un altro filesystem. Linux provvede inoltre una seconda funzione di sistema, \funcd{umount2}, che consente un maggior controllo delle operazioni, come forzare lo smontaggio di @@ -1158,10 +1154,10 @@ eseguita una sincronizzazione dei dati. blocca l'accesso ma si aspetta che il filesystem si liberi (presente dal kernel 2.4.11 e dalla \acr{glibc} 2.11).\\ - \const{MNT\_EXPIRE} & Se non occupato marca un \itindex{mount~point} - \textit{mount point} come ``\textsl{in scadenza}'' in - modo che ad una successiva chiamata senza utilizzo - del filesystem questo venga smontato (presente dal + \const{MNT\_EXPIRE} & Se non occupato marca un \textit{mount point} come + ``\textsl{in scadenza}'' in modo che ad una + successiva chiamata senza utilizzo del filesystem + questo venga smontato (presente dal kernel 2.6.8 e dalla \acr{glibc} 2.11).\\ \const{UMOUNT\_NOFOLLOW}& Non dereferenzia \param{target} se questo è un collegamento simbolico (vedi @@ -1181,14 +1177,14 @@ resta accessibile per quelli che lo hanno ancora in uso e non viene smontato fintanto che resta occupato. Con \const{MNT\_EXPIRE}, che non può essere specificato insieme agli altri -due, si marca il \itindex{mount~point} \textit{mount point} di un filesystem -non occupato come ``\textsl{in scadenza}'', in tal caso \func{umount2} ritorna -con un errore di \errcode{EAGAIN}, mentre in caso di filesystem occupato si -sarebbe ricevuto \errcode{EBUSY}. Una volta marcato, se nel frattempo non -viene fatto nessun uso del filesystem, ad una successiva chiamata con -\const{MNT\_EXPIRE} questo verrà smontato. Questo flag consente di realizzare -un meccanismo che smonti automaticamente i filesystem che restano inutilizzati -per un certo periodo di tempo. +due, si marca il \textit{mount point} di un filesystem non occupato come +``\textsl{in scadenza}'', in tal caso \func{umount2} ritorna con un errore di +\errcode{EAGAIN}, mentre in caso di filesystem occupato si sarebbe ricevuto +\errcode{EBUSY}. Una volta marcato, se nel frattempo non viene fatto nessun +uso del filesystem, ad una successiva chiamata con \const{MNT\_EXPIRE} questo +verrà smontato. Questo flag consente di realizzare un meccanismo che smonti +automaticamente i filesystem che restano inutilizzati per un certo periodo di +tempo. Infine il flag \const{UMOUNT\_NOFOLLOW} non dereferenzia \param{target} se questo è un collegamento simbolico (vedi @@ -1353,7 +1349,7 @@ deve usare la funzione di sistema \funcd{link}, il cui prototipo è: \item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e \param{newpath} non supporta i collegamenti diretti o è una directory. \item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non fanno - riferimento ad un filesystem montato sullo stesso \itindex{mount~point} + 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}, @@ -1377,10 +1373,10 @@ nello stesso filesystem ed inoltre esso deve supportare gli \textit{hard link} (il meccanismo non è disponibile ad esempio con il filesystem \acr{vfat} di Windows). In realtà la funzione ha un ulteriore requisito, e cioè che non solo che i due file siano sullo stesso filesystem, ma anche che si faccia -riferimento ad essi all'interno dello stesso \itindex{mount~point} -\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.} +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 @@ -1800,8 +1796,7 @@ sistema \funcd{rename},\footnote{la funzione è definita dallo standard ANSI C, rispettivi file (o non si hanno privilegi amministrativi) oppure il filesystem non supporta l'operazione. \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo - stesso filesystem e sotto lo stesso \itindex{mount~point} \textit{mount - point}. + stesso filesystem e sotto lo stesso \textit{mount point}. \end{errlist} ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{EMLINK}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOSPC} e \errval{EROFS} nel loro significato generico.} @@ -1825,10 +1820,10 @@ temporaneamente se già esiste. Dato che opera in maniera analoga la funzione è soggetta alle stesse restrizioni di \func{link}, quindi è necessario che \param{oldpath} e \param{newpath} siano nello stesso filesystem e facciano riferimento allo -stesso \itindex{mount~point} \textit{mount point}, e che il filesystem -supporti questo tipo di operazione. Qualora questo non avvenga si dovrà -effettuare l'operazione in maniera non atomica copiando il file a destinazione -e poi cancellando l'originale. +stesso \textit{mount point}, e che il filesystem supporti questo tipo di +operazione. Qualora questo non avvenga si dovrà effettuare l'operazione in +maniera non atomica copiando il file a destinazione e poi cancellando +l'originale. Il comportamento della funzione è diverso a seconda che si voglia rinominare un file o una directory. Se ci riferisce ad un file allora \param{newpath}, se @@ -2834,18 +2829,20 @@ In molte occasioni è utile poter creare dei file temporanei; benché la cosa sembri semplice, in realtà il problema è più sottile di quanto non appaia a prima vista. Infatti anche se sembrerebbe banale generare un nome a caso e creare il file dopo aver controllato che questo non esista, nel momento fra il -controllo e la creazione si ha giusto lo spazio per una possibile -\itindex{race~condition} \textit{race condition} (si ricordi quanto visto in -sez.~\ref{sec:proc_race_cond}). +controllo e la creazione si ha giusto lo spazio per una possibile \textit{race + condition} (si ricordi quanto visto in sez.~\ref{sec:proc_race_cond}). + +\itindbeg{symlink~attack} Molti problemi di sicurezza derivano proprio da una creazione non accorta di -file temporanei che lascia aperta questa \itindex{race~condition} \textit{race - condition}. Un attaccante allora potrà sfruttarla con quello che viene -chiamato \itindex{symlink~attack} ``\textit{symlink attack}'' dove -nell'intervallo fra la generazione di un nome e l'accesso allo stesso, viene -creato un collegamento simbolico con quel nome verso un file diverso, -ottenendo, se il programma sotto attacco ne ha la capacità, un accesso -privilegiato. +file temporanei che lascia aperta questa \textit{race condition}. Un +attaccante allora potrà sfruttarla con quello che viene chiamato +``\textit{symlink attack}'' dove nell'intervallo fra la generazione di un nome +e l'accesso allo stesso, viene creato un collegamento simbolico con quel nome +verso un file diverso, ottenendo, se il programma sotto attacco ne ha la +capacità, un accesso privilegiato. + +\itindend{symlink~attack} La \acr{glibc} provvede varie funzioni per generare nomi di file temporanei, di cui si abbia certezza di unicità al momento della generazione; storicamente @@ -2898,8 +2895,8 @@ nome provvisorio. La funzione assegna come directory per il file temporaneo, verificando che esista e sia accessibile, la prima valida fra le seguenti: \begin{itemize*} \item la variabile di ambiente \envvar{TMPDIR} (non ha effetto se non è - definita o se il programma chiamante è \itindex{suid~bit} \acr{suid} o - \itindex{sgid~bit} \acr{sgid}, vedi sez.~\ref{sec:file_special_perm}), + definita o se il programma chiamante è \acr{suid} o \acr{sgid}, vedi + sez.~\ref{sec:file_special_perm}), \item il valore dell'argomento \param{dir} (se diverso da \val{NULL}), \item il valore della costante \const{P\_tmpdir}, \item la directory \file{/tmp}. @@ -2944,7 +2941,7 @@ che viene automaticamente cancellato alla sua chiusura o all'uscita dal programma. Lo standard non specifica in quale directory verrà aperto il file, ma la \acr{glibc} prima tenta con \const{P\_tmpdir} e poi con \file{/tmp}. Questa funzione è rientrante e non soffre di problemi di -\itindex{race~condition} \textit{race condition}. +\textit{race condition}. Alcune versioni meno recenti di Unix non supportano queste funzioni; in questo caso si possono usare le vecchie funzioni \funcd{mktemp} e \func{mkstemp} che @@ -2968,13 +2965,12 @@ casuale, il suo prototipo è: La funzione genera un nome univoco sostituendo le \code{XXXXXX} finali di \param{template}; dato che \param{template} deve poter essere modificata dalla funzione non si può usare una stringa costante. Tutte le avvertenze riguardo -alle possibili \itindex{race~condition} \textit{race condition} date per -\func{tmpnam} continuano a valere; inoltre in alcune vecchie implementazioni -il valore usato per sostituire le \code{XXXXXX} viene formato con il \ids{PID} -del processo più una lettera, il che mette a disposizione solo 26 possibilità -diverse per il nome del file, e rende il nome temporaneo facile da indovinare. -Per tutti questi motivi la funzione è deprecata e non dovrebbe mai essere -usata. +alle possibili \textit{race condition} date per \func{tmpnam} continuano a +valere; inoltre in alcune vecchie implementazioni il valore usato per +sostituire le \code{XXXXXX} viene formato con il \ids{PID} del processo più +una lettera, il che mette a disposizione solo 26 possibilità diverse per il +nome del file, e rende il nome temporaneo facile da indovinare. Per tutti +questi motivi la funzione è deprecata e non dovrebbe mai essere usata. La seconda funzione, \funcd{mkstemp} è sostanzialmente equivalente a \func{tmpfile}, ma restituisce un file descriptor invece di un nome; il suo @@ -3048,8 +3044,8 @@ In OpenBSD è stata introdotta un'altra funzione simile alle precedenti, La funzione crea una directory temporanea il cui nome è ottenuto sostituendo le \code{XXXXXX} finali di \param{template} con permessi \code{0700} (si veda sez.~\ref{sec:file_perm_overview} per i dettagli). Dato che la creazione della -directory è sempre esclusiva i precedenti problemi di \itindex{race~condition} -\textit{race condition} non si pongono. +directory è sempre esclusiva i precedenti problemi di \textit{race condition} +non si pongono. @@ -3236,11 +3232,12 @@ come argomento il valore di \var{st\_mode}. \const{S\_IFCHR} & 0020000 & Dispositivo a caratteri.\\ \const{S\_IFIFO} & 0010000 & Fifo.\\ \hline - \const{S\_ISUID} & 0004000 & Set user ID \itindex{suid~bit} (\acr{suid}) - bit.\\ - \const{S\_ISGID} & 0002000 & Set group ID \itindex{sgid~bit} - (\acr{sgid}) bit.\\ - \const{S\_ISVTX} & 0001000 & \itindex{sticky~bit} \acr{Sticky} bit.\\ + \const{S\_ISUID} & 0004000 & Set user ID (\acr{suid}) bit, vedi + sez.~\ref{sec:file_special_perm}).\\ + \const{S\_ISGID} & 0002000 & Set group ID (\acr{sgid}) bit, vedi + sez.~\ref{sec:file_special_perm}).\\ + \const{S\_ISVTX} & 0001000 & \acr{Sticky} bit, vedi + sez.~\ref{sec:file_special_perm}).\\ \hline \const{S\_IRWXU} & 00700 & Maschera per i permessi del proprietario.\\ \const{S\_IRUSR} & 00400 & Il proprietario ha permesso di lettura.\\ @@ -3899,11 +3896,10 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri. \label{fig:file_perm_bit} \end{figure} -I restanti tre bit (noti come \itindex{suid~bit} \textit{suid bit}, -\itindex{sgid~bit} \textit{sgid bit}, e \itindex{sticky~bit} \textit{sticky - bit}) sono usati per indicare alcune caratteristiche più complesse del -meccanismo del controllo di accesso su cui torneremo in seguito (in -sez.~\ref{sec:file_special_perm}), lo schema di allocazione dei bit è +I restanti tre bit (noti come \textit{suid bit}, \textit{sgid bit}, e +\textit{sticky bit}) sono usati per indicare alcune caratteristiche più +complesse del meccanismo del controllo di accesso su cui torneremo in seguito +(in sez.~\ref{sec:file_special_perm}), lo schema di allocazione dei bit è riportato in fig.~\ref{fig:file_perm_bit}. Come tutte le altre proprietà di un file anche i permessi sono memorizzati \itindex{inode} nell'\textit{inode}, e come accennato in sez.~\ref{sec:file_types} essi sono vengono restituiti in @@ -4177,7 +4173,6 @@ sez.~\ref{sec:file_mand_locking}). \itindend{suid~bit} \itindend{sgid~bit} - \itindbeg{sticky~bit} L'ultimo dei bit rimanenti, identificato dalla costante \const{S\_ISVTX}, è in @@ -4308,14 +4303,13 @@ controllati sono disponibili. Un esempio tipico per l'uso di questa funzione è quello di un processo che sta eseguendo un programma coi privilegi di un altro utente (ad esempio attraverso -l'uso del \itindex{suid~bit} \textit{suid bit}) che vuole controllare se -l'utente originale ha i permessi per accedere ad un certo file, ma eseguire -questo controllo prima di aprire il file espone al rischio di una -\itindex{race~condition} \textit{race condition} che apre ad un possibile -\itindex{symlink~attack} \textit{symlink attack} fra il controllo e l'apertura -del file. In questo caso è sempre opportuno usare invece la funzione -\func{faccessat} che tratteremo insieme alle altre \textit{at-functions} in -sez.~\ref{sec:file_openat}. +l'uso del \textit{suid bit}) che vuole controllare se l'utente originale ha i +permessi per accedere ad un certo file, ma eseguire questo controllo prima di +aprire il file espone al rischio di una \textit{race condition} che apre ad un +possibile \itindex{symlink~attack} \textit{symlink attack} fra il controllo e +l'apertura del file. In questo caso è sempre opportuno usare invece la +funzione \func{faccessat} che tratteremo insieme alle altre +\textit{at-functions} in sez.~\ref{sec:file_openat}. Del tutto analoghe a \func{access} sono le due funzioni \funcm{euidaccess} e \funcm{eaccess} che ripetono lo stesso controllo usando però gli @@ -4370,9 +4364,9 @@ file. \textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{S\_ISUID} & 04000 & Set user ID \itindex{suid~bit} bit.\\ - \const{S\_ISGID} & 02000 & Set group ID \itindex{sgid~bit} bit.\\ - \const{S\_ISVTX} & 01000 & Sticky \itindex{sticky~bit} bit.\\ + \const{S\_ISUID} & 04000 & Set user ID bit.\\ + \const{S\_ISGID} & 02000 & Set group ID bit.\\ + \const{S\_ISVTX} & 01000 & Sticky bit.\\ \hline \const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\ \const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\ @@ -4409,7 +4403,7 @@ Ad esempio i permessi standard assegnati ai nuovi file (lettura e scrittura per il proprietario, sola lettura per il gruppo e gli altri) sono corrispondenti al valore ottale $0644$, un programma invece avrebbe anche il bit di esecuzione attivo, con un valore di $0755$, se si volesse attivare il -bit \itindex{suid~bit} \acr{suid} il valore da fornire sarebbe $4755$. +bit \acr{suid} il valore da fornire sarebbe $4755$. Il cambiamento dei permessi di un file eseguito attraverso queste funzioni ha comunque alcune limitazioni, previste per motivi di sicurezza. L'uso delle @@ -4439,9 +4433,9 @@ in particolare accade che: Per alcuni filesystem\footnote{i filesystem più comuni (\textsl{ext2}, \textsl{ext3}, \textsl{ext4}, \textsl{ReiserFS}) supportano questa caratteristica, che è mutuata da BSD.} è inoltre prevista un'ulteriore -misura di sicurezza, volta a scongiurare l'abuso dei \itindex{suid~bit} bit -\acr{suid} e \acr{sgid}; essa consiste nel cancellare automaticamente questi -bit dai permessi di un file qualora un processo che non appartenga +misura di sicurezza, volta a scongiurare l'abuso dei bit \acr{suid} e +\acr{sgid}; essa consiste nel cancellare automaticamente questi bit dai +permessi di un file qualora un processo che non appartenga all'amministratore\footnote{per la precisione un processo che non dispone della capacità \const{CAP\_FSETID}, vedi sez.~\ref{sec:proc_capabilities}.} effettui una scrittura. In questo modo anche se un utente malizioso scopre un @@ -4603,12 +4597,11 @@ rispetto allo standard POSIX è che specificando -1 come valore per \param{owner} e \param{group} i valori restano immutati. Quando queste funzioni sono chiamate con successo da un processo senza i -privilegi di amministratore entrambi i bit \itindex{suid~bit} \acr{suid} e -\itindex{sgid~bit} \acr{sgid} vengono cancellati. Questo non avviene per il -bit \acr{sgid} nel caso in cui esso sia usato (in assenza del corrispondente -permesso di esecuzione) per indicare che per il file è attivo il -\itindex{mandatory~locking} \textit{mandatory locking} (vedi -sez.~\ref{sec:file_mand_locking}). +privilegi di amministratore entrambi i bit \acr{suid} e \itindex{sgid~bit} +\acr{sgid} vengono cancellati. Questo non avviene per il bit \acr{sgid} nel +caso in cui esso sia usato (in assenza del corrispondente permesso di +esecuzione) per indicare che per il file è attivo il \textit{mandatory + locking} (vedi sez.~\ref{sec:file_mand_locking}). \subsection{Un quadro d'insieme sui permessi} @@ -4688,14 +4681,12 @@ Nella parte superiore di tab.~\ref{tab:file_fileperm_bits} si è riassunto il significato dei vari bit dei permessi per un file ordinario; per quanto riguarda l'applicazione dei permessi per proprietario, gruppo ed altri si ricordi quanto illustrato in sez.~\ref{sec:file_perm_overview}. Per -compattezza, nella tabella si sono specificati i bit di \itindex{suid~bit} -\textit{suid}, \itindex{sgid~bit} \textit{sgid} e \textit{sticky} -\itindex{sticky~bit} con la notazione illustrata anche in +compattezza, nella tabella si sono specificati i bit di \textit{suid}, +\textit{sgid} e \textit{sticky} con la notazione illustrata anche in fig.~\ref{fig:file_perm_bit}. Nella parte inferiore si sono invece riassunti i significati dei vari bit dei permessi per una directory; anche in questo -caso si è riapplicato ai bit di \itindex{suid~bit} \textit{suid}, -\itindex{sgid~bit} \textit{sgid} e \textit{sticky} \itindex{sticky~bit} la -notazione illustrata in fig.~\ref{fig:file_perm_bit}. +caso si è riapplicato ai bit di \textit{suid}, \textit{sgid} e \textit{sticky} +la notazione illustrata in fig.~\ref{fig:file_perm_bit}. Si ricordi infine che i permessi non hanno alcun significato per i collegamenti simbolici, mentre per i file di dispositivo hanno senso soltanto @@ -6010,8 +6001,8 @@ gestione delle quote è \funcd{quotactl}, ed il suo prototipo è: \item[\errcode{EIO}] errore di lettura/scrittura sul file delle quote. \item[\errcode{EMFILE}] non si può aprire il file delle quote avendo superato il limite sul numero di file aperti nel sistema. - \item[\errcode{ENODEV}] \param{dev} non corrisponde ad un - \itindex{mount~point} \textit{mount point} attivo. + \item[\errcode{ENODEV}] \param{dev} non corrisponde ad un \textit{mount + point} attivo. \item[\errcode{ENOPKG}] il kernel è stato compilato senza supporto per le quote. \item[\errcode{ENOTBLK}] \param{dev} non è un dispositivo a blocchi. @@ -6833,9 +6824,8 @@ opportuno dettagliare maggiormente. per tutte le operazioni privilegiate non coperte dalle precedenti \const{CAP\_DAC\_OVERRIDE} e \const{CAP\_DAC\_READ\_SEARCH}.\\ - \const{CAP\_FSETID} & Evitare la cancellazione - automatica dei bit \itindex{suid~bit} \acr{suid} - e \itindex{sgid~bit} \acr{sgid} quando un file + \const{CAP\_FSETID} & Evitare la cancellazione automatica dei bit + \acr{suid} e \acr{sgid} quando un file per i quali sono impostati viene modificato da un processo senza questa capacità e la capacità di impostare il bit \acr{sgid} su un file anche @@ -6844,8 +6834,8 @@ opportuno dettagliare maggiormente. sez.~\ref{sec:file_perm_management}).\\ \const{CAP\_KILL} & Mandare segnali a qualunque processo (vedi sez.~\ref{sec:sig_kill_raise}).\\ - \const{CAP\_SETFCAP} & Impostare le \textit{capabilities} di un file (dal kernel - 2.6.24).\\ + \const{CAP\_SETFCAP} & Impostare le \textit{capabilities} di un file + (dal kernel 2.6.24).\\ \const{CAP\_SETGID} & Manipolare i group ID dei processi, sia il principale che i supplementari, (vedi sez.~\ref{sec:proc_setgroups}) che quelli