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}
\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.
\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
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
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.
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
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,
\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
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
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
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
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}
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
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
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
\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},
(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
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.}
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
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
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}.
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
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
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.
\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.\\
\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
\itindend{suid~bit}
\itindend{sgid~bit}
-
\itindbeg{sticky~bit}
L'ultimo dei bit rimanenti, identificato dalla costante \const{S\_ISVTX}, è in
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
\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.\\
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
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
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}
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
\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.
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
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