X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=73cc8e6d0e42695bf12683115f50988272cf4f53;hp=d3d7cdaae1419e21ed63c8c30a7ab241144ef8d7;hb=4aa6c51696d2b11c572eccd37238db1691785573;hpb=08c289c4acd775aabeb5beeb7b08566969e11d9b diff --git a/filedir.tex b/filedir.tex index d3d7cda..73cc8e6 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1,6 +1,6 @@ %% filedir.tex %% -%% Copyright (C) 2000-2011 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -647,7 +647,12 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che \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{EMFILE}] la tabella dei device \textit{dummy} è piena. + \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 link simolici 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. \item[\errcode{ENODEV}] il tipo \param{filesystemtype} non esiste o non è configurato nel kernel. \item[\errcode{ENOTBLK}] non si è usato un \textit{block device} per @@ -656,30 +661,29 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che dispositivo \param{source} è sbagliato. \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore. \end{errlist} - ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{ENOMEM}, - \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR} nel loro - significato generico.} + ed inoltre \errval{EFAULT}, \errval{ENOMEM}, \errval{ENAMETOOLONG}, + \errval{ENOENT}, \errval{ENOTDIR} nel loro significato generico.} \end{funcproto} -La funzione monta sulla directory indicata \param{target}, detta +La funzione monta sulla directory indicata da \param{target}, detta \itindex{mount~point} \textit{mount point}, il filesystem contenuto nel file -di dispositivo indicato \param{source}. In entrambi i casi, come daremo per +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 \itindex{pathname} \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 - File System} è estremamente flessibile e può essere usata anche per oggetti -diversi da un disco. Ad esempio usando il \textit{loop device} si può montare -un file qualunque (come l'immagine di un CD-ROM o di un floppy) che contiene -l'immagine di un filesystem, inoltre alcuni tipi di filesystem, come -\texttt{proc} o \texttt{sysfs} sono virtuali e non hanno un supporto che ne -contenga i dati, che invece sono generati al volo ad ogni lettura, e passati -indietro al kernel ad ogni scrittura.\footnote{costituiscono quindi un - meccanismo di comunicazione, attraverso l'ordinaria interfaccia dei file, - con il kernel.} +illustrato in sez.~\ref{sec:file_vfs_work} la struttura del +\itindex{Virtual~File~System} \textit{Virtual File System} è estremamente +flessibile e può essere usata anche per oggetti diversi da un disco. Ad +esempio usando il \textit{loop device} si può montare un file qualunque (come +l'immagine di un CD-ROM o di un floppy) che contiene l'immagine di un +filesystem, inoltre alcuni tipi di filesystem, come \texttt{proc} o +\texttt{sysfs} sono virtuali e non hanno un supporto che ne contenga i dati, +che invece sono generati al volo ad ogni lettura, e passati indietro al kernel +ad ogni scrittura.\footnote{costituiscono quindi un meccanismo di + comunicazione, attraverso l'ordinaria interfaccia dei file, con il kernel.} Il tipo di filesystem che si vuole montare è specificato dall'argomento \param{filesystemtype}, che deve essere una delle stringhe @@ -691,78 +695,369 @@ nessun file di dispositivo, il contenuto di \param{source} viene ignorato. L'argomento \param{data} viene usato per passare le impostazioni relative alle caratteristiche specifiche di ciascun filesystem. Si tratta di una stringa di parole chiave (separate da virgole e senza spazi) che indicano le cosiddette -opzioni del filesystem che devono essere impostate, in sostanza viene usato il -contenuto del parametro dell'opzione \texttt{-o} del comando \texttt{mount}. I -valori utilizzabili dipendono dal tipo di filesystem e ciascuno ha i suoi, -pertanto si rimanda alla documentazione della pagina di manuale di questo -comando. +``\textsl{opzioni}'' del filesystem che devono essere impostate; in genere +viene usato direttamente il contenuto del parametro dell'opzione \texttt{-o} +del comando \texttt{mount}. I valori utilizzabili dipendono dal tipo di +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. - -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 in diversi \itindex{mount~point} \textit{mount point} lo stesso -filesystem, sia montare più filesystem sullo stesso \itindex{mount~point} -\textit{mount point}, nel qual caso vale quanto appena detto, e solo il +mascherato dal contenuto della directory radice del filesystem montato. Fino +ai kernel della serie 2.2.x non era possibile montare un filesytem 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 +qual caso vale comunque quanto detto in precedenza, e cioè che solo il contenuto dell'ultimo filesystem montato sarà visibile. -Ciascun filesystem è dotato di caratteristiche specifiche che possono essere -attivate o meno, alcune di queste sono generali (anche se non è detto siano -disponibili in ogni filesystem), e vengono specificate come opzioni di -montaggio con l'argomento \param{mountflags}. - -In Linux \param{mountflags} deve essere un intero a 32 bit i cui 16 più -significativi sono un \itindex{magic~number} \textit{magic - number}\footnote{che nel caso è \code{0xC0ED}, si può usare la costante - \const{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags} riservata - al \textit{magic number}.} mentre i 16 meno significativi sono usati per -specificare le opzioni; essi sono usati come maschera binaria e vanno -impostati con un OR aritmetico della costante \const{MS\_MGC\_VAL} con i -valori riportati nell'elenco seguente: - -\begin{basedescript}{\desclabelstyle{\pushlabel}} - -\item[\const{MS\_BIND}] Effettua un cosiddetto \textit{bind mount}, in - sostanza . - -\item[\const{MS\_DIRSYNC}] . - -\item[\const{MS\_MANDLOCK}] Consente il \textit{mandatory locking} - \itindex{mandatory~locking} (vedi - sez.~\ref{sec:file_mand_locking}). - -\item[\const{MS\_MOVE}] Sposta atomicamente il punto di montaggio. - -\item[\const{MS\_NOATIME}] Non aggiorna gli \textit{access time} (vedi - sez.~\ref{sec:file_file_times}). - -\item[\const{MS\_NODEV}] Impedisce l'accesso ai file di dispositivo. +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 +non è detto che tutti i filesystem le supportino, che si specificano tramite +l'argomento \param{mountflags}. L'argomento inoltre può essere utilizzato per +modificare il comportamento della funzione, facendole compiere una operazione +diversa (ad esempio un rimontaggio, invece che un montaggio). + +In Linux \param{mountflags} deve essere un intero a 32 bit; fino ai kernel +della serie 2.2.x i 16 più significativi avevano un valore riservato che +doveva essere specificato obbligatoriamente,\footnote{il valore era il + \itindex{magic~number} \textit{magic number} \code{0xC0ED}, si può usare la + costante \const{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags} + riservata al \textit{magic number}, mentre per specificarlo si può dare un + OR aritmetico con la costante \const{MS\_MGC\_VAL}.} e si potevano usare +solo i 16 meno significativi. Oggi invece, con un numero di opzioni superiore, +sono utilizzati tutti e 32 i bit, ma qualora nei 16 più significativi sia +presente detto valore, che non esprime una combinazione valida, esso viene +ignorato. Il valore dell'argomento deve essere espresso come maschera binaria +e i vari bit devono essere impostati con un OR aritmetico dei rispettivi flag, +identificati dalle costanti riportate nell'elenco seguente: + +\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}} +\itindbeg{bind~mount} +\item[\const{MS\_BIND}] Effettua un cosiddetto \textit{bind mount}, in cui è + possibile montare una directory di un filesystem in un'altra directory, + l'opzione è disponibile a partire dai kernel della serie 2.4. In questo caso + verranno presi in considerazione solo gli argomenti \param{source}, che + stavolta indicherà la directory che si vuole montare (e non un file di + dispositivo) e \param{target} che indicherà la directory su cui verrà + effettuato il \textit{bind mount}. Gli argomenti \param{filesystemtype} + e \param{data} vengono ignorati. + + In sostanza quello che avviene è che in corrispondenza del \index{pathname} + \textit{pathname} indicato da \param{target} viene montato l'\textit{inode} + di \param{source}, così che la porzione di albero dei file presente sotto + \param{source} diventi visibile allo stesso modo sotto + \param{target}. Trattandosi esattamente dei dati dello stesso filesystem, + ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile + nell'altro, visto che entrambi faranno riferimento agli stessi + \textit{inode}. + + Dal punto di vista del \itindex{Virtual~File~System} VFS l'operazione è + analoga al montaggio di un filesystem proprio nel fatto che anche in questo + caso si inserisce in corripondenza della \textit{dentry} di \texttt{target} + un diverso \textit{inode}, che stavolta, invece di essere quello della + radice del filesystem indicato da un file di dispositivo, è quello di una + directory già montata. + + Si tenga presente che proprio per questo sotto \param{target} comparirà il + contenuto che è presente sotto \param{source} all'interno del filesystem in + cui quest'ultima è contenuta. Questo potrebbe non corrispondere alla + porzione di albero che sta sotto \param{source} qualora in una + sottodirectory di quest'ultima si fosse effettuato un altro montaggio. In + tal caso infatti nella porzione di albero sotto \param{source} si troverebbe + il contenuto del nuovo filesystem (o di un altro \textit{bind mount}) mentre + sotto \param{target} ci sarebbe il contenuto presente nel filesystem + originale.\footnote{questo evita anche il problema dei \textit{loop} di + fig.~\ref{fig:file_link_loop}, dato che se anche si montasse su + \param{target} una directory in cui essa è contenuta, il cerchio non + potrebbe chiudersi perché ritornati a \param{target} dentro il + \textit{bind mount} vi si troverebbe solo il contenuto originale e non si + potrebbe tornare indietro.} + + Fino al kernel 2.6.26 questo flag doveva essere usato da solo, in quanto il + \textit{bind mount} continuava ad utilizzare le stesse opzioni del montaggio + originale, dal 2.6.26 è stato introdotto il supporto per il cosiddetto + \textit{read-only bind mount} e viene onorata la presenza del flag + \const{MS\_RDONLY}. In questo modo si ottiene che l'accesso ai file sotto + \param{target} sia effettuabile esclusivamente in sola lettura. + + Il supporto per il \textit{bind mount} consente di superare i limiti + presenti per gli \textit{hard link} (di cui parleremo in + sez.~\ref{sec:file_link}) ottenendo un qualcosa di analogo in cui si può + fare riferimento alla porzione dell'albero dei file di un filesystem + presente a partire da una certa directory utilizzando una qualunque altra + directory, anche se questa sta su un filesystem diverso. Si può così fornire + una alternativa all'uso dei link simbolici (di cui parleremo in + sez.~\ref{sec:file_symlink}) che funziona correttamente anche all'intero di + un \textit{chroot} (argomento su cui torneremo in + sez.~\ref{sec:file_chroot}. +\itindend{bind~mount} + +\item[\const{MS\_DIRSYNC}] Richiede che ogni modifica al contenuto di una + directory venga immediatamente registrata su disco in maniera sincrona + (introdotta a partire dai kernel della serie 2.6). L'opzione si applica a + tutte le directory del filesystem, ma su alcuni filesystem è possibile + impostarla a livello di singole directory o per i sottorami di una directory + con il comando \cmd{lsattr}.\footnote{questo avviene tramite delle opportune + \texttt{ioctl} (vedi sez.~\ref{sec:file_ioctl}).} + + Questo consente di ridurre al minimo il rischio di perdita dei dati delle + directory in caso di crollo improvviso del sistema, al costo di una certa + perdita di prestazioni dato che le funzioni di scrittura relative ad + operazioni sulle directory non saranno più bufferizzate e si bloccheranno + fino all'arrivo dei dati sul disco prima che un programma possa proseguire. + +\item[\const{MS\_MANDLOCK}] Consente l'uso del \textit{mandatory locking} + \itindex{mandatory~locking} (vedi sez.~\ref{sec:file_mand_locking}) sui file + del filesystem. Per poterlo utilizzare effettivamente però esso dovrà essere + 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 + nell'argomento \param{target}. Tutti gli altri argomenti della funzione + vengono ignorati. + + Lo spostamento avviene atomicamente, ed il ramo di albero presente + sotto \param{source} sarà immediatamante visibile sotto \param{target}. Non + esiste cioè nessun momento in cui il filesystem non risulti montato in una o + nell'altra directory e pertanto è garantito che la risoluzione di + \textit{pathname} relativi all'interno del filesystem non possa fallire. + +\item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento + degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per + qualunque tipo di file. Dato che l'aggiornamento degli \textit{access time} + è una funzionalità la cui utilità è spesso irrilevante ma comporta un costo + elevato visto che una qualunque lettura comporta comunque una scrittura su + disco,\footnote{e questo ad esempio ha conseguenze molto pesanti nell'uso + della batteria sui portatili.} questa opzione consente di disabilitarla + completamente. La soluzione può risultare troppo drastica dato che + l'informazione viene comunque utilizzata da alcuni programmi, per cui nello + sviluppo del kernel sono state introdotte altre opzioni che forniscono + soluzioni più appropriate e meno radicali. + +\item[\const{MS\_NODEV}] Viene disabilitato sul filesystem l'accesso ai file + di dispositivo eventualmente presenti su di esso. L'opzione viene usata come + misura di precauzione per rendere inutile la presenza di eventuali file di + dispositivo su filesystem che non dovrebbero contenerne.\footnote{si ricordi + che le convenzioni del \itindex{Filesystem~Hierarchy~Standard~(FHS)} + \textit{Linux Filesystem Hierarchy Standard} richiedono che questi siano + mantenuti esclusivamente sotto \texttt{/dev}.} + + Viene utilizzata, assieme a \const{MS\_NOEXEC} e \const{MS\_NOSUID}, per + fornire un accesso più controllato a quei filesystem di cui gli utenti hanno + il controllo dei contenuti, in particolar modo quelli posti su dispositivi + rimuovibili. In questo modo si evitano alla radice possibili situazioni in + cui un utente malizioso inserisce su uno di questi filesystem dei file di + dispositivo con permessi ``opportunamente'' ampliati che gli consentano di + accedere anche a risorse cui non dovrebbe. + +\item[\const{MS\_NODIRATIME}] Viene disabilitato sul filesystem + l'aggiornamento degli \textit{access time} (vedi + sez.~\ref{sec:file_file_times}), ma soltanto per le directory. Costituisce + una alternativa per \const{MS\_NOATIME}, che elimina l'informazione per le + directory, che in pratica che non viene mai utilizzata, mantenendola per i + file in cui invece ha un impiego, sia pur limitato. + +\item[\const{MS\_NOEXEC}] Viene disabilitata sul filesystem l'esecuzione di un + qualunque file eseguibile eventualmente presente su di esso. L'opzione viene + usata come misura di precauzione per rendere impossibile l'uso di programmi + posti su filesystem che non dovrebbero contenerne. + + Anche in questo caso viene utilizzata per fornire un accesso più controllato + a quei filesystem di cui gli utenti hanno il controllo dei contenuti. Da + questo punto di vista l'opzione è meno importante delle analoghe + \const{MS\_NODEV} e \const{MS\_NOSUID} in quanto l'esecuzione di un + programma creato dall'utente pone un livello di rischio nettamente + inferiore, ed è in genere consentita per i file contenuti nella sua home + directory.\footnote{cosa che renderebbe superfluo l'attivazione di questa + opzione, il cui uso ha senso solo per ambienti molto controllati in cui si + vuole che gli utenti eseguano solo i programmi forniti + 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. + + 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 \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 + \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 + volte che si deve accedere ai contenuti di un filesystem con la certezza che + questo non venga modificato (ad esempio per ispezionare un filesystem + corrotto). All'avvio di default il kernel monta la radice in questa + modalità. + +\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}. + +\item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli + \textit{access time} sul filesystem soltanto quando questo risulti + antecendente il valore corrente del \textit{modification time} o del + \textit{change time} (per i tempi dei file si veda + sez.~\ref{sec:file_file_times}). L'opzione è disponibile a partire dal + kernel 2.6.20, mentre dal 2.6.30 questo è diventato il comportamento di + default del sistema, che può essere riportato a quello tradizionale con + l'uso di \const{MS\_STRICTATIME}. Sempre dal 2.6.30 il comportamento è stato + anche modificato e l'\textit{access time} viene comunque aggiornato se è più + vecchio di un giorno. + + L'opzione consente di evitare i problemi di prestazioni relativi + all'aggiornamento dell'\textit{access time} senza avere impatti negativi + riguardo le funzionalità, il comportamento adottato infatti consente di + rendere evidente che vi è stato un accesso dopo la scrittura, ed evitando al + contempo ulteriori operazioni su disco negli accessi successivi. In questo + modo l'informazione relativa al fatto che un file sia stato letto resta + disponibile, ed i programmi che ne fanno uso continuano a funzionare. Con + l'introduzione di questo comportamento l'uso delle alternative + \const{MS\_NOATIME} e \const{MS\_NODIRATIME} è sostanzialmente inutile. + +\item[\const{MS\_REMOUNT}] Consente di rimontare un filesystem già montato + cambiandone le opzioni di montaggio in maniera atomica. In questo modo si + possono modificare le opzioni del filesystem anche se questo è in uso. Gli + argomenti \param{source} e \param{target} devono essere gli stessi usati per + il montaggio originale, mentre \param{data} che \param{mountflags} + conterranno le nuove opzioni, \param{filesystemtype} viene ignorato. + + Qualunque opzione specifica del filesystem indicata con \param{data} può + essere modificata, mentre con \param{mountflags} possono essere modificate + solo alcune opzioni generiche. Con i kernel più recenti queste sono soltanto + \const{MS\_MANDLOCK}, \const{MS\_RDONLY} e \const{MS\_SYNCHRONOUS}, prima + del kernel 2.6.16 potevano essere modificate anche le ulteriori + \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 \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 \textit{mount point} che si intende + marcare, e tutti gli altri argomenti verranno ignorati. + + Lo scopo dell'opzione è ottenere che tutti i successivi \textit{bind mount} + effettuati da un \textit{mount point} marcato da essa siano di tipo + \textit{shared}, cioè ``\textsl{condividano}'' con l'originale e fra di loro + ogni ulteriore operazione di montaggio o smontaggio che avviene su una + directory al di sotto di uno qualunque di essi. Le operazioni di montaggio e + smontaggio cioè vengono ``\textsl{propagate}'' a tutti i \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 + è presente a partire dal kernel 2.6.17 e sostituisce, utilizzando un nome + non fuorviante, la precedente \const{MS\_VERBOSE}, introdotta nel kernel + 2.6.12, che aveva lo stesso effetto. + +\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 + 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. + + Lo scopo dell'opzione è ottenere che tutti i successivi \textit{bind mount} + effettuati da un \textit{mount point} marcato da essa siano di tipo + \textit{slave}, cioè ``\textsl{condividano}'' ogni ulteriore operazione di + montaggio o smontaggio che avviene su una directory al di sotto del + \textit{mount point} originale. Le operazioni di montaggio e smontaggio in + 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 \textit{mount point} originale. + +\item[\const{MS\_STRICTATIME}] Ripristina il comportamento tradizionale per + cui l'\textit{access time} viene aggiornato ad ogni accesso al + file. L'opzione è disponibile solo a partire dal kernel 2.6.30 quando il + comportamento di default del kernel è diventato quello fornito da + \const{MS\_RELATIME}. + +\item[\const{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona richiedendo che + ogni modifica al contenuto del filesystem venga immediatamente registrata su + disco. Lo stesso comportamento può essere ottenuto con il flag + \const{O\_SYNC} di \func{open} (vedi sez.~\ref{sec:file_open}). + + Questa opzione consente di ridurre al minimo il rischio di perdita dei dati + in caso di crollo improvviso del sistema, al costo di una pesante perdita di + prestazioni dato che tutte le funzioni di scrittura non saranno più + bufferizzate e si bloccheranno fino all'arrivo dei dati sul disco. Per un + 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 \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 disabilità la capacità di + eseguire dei \itindex{bind~mount} \textit{bind mount}. Si 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}. -\item[\const{MS\_NODIRATIME}] Non aggiorna gli \textit{access time} delle - directory. -\item[\const{MS\_NOEXEC}] Impedisce di eseguire programmi. - -\item[\const{MS\_NOSUID}] Ignora i bit \itindex{suid~bit} \acr{suid} e - \itindex{sgid~bit} \acr{sgid}. - -\item[\const{MS\_RDONLY}] Monta in sola lettura. - -\item[\const{MS\_RELATIME}] . - -\item[\const{MS\_REMOUNT}] Rimonta il filesystem cambiando le opzioni. - -\item[\const{MS\_SILENT}] . +\end{basedescript} -\item[\const{MS\_STRICTATIME}] . -\item[\const{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona. +% NOTE per \const{MS\_SLAVE},\const{MS\_SHARE}, \const{MS\_PRIVATE} e +% \const{MS\_UNBINDABLE} dal 2.6.15 vedi shared subtrees, in particolare +% * http://lwn.net/Articles/159077/ e +% * Documentation/filesystems/sharedsubtree.txt -% TODO aggiornare con i nuovi flag di man mount -% verificare i readonly mount bind del 2.6.26 -\end{basedescript} +% TODO: (bassa priorità) non documentati ma presenti in sys/mount.h: +% * MS_POSIXACL +% * MS_KERNMOUNT +% * MS_I_VERSION +% * MS_ACTIVE +% * MS_NOUSER La funzione \func{mount} può essere utilizzata anche per effettuare il \textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo @@ -995,10 +1290,12 @@ complicata (in genere per questo tipo di errori occorre far girare il programma \cmd{fsck} per riparare il filesystem). Data la pericolosità di questa operazione e la disponibilità dei link -simbolici che possono fornire la stessa funzionalità senza questi problemi, -nel caso di Linux questa capacità è stata completamente disabilitata, e al -tentativo di creare un link diretto ad una directory la funzione \func{link} -restituisce l'errore \errcode{EPERM}. +simbolici (che vedremo in sez.~\ref{sec:file_symlink}) e dei +\itindex{bind~mount} \textit{bind mount} (già visti in +sez.~\ref{sec:sys_file_config}) che possono fornire la stessa funzionalità +senza questi problemi, nel caso di Linux questa capacità è stata completamente +disabilitata, e al tentativo di creare un link diretto ad una directory la +funzione \func{link} restituisce l'errore \errcode{EPERM}. Un ulteriore comportamento peculiare di Linux è quello in cui si crea un \textit{hard link} ad un link simbolico. In questo caso lo standard POSIX @@ -1010,10 +1307,9 @@ iniziale di Linux ma a partire dai kernel della serie 2.0.x\footnote{per la kernel di sviluppo 1.3.56, ed è stato temporaneamente ripristinato anche durante lo sviluppo della serie 2.1.x, per poi tornare al comportamento attuale fino ad oggi (per riferimento si veda - \href{http://lwn.net/Articles/293902} - {\texttt{http://lwn.net/Articles/293902}}).} è stato adottato un -comportamento che non segue più lo standard per cui l'\textit{hard link} viene -creato rispetto al link simbolico, e non al file cui questo punta. + \url{http://lwn.net/Articles/293902}).} è stato adottato un comportamento +che non segue più lo standard per cui l'\textit{hard link} viene creato +rispetto al link simbolico, e non al file cui questo punta. La ragione di questa differenza rispetto allo standard, presente anche in altri sistemi unix-like, sono dovute al fatto che un link simbolico può fare @@ -2744,6 +3040,8 @@ accesso in lettura sui dati bufferizzati. Questo comporta un ovvio costo sia in termini di prestazioni, che di consumo di risorse come la batteria per i portatili, o cicli di riscrittura per i dischi su memorie riscrivibili. +% TODO aggiustare per il contenuto duplicato con le analoghe MS_* + Per questo motivo, onde evitare di mantenere una informazione che nella maggior parte dei casi non interessa, è sempre stato possibile disabilitare l'aggiornamento del tempo di ultimo accesso con l'opzione di montaggio @@ -6659,7 +6957,7 @@ funzione. -\subsection{La funzione \func{chroot}} +\subsection{La gestione dei {chroot}} \label{sec:file_chroot} % TODO introdurre nuova sezione sulle funzionalità di sicurezza avanzate, con @@ -6673,6 +6971,8 @@ Benché non abbia niente a che fare con permessi, utenti e gruppi, la funzione programma ad una sezione limitata del filesystem, per cui ne parleremo in questa sezione. +% TODO riferimenti ai bind mount, link simbolici ecc. + Come accennato in sez.~\ref{sec:proc_fork} ogni processo oltre ad una directory di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe sono contenute in due campi (rispettivamente \var{pwd} e \var{root}) di