X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=6e5abc51249421eb5f9f73c85f111dc5594a4157;hp=b568af7e367969dbb7a3c83bd465ccebdd067df1;hb=59dd0e503abc074d287d42b64b62f8199912b91b;hpb=936ae71ad2a06b154b23470ef38f477af32e67fe diff --git a/filedir.tex b/filedir.tex index b568af7..6e5abc5 100644 --- a/filedir.tex +++ b/filedir.tex @@ -940,6 +940,9 @@ nell'elenco seguente: 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, + % vedi http://lwn.net/Articles/621046/ + \item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli \textit{access time} sul filesystem soltanto quando questo risulti antecedente il valore corrente del \textit{modification time} o del @@ -1395,7 +1398,7 @@ diventerebbe piuttosto complicata.\footnote{in genere per questo tipo di non si potrebbe più rimuoverla.} Data la pericolosità di questa operazione e la disponibilità dei collegamenti -simbolici (che vedremo a breve) e dei \itindex{bind~mount} \textit{bind mount} +simbolici (che vedremo a breve) e dei \textit{bind mount} (già visti in sez.~\ref{sec:filesystem_mounting}) che possono fornire la stessa funzionalità senza questi problemi, nel caso di Linux questa capacità è stata completamente disabilitata, e al tentativo di creare un collegamento @@ -2025,9 +2028,9 @@ directory. Si tenga presente che comunque la funzione opera associando il \textit{directory stream} ad un opportuno file descriptor sottostante, sul quale vengono compiute le operazioni. Questo viene sempre aperto impostando il -flag di \itindex{close-on-exec} \textit{close-on-exec} (si ricordi quanto -detto in sez.~\ref{sec:proc_exec}), così da evitare che resti aperto in caso -di esecuzione di un altro programma. +flag di \textit{close-on-exec} (si ricordi quanto detto in +sez.~\ref{sec:proc_exec}), così da evitare che resti aperto in caso di +esecuzione di un altro programma. Nel caso in cui sia necessario conoscere il \textit{file descriptor} associato ad un \textit{directory stream} si può usare la funzione @@ -2098,9 +2101,8 @@ funzioni che operano sul \textit{directory stream} e non dovrà essere più utilizzato all'interno del proprio programma. In particolare dovrà essere chiuso attraverso il \textit{directory stream} con \func{closedir} e non direttamente. Si tenga presente inoltre che \func{fdopendir} non modifica lo -stato di un eventuale flag di \itindex{close-on-exec} \textit{close-on-exec}, -che pertanto dovrà essere impostato esplicitamente in fase di apertura del -file descriptor. +stato di un eventuale flag di \textit{close-on-exec}, che pertanto dovrà +essere impostato esplicitamente in fase di apertura del file descriptor. Una volta che si sia aperto un \textit{directory stream} la lettura del contenuto della directory viene effettuata attraverso la funzione @@ -3321,18 +3323,18 @@ Si deve tener presente infatti che la lunghezza del file riportata in \var{st\_size} non è detto che corrisponda all'occupazione dello spazio su disco, e non solo perché la parte finale del file potrebbe riempire parzialmente un blocco. In un sistema unix-like infatti è possibile -l'esistenza dei cosiddetti \itindex{sparse~file} \textit{sparse file}, cioè -file in cui sono presenti dei ``\textsl{buchi}'' \index{file!\textit{hole}} -(\textit{holes} nella nomenclatura inglese) che si formano tutte le volte che -si va a scrivere su un file dopo aver eseguito uno spostamento oltre la sua -fine (tratteremo in dettaglio l'argomento in sez.~\ref{sec:file_lseek}). +l'esistenza dei cosiddetti \textit{sparse file}, cioè file in cui sono +presenti dei ``\textsl{buchi}'' (\textit{holes} nella nomenclatura inglese) +che si formano tutte le volte che si va a scrivere su un file dopo aver +eseguito uno spostamento oltre la sua fine (tratteremo in dettaglio +l'argomento in sez.~\ref{sec:file_lseek}). In questo caso si avranno risultati differenti a seconda del modo in cui si calcola la lunghezza del file, ad esempio il comando \cmd{du}, (che riporta il numero di blocchi occupati) potrà dare una dimensione inferiore, mentre se si legge dal file (ad esempio usando il comando \cmd{wc -c}), dato che in tal -caso per i ``\textsl{buchi}'' \index{file!\textit{hole}} vengono restituiti -degli zeri, si avrà lo stesso risultato di \cmd{ls}. +caso per i ``\textsl{buchi}'' vengono restituiti degli zeri, si avrà lo stesso +risultato di \cmd{ls}. Se è sempre possibile allargare un file, scrivendoci sopra o usando la funzione \func{lseek} (vedi sez.~\ref{sec:file_lseek}) per spostarsi oltre la @@ -3387,11 +3389,10 @@ perduti. Il comportamento in caso di lunghezza del file inferiore a \param{length} non è specificato e dipende dall'implementazione: il file può essere lasciato invariato o esteso fino alla lunghezza scelta. Nel caso di Linux viene esteso -con la creazione di un \index{file!\textit{hole}} \textsl{buco} nel -\itindex{sparse~file} file e ad una lettura si otterranno degli zeri, si tenga -presente però che questo comportamento è supportato solo per filesystem -nativi, ad esempio su un filesystem non nativo come il VFAT di Windows questo -non è possibile. +con la creazione di un \textsl{buco} nel file e ad una lettura si otterranno +degli zeri, si tenga presente però che questo comportamento è supportato solo +per filesystem nativi, ad esempio su un filesystem non nativo come il VFAT di +Windows questo non è possibile. \subsection{I tempi dei file} @@ -3405,8 +3406,8 @@ fig.~\ref{fig:file_stat_struct}. Il significato di questi tempi e dei relativi campi della struttura \struct{stat} è illustrato nello schema di tab.~\ref{tab:file_file_times}, dove è anche riportato un esempio delle funzioni che effettuano cambiamenti su di essi. Il valore del tempo è espresso -nel cosiddetto \itindex{calendar~time} \textit{calendar time}, su cui -torneremo in dettaglio in sez.~\ref{sec:sys_time}. +nel cosiddetto \textit{calendar time}, su cui torneremo in dettaglio in +sez.~\ref{sec:sys_time}. \begin{table}[htb] \centering @@ -3832,12 +3833,12 @@ in \param{pathname}.\footnote{su Linux solo \func{utimensat} è una Torneremo su questa sintassi e sulla sua motivazione in sez.~\ref{sec:file_openat}, quando tratteremo tutte le altre funzioni (le -cosiddette \itindex{at-functions} \textit{at-functions}) che la utilizzano; -essa prevede comunque anche la presenza dell'argomento \param{flags} con cui -attivare flag di controllo che modificano il comportamento della funzione, nel -caso specifico l'unico valore consentito è \const{AT\_SYMLINK\_NOFOLLOW} che -indica alla funzione di non dereferenziare i collegamenti simbolici, cosa che -le permette di riprodurre le funzionalità di \func{lutimes}. +cosiddette \textit{at-functions}) che la utilizzano; essa prevede comunque +anche la presenza dell'argomento \param{flags} con cui attivare flag di +controllo che modificano il comportamento della funzione, nel caso specifico +l'unico valore consentito è \const{AT\_SYMLINK\_NOFOLLOW} che indica alla +funzione di non dereferenziare i collegamenti simbolici, cosa che le permette +di riprodurre le funzionalità di \func{lutimes}. @@ -4325,8 +4326,8 @@ 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 \itindex{at-functions} -\textit{at-functions} in sez.~\ref{sec:file_openat}. +\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 @@ -6460,14 +6461,13 @@ Con questo supporto e con le ulteriori modifiche introdotte con il kernel rivoluzionato, rendendolo più aderente alle intenzioni originali dello standard POSIX, rimuovendo il significato che fino ad allora aveva avuto la capacità \const{CAP\_SETPCAP} e cambiando le modalità di funzionamento del -cosiddetto \itindex{capabilities~bounding~set} \textit{capabilities bounding - set}. Ulteriori modifiche sono state apportate con il kernel 2.6.26 per -consentire la rimozione non ripristinabile dei privilegi di -amministratore. Questo fa sì che il significato ed il comportamento del kernel -finisca per dipendere dalla versione dello stesso e dal fatto che le nuove -\textit{file capabilities} siano abilitate o meno. Per capire meglio la -situazione e cosa è cambiato conviene allora spiegare con maggiori dettagli -come funziona il meccanismo delle \textit{capabilities}. +cosiddetto \textit{capabilities bounding set}. Ulteriori modifiche sono state +apportate con il kernel 2.6.26 per consentire la rimozione non ripristinabile +dei privilegi di amministratore. Questo fa sì che il significato ed il +comportamento del kernel finisca per dipendere dalla versione dello stesso e +dal fatto che le nuove \textit{file capabilities} siano abilitate o meno. Per +capire meglio la situazione e cosa è cambiato conviene allora spiegare con +maggiori dettagli come funziona il meccanismo delle \textit{capabilities}. Il primo passo per frazionare i privilegi garantiti all'amministratore, supportato fin dalla introduzione iniziale del kernel 2.2, è stato quello in @@ -6892,8 +6892,7 @@ opportuno dettagliare maggiormente. pur non essendo proprietari del file (dal kernel 2.4).\\ \const{CAP\_LINUX\_IMMUTABLE}& Impostare sui file gli attributi - \textit{immutable} e \itindex{append~mode} - \textit{append-only} (vedi + \textit{immutable} e \textit{append-only} (vedi sez.~\ref{sec:file_perm_overview}) se supportati.\\ \const{CAP\_MKNOD} & Creare \index{file!di~dispositivo} file di @@ -7695,10 +7694,12 @@ funzione. % informazioni su setns qui: http://lwn.net/Articles/532748/ % http://lwn.net/Articles/531498/ - % TODO: spostare chroot e le funzioni affini relative ai container da qualche % parte diversa se è il caso. +% TODO Inheriting capabilities vedi http://lwn.net/Articles/632520/ eambient +% capabilities introdotte con il kernel 4.3, vedi +% http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 Benché non abbia niente a che fare con permessi, utenti e gruppi, la funzione \func{chroot} viene usata spesso per restringere le capacità di accesso di un