Ancora su prctl, quasi completate le opzioni, riposizionati alcuni TODO.
[gapil.git] / filedir.tex
index f413356e1bbe840c00e38120cae29e80fab32989..8e93228a4e386834ce53df2f883d5aaa566ebf41 100644 (file)
@@ -4320,7 +4320,7 @@ caso \param{type} deve essere rispettivamente \const{USRQUOTA} o
 %    \const{} & .\\
     \hline
   \end{tabular}
 %    \const{} & .\\
     \hline
   \end{tabular}
-  \caption{Possibili valori per l'argomento \param{subcommand} di
+  \caption{Possibili valori per l'argomento \param{subcmd} di
     \macro{QCMD}.} 
   \label{tab:quotactl_commands}
 \end{table}
     \macro{QCMD}.} 
   \label{tab:quotactl_commands}
 \end{table}
@@ -4331,7 +4331,7 @@ l'argomento \param{subcmd} di \macro{QCMD}, sono riportate in
 tab.~\ref{tab:quotactl_commands}. In generale le operazione di attivazione,
 disattivazione e di modifica dei limiti delle quote sono riservate e
 richiedono i privilegi di amministratore.\footnote{per essere precisi tutte le
 tab.~\ref{tab:quotactl_commands}. In generale le operazione di attivazione,
 disattivazione e di modifica dei limiti delle quote sono riservate e
 richiedono i privilegi di amministratore.\footnote{per essere precisi tutte le
-  operazionie indicate come privilegiate in tab.~\ref{tab:quotactl_commands}
+  operazioni indicate come privilegiate in tab.~\ref{tab:quotactl_commands}
   richiedono la \textit{capability} \const{CAP\_SYS\_ADMIN}.} Inoltre gli
 utenti possono soltanto richiedere i dati relativi alle proprie quote, solo
 l'amministratore può ottenere i dati di tutti.
   richiedono la \textit{capability} \const{CAP\_SYS\_ADMIN}.} Inoltre gli
 utenti possono soltanto richiedere i dati relativi alle proprie quote, solo
 l'amministratore può ottenere i dati di tutti.
@@ -4346,10 +4346,10 @@ l'amministratore può ottenere i dati di tutti.
     \hline
     \const{QFMT\_VFS\_OLD}& il vecchio (ed obsoleto) formato delle quote.\\
     \const{QFMT\_VFS\_V0} & la versione 0 usata dal VFS di Linux (supporta
     \hline
     \const{QFMT\_VFS\_OLD}& il vecchio (ed obsoleto) formato delle quote.\\
     \const{QFMT\_VFS\_V0} & la versione 0 usata dal VFS di Linux (supporta
-                            \acr{uid} e \acr{gis} a 32 bit e limiti fino a
+                            \acr{uid} e \acr{gid} a 32 bit e limiti fino a
                             $2^{42}$ byte e $2^{32}$ file.\\
     \const{QFMT\_VFS\_V1} & la versione 1 usata dal VFS di Linux (supporta
                             $2^{42}$ byte e $2^{32}$ file.\\
     \const{QFMT\_VFS\_V1} & la versione 1 usata dal VFS di Linux (supporta
-                            \acr{uid} e \acr{gis} a 32 bit e limiti fino a
+                            \acr{uid} e \acr{GID} a 32 bit e limiti fino a
                             $2^{64}$ byte e $2^{64}$ file.\\
     \hline
   \end{tabular}
                             $2^{64}$ byte e $2^{64}$ file.\\
     \hline
   \end{tabular}
@@ -4424,7 +4424,7 @@ di spazio e \textit{inode} o il tempo che resta nel caso si sia superato un
 
 Inoltre in caso di modifica di un limite si può voler operare solo su una
 delle risorse (blocchi o \textit{inode});\footnote{non è possibile modificare
 
 Inoltre in caso di modifica di un limite si può voler operare solo su una
 delle risorse (blocchi o \textit{inode});\footnote{non è possibile modificare
-  soltanto uno dei limiti (\textit{hard} o \textit{soft}, occorre sempre
+  soltanto uno dei limiti (\textit{hard} o \textit{soft}) occorre sempre
   rispecificarli entrambi.} per questo la struttura prevede un campo apposito,
 \val{dqb\_valid}, il cui scopo è quello di indicare quali sono gli altri campi
 che devono essere considerati validi. Questo campo è una maschera binaria che
   rispecificarli entrambi.} per questo la struttura prevede un campo apposito,
 \val{dqb\_valid}, il cui scopo è quello di indicare quali sono gli altri campi
 che devono essere considerati validi. Questo campo è una maschera binaria che
@@ -4497,9 +4497,75 @@ sovrascrivendo il contenuto di \struct{dqinfo} e marcati come validi in
 impostare, si tenga presente che i tempi dei campi \val{dqi\_bgrace} e
 \val{dqi\_igrace} devono essere specificati in secondi.
 
 impostare, si tenga presente che i tempi dei campi \val{dqi\_bgrace} e
 \val{dqi\_igrace} devono essere specificati in secondi.
 
+Come esempi dell'uso di \func{quotactl} utilizzeremo estratti del codice di un
+modulo Python usato per fornire una interfaccia diretta a \func{quotactl}
+senza dover passare dalla scansione dei risultati di un comando. Il modulo si
+trova fra i pacchetti Debian messi a disposizione da Truelite Srl,
+all'indirizzo \url{http://labs.truelite.it/projects/packages}.\footnote{in
+  particolare il codice C del modulo è nel file \texttt{quotamodule.c}
+  visionabile a partire dall'indirizzo indicato nella sezione
+  \textit{Repository}.}
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/get_quota.c}
+  \end{minipage}
+  \caption{Esempio di codice per ottenere i dati delle quote.} 
+  \label{fig:get_quota}
+\end{figure}
+
+Il primo esempio, riportato in fig.~\ref{fig:get_quota}, riporta il codice
+della funzione che consente di leggere le quote. La funzione fa uso
+dell'interfaccia dal C verso Python, che definisce i vari simboli \texttt{Py*}
+(tipi di dato e funzioni). Non staremo ad approfondire i dettagli di questa
+interfaccia, per la quale esistono numerose trattazioni dettagliate, ci
+interessa solo esaminare l'uso di \func{quotactl}. 
+
+In questo caso la funzione prende come argomenti (\texttt{\small 1}) l'intero
+\texttt{who} che indica se si vuole operare sulle quote utente o gruppo,
+l'identificatore \texttt{id} dell'utente o del gruppo scelto, ed il nome del
+file di dispositivo del filesystem su cui si sono attivate le
+quote.\footnote{questi vengono passati come argomenti dalle funzioni mappate
+  come interfaccia pubblica del modulo (una per gruppi ed una per gli utenti)
+  che si incaricano di decodificare i dati passati da una chiamata nel codice
+  Python.} Questi argomenti vengono passati direttamente alla chiamata a
+\func{quotactl} (\texttt{\small 5}), a parte \texttt{who} che viene abbinato
+con \macro{QCMD} al comando \const{Q\_GETQUOTA} per ottenere i dati.
+
+La funzione viene eseguita all'interno di un condizionale (\texttt{\small
+  5--16}) che in caso di successo provvede a costruire (\texttt{\small 6--12})
+opportunamente una risposta restituendo tramite la opportuna funzione di
+interfaccia un oggetto Python contenente i dati della struttura \struct{dqblk}
+relativi a uso corrente e limiti sia per i blocchi che per gli
+\textit{inode}. In caso di errore (\texttt{\small 13--15}) si usa un'altra
+funzione dell'interfaccia per passare il valore di \var{errno} come eccezione.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/set_block_quota.c}
+  \end{minipage}
+  \caption{Esempio di codice per impostare i limiti sullo spazio disco.}
+  \label{fig:set_block_quota}
+\end{figure}
+
+Per impostare i limiti sullo spazio disco si potrà usare una seconda funzione,
+riportata in fig.~\ref{fig:set_block_quota}, che prende gli stessi argomenti
+della precedente, con lo stesso significato, a cui si aggiungono i valori per
+il \textit{soft limit} e l'\textit{hard limit}. In questo caso occorrerà,
+prima di chiamare \func{quotactl}, inizializzare opportunamente
+(\texttt{\small 5--7}) i campi della struttura \struct{dqblk} che si vogliono
+utilizzare (quelli relativi ai limiti sui blocchi) e specificare gli stessi
+con \const{QIF\_BLIMITS} in \var{dq.dqb\_valid}. 
+
+Fatto questo la chiamata a \func{quotactl}, stavolta con il comando
+\const{Q\_SETQUOTA}, viene eseguita come in precedenza all'interno di un
+condizionale (\texttt{\small 9--14}). In questo caso non essendovi da
+restituire nessun dato in caso di successo si usa (\texttt{\small 10}) una
+apposita funzione di uscita, mentre si restituisce come prima una eccezione
+con il valore di \var{errno} in caso di errore (\texttt{\small 12--13}).
 
 
-% TODO trattare quote disco 
-% vedi man quotactl
 
 \subsection{La gestione delle \textit{capabilities}}
 \label{sec:proc_capabilities}
 
 \subsection{La gestione delle \textit{capabilities}}
 \label{sec:proc_capabilities}
@@ -4539,21 +4605,21 @@ Il meccanismo completo delle \textit{capabilities}\footnote{l'implementazione
   si rifà ad una bozza di quello che doveva diventare lo standard POSIX.1e,
   poi abbandonato.} prevede inoltre la possibilità di associare le stesse ai
 singoli file eseguibili, in modo da poter stabilire quali capacità possono
   si rifà ad una bozza di quello che doveva diventare lo standard POSIX.1e,
   poi abbandonato.} prevede inoltre la possibilità di associare le stesse ai
 singoli file eseguibili, in modo da poter stabilire quali capacità possono
-essere utilizzate quando viene messo in esecuzione uno specifico programma
-(una sorta di \acr{suid} anch'esso parcellizzato); ma il supporto per questa
-funzionalità, chiamata \textit{file capabilities}, è stato introdotto soltanto
-a partire dal kernel 2.6.24. Fino ad allora doveva essere il programma stesso
-ad eseguire una riduzione esplicita delle sue capacità, cosa che ha reso l'uso
-di questa funzionalità poco diffuso, vista la presenza di meccanismi
-alternativi per ottenere limitazioni delle capacità dell'amministratore a
-livello di sistema operativo, come \index{SELinux} SELinux.
+essere utilizzate quando viene messo in esecuzione uno specifico programma; ma
+il supporto per questa funzionalità, chiamata \textit{file capabilities}, è
+stato introdotto soltanto a partire dal kernel 2.6.24. Fino ad allora doveva
+essere il programma stesso ad eseguire una riduzione esplicita delle sue
+capacità, cosa che ha reso l'uso di questa funzionalità poco diffuso, vista la
+presenza di meccanismi alternativi per ottenere limitazioni delle capacità
+dell'amministratore a livello di sistema operativo, come \index{SELinux}
+SELinux.
 
 Con questo supporto e con le ulteriori modifiche introdotte con il kernel
 2.6.25 il meccanismo delle \textit{capabilities} è stato totalmente
 
 Con questo supporto e con le ulteriori modifiche introdotte con il kernel
 2.6.25 il meccanismo delle \textit{capabilities} è stato totalmente
-rivoluzionato, rendendolo più aderente alle intenzioni originali dello standard
-POSIX, rimuovendo il significato che fino ad allora aveva avuto la capacità
-\macro{CAP\_SETPCAP} e le modalità di funzionamento del cosiddetto
-\itindex{capabilities~bounding~set} \textit{capabilities bounding
+rivoluzionato, rendendolo più aderente alle intenzioni originali dello
+standard POSIX, rimuovendo il significato che fino ad allora aveva avuto la
+capacità \macro{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
   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
@@ -4611,23 +4677,24 @@ altri tre insiemi associabili a ciascun file.\footnote{la realizzazione viene
   \macro{CAP\_SYS\_ADMIN}.} Le \textit{file capabilities} hanno effetto
 soltanto quando il file che le porta viene eseguito come programma con una
 \func{exec}, e forniscono un meccanismo che consente l'esecuzione dello stesso
   \macro{CAP\_SYS\_ADMIN}.} Le \textit{file capabilities} hanno effetto
 soltanto quando il file che le porta viene eseguito come programma con una
 \func{exec}, e forniscono un meccanismo che consente l'esecuzione dello stesso
-con maggiori privilegi; in sostanza sono una sorta di estensione dell'uso del
-\acr{suid} di root.  Anche questi tre insiemi sono identificati con gli stessi
-nomi, ma il loro significato è diverso:
+con maggiori privilegi; in sostanza sono una sorta di estensione del
+\acr{suid} bit limitato ai privilegi di amministratore. Anche questi tre
+insiemi sono identificati con gli stessi nomi di quello dei processi, ma il
+loro significato è diverso:
 \begin{basedescript}{\desclabelwidth{2.1cm}\desclabelstyle{\nextlinelabel}}
 \item[\textit{permitted}] (chiamato originariamente \textit{forced}) l'insieme
   delle capacità che con l'esecuzione del programma verranno aggiunte alle
   capacità \textsl{permesse} del processo.
 \item[\textit{inheritable}] (chiamato originariamente \textit{allowed})
   l'insieme delle capacità che con l'esecuzione del programma possono essere
 \begin{basedescript}{\desclabelwidth{2.1cm}\desclabelstyle{\nextlinelabel}}
 \item[\textit{permitted}] (chiamato originariamente \textit{forced}) l'insieme
   delle capacità che con l'esecuzione del programma verranno aggiunte alle
   capacità \textsl{permesse} del processo.
 \item[\textit{inheritable}] (chiamato originariamente \textit{allowed})
   l'insieme delle capacità che con l'esecuzione del programma possono essere
-  ereditate dal processo originario (che cioè vengono tolte
+  ereditate dal processo originario (che cioè non vengono tolte
   dall'\textit{inheritable set} del processo originale all'esecuzione di
   \func{exec}).
 \item[\textit{effective}] in questo caso non si tratta di un insieme ma di un
   unico valore logico; se attivo all'esecuzione del programma tutte le
   capacità che risulterebbero \textsl{permesse} verranno pure attivate,
   inserendole automaticamente nelle \textsl{effettive}, se disattivato nessuna
   dall'\textit{inheritable set} del processo originale all'esecuzione di
   \func{exec}).
 \item[\textit{effective}] in questo caso non si tratta di un insieme ma di un
   unico valore logico; se attivo all'esecuzione del programma tutte le
   capacità che risulterebbero \textsl{permesse} verranno pure attivate,
   inserendole automaticamente nelle \textsl{effettive}, se disattivato nessuna
-  capacità verrà attivata (cioè l'\textit{effective set} resta vuoto).
+  capacità verrà attivata (cioè l'\textit{effective set} resterà vuoto).
 \end{basedescript}
 
 \itindbeg{capabilities~bounding~set}
 \end{basedescript}
 
 \itindbeg{capabilities~bounding~set}
@@ -4647,21 +4714,22 @@ sede di compilazione del kernel, e da sempre ha previsto come default la
 presenza di tutte le \textit{capabilities} eccetto \const{CAP\_SETPCAP}. In
 questa situazione solo il primo processo eseguito nel sistema (quello con
 \textsl{pid} 1, di norma \texttt{/sbin/init}) ha la possibilità di
 presenza di tutte le \textit{capabilities} eccetto \const{CAP\_SETPCAP}. In
 questa situazione solo il primo processo eseguito nel sistema (quello con
 \textsl{pid} 1, di norma \texttt{/sbin/init}) ha la possibilità di
-modificarlo, ogni processo eseguito successivamente, anche se eseguito con
-privilegi di amministratore,\footnote{per essere precisi occorreva la capacità
-  \const{CAP\_SYS\_MODULE}.} è in grado soltanto di rimuovere una delle
-\textit{capabilities} già presenti dell'insieme.
-
-In questo caso l'effetto del \textit{capabilities bounding set} è che solo le
-capacità in esso presenti possono essere trasmesse ad un altro programma
-attraverso una \func{exec}. Questo in sostanza significa che se si elimina da
-esso una capacità, considerato che \texttt{init} (almeno nelle versioni
-ordinarie) non supporta la reimpostazione del \textit{bounding set}, questa
-non sarà più disponibile per nessun processo a meno di un riavvio, eliminando
-così in forma definitiva quella capacità per tutti, compreso
-l'amministratore.\footnote{la qual cosa, visto il default usato per il
-  \textit{capabilities bounding set}, significa anche che \const{CAP\_SETPCAP}
-  non è stata praticamente mai usata nella sua forma originale.}
+modificarlo; ogni processo eseguito successivamente, se dotato dei privilegi
+di amministratore, è in grado soltanto di rimuovere una delle
+\textit{capabilities} già presenti dell'insieme.\footnote{per essere precisi
+  occorreva la capacità \const{CAP\_SYS\_MODULE}.}
+
+In questo caso l'effetto complessivo del \textit{capabilities bounding set} è
+che solo le capacità in esso presenti possono essere trasmesse ad un altro
+programma attraverso una \func{exec}. Questo in sostanza significa che se un
+qualunque programma elimina da esso una capacità, considerato che
+\texttt{init} (almeno nelle versioni ordinarie) non supporta la reimpostazione
+del \textit{bounding set}, questa non sarà più disponibile per nessun processo
+a meno di un riavvio, eliminando così in forma definitiva quella capacità per
+tutti, compreso l'amministratore.\footnote{la qual cosa, visto il default
+  usato per il \textit{capabilities bounding set}, significa anche che
+  \const{CAP\_SETPCAP} non è stata praticamente mai usata nella sua forma
+  originale.}
 
 Con il kernel 2.6.25 e le \textit{file capabilities} il \textit{bounding set}
 è diventato una proprietà di ciascun processo, che viene propagata invariata
 
 Con il kernel 2.6.25 e le \textit{file capabilities} il \textit{bounding set}
 è diventato una proprietà di ciascun processo, che viene propagata invariata
@@ -4675,14 +4743,14 @@ ruolo analogo al precedente nel passaggio attraverso una \func{exec}, come
 limite alle capacità che possono essere aggiunte al processo in quanto
 presenti nel \textit{permitted set} del programma messo in esecuzione, in
 sostanza il nuovo programma eseguito potrà ricevere una capacità presente nel
 limite alle capacità che possono essere aggiunte al processo in quanto
 presenti nel \textit{permitted set} del programma messo in esecuzione, in
 sostanza il nuovo programma eseguito potrà ricevere una capacità presente nel
-suo \textit{permitted set} solo se questa è anche nel \textit{bounding
-  set}. In questo modo si possono rimuovere definitivamente certe capacità da
-un processo, anche qualora questo dovesse eseguire un programma
-privilegiato. 
+suo \textit{permitted set} (quello del file) solo se questa è anche nel
+\textit{bounding set} (del processo). In questo modo si possono rimuovere
+definitivamente certe capacità da un processo, anche qualora questo dovesse
+eseguire un programma privilegiato che prevede di riassegnarle.
 
 Si tenga presente però che in questo caso il \textit{bounding set} blocca
 esclusivamente le capacità indicate nel \textit{permitted set} del programma
 
 Si tenga presente però che in questo caso il \textit{bounding set} blocca
 esclusivamente le capacità indicate nel \textit{permitted set} del programma
-che verrebbero attivate in caso di esecuzione, non quelle eventualmente già
+che verrebbero attivate in caso di esecuzione, non quelle eventualmente già
 presenti nell'\textit{inheritable set} del processo (ad esempio perché
 presenti prima di averle rimosse dal \textit{bounding set}). In questo caso
 eseguendo un programma che abbia anche lui dette capacità nel suo
 presenti nell'\textit{inheritable set} del processo (ad esempio perché
 presenti prima di averle rimosse dal \textit{bounding set}). In questo caso
 eseguendo un programma che abbia anche lui dette capacità nel suo
@@ -4690,43 +4758,193 @@ eseguendo un programma che abbia anche lui dette capacità nel suo
 
 In questa seconda versione inoltre il \textit{bounding set} costituisce anche
 un limite per le capacità che possono essere aggiunte all'\textit{inheritable
 
 In questa seconda versione inoltre il \textit{bounding set} costituisce anche
 un limite per le capacità che possono essere aggiunte all'\textit{inheritable
-  set} del processo con \func{capset}, sempre nel senso che queste devono
-essere presenti nel \textit{bounding set} oltre che nel \textit{permitted set}
-del processo.
-\itindend{capabilities~bounding~set}
+  set} del processo stesso con \func{capset}, sempre nel senso che queste
+devono essere presenti nel \textit{bounding set} oltre che nel
+\textit{permitted set} del processo. Questo limite vale anche per processi con
+i privilegi di amministratore,\footnote{si tratta sempre di avere la
+  \textit{capability} \const{CAP\_SETPCAP}.} per i quali invece non vale la
+condizione che le \textit{capabilities} da aggiungere nell'\textit{inheritable
+  set} debbano essere presenti nel proprio \textit{permitted set}.\footnote{lo
+  scopo anche in questo caso è ottenere una rimozione definitiva della
+  possibilità di passare una capacità rimossa dal \textit{bounding set}.}
+
 Come si può notare per fare ricorso alle \textit{capabilities} occorre
 comunque farsi carico di una notevole complessità di gestione, aggravata dalla
 presenza di una radicale modifica del loro funzionamento con l'introduzione
 delle \textit{file capabilities}. Considerato che il meccanismo originale era
 incompleto e decisamente problematico nel caso di programmi che non ne
 Come si può notare per fare ricorso alle \textit{capabilities} occorre
 comunque farsi carico di una notevole complessità di gestione, aggravata dalla
 presenza di una radicale modifica del loro funzionamento con l'introduzione
 delle \textit{file capabilities}. Considerato che il meccanismo originale era
 incompleto e decisamente problematico nel caso di programmi che non ne
-sappiano tener conto,\footnote{si ebbe un grosso problema di sicurezza con
+sapessero tener conto,\footnote{c'è stato un grosso problema di sicurezza con
   \texttt{sendmail}, riuscendo a rimuovere \const{CAP\_SETGID}
   \texttt{sendmail}, riuscendo a rimuovere \const{CAP\_SETGID}
-  dall'\textit{inheritable set} si ottenne di far fallire una \func{setuid},
-  in maniera inaspettata per il programma (che aspettandosi il successo della
-  funzione non ne controllava lo stato di uscita) con la conseguenza di
-  effettuare come amministratore operazioni che altrimenti sarebbero state
-  eseguite, senza poter apportare danni, da utente normale.}  ci soffermeremo
-solo sulla implementazione completa presente a partire dal kernel 2.6.25,
-tralasciando ulteriori dettagli riguardo la versione precedente.
-
-
-
-Quando un programma viene messo in esecuzione\footnote{cioè quando viene
-  eseguita la \func{execve} con cui lo si lancia; in corrispondenza di una
-  \func{fork} le \textit{capabilities} non vengono modificate.} esso eredita
-(nel senso che assume negli insiemi \textit{effective} e \textit{permitted})
-le \textit{capabilities} mantenute nell'insieme \textit{inherited}, a meno che
-non sia eseguito un programma \acr{suid} di root o la \func{exec} sia stata
-eseguita da un programma con \textsl{uid} reale zero; in tal caso il programma
-ottiene tutte le \textit{capabilities} presenti nel \textit{capabilities
-  bounding set}. In questo modo si può far si che ad un processo eseguito in
-un secondo tempo possano essere trasmesse solo un insieme limitato di
-capacità, impedendogli di recuperare quelle assenti nell'insieme
-\textit{inherited}. Si tenga presente invece che attraverso una \func{fork}
-vengono mantenute le stesse capacità del processo padre.
+  dall'\textit{inheritable set} di un processo si ottenne di far fallire
+  \func{setuid} in maniera inaspettata per il programma (che aspettandosi
+  sempre il successo della funzione non ne controllava lo stato di uscita) con
+  la conseguenza di effettuare come amministratore operazioni che altrimenti
+  sarebbero state eseguite, senza poter apportare danni, da utente normale.}
+ci soffermeremo solo sulla implementazione completa presente a partire dal
+kernel 2.6.25, tralasciando ulteriori dettagli riguardo la versione
+precedente.
+
+Riassumendo le regole finora illustrate tutte le \textit{capabilities} vengono
+ereditate senza modifiche attraverso una \func{fork} mentre, indicati con
+\texttt{orig\_*} i valori degli insiemi del processo chiamante, con
+\texttt{file\_*} quelli del file eseguito e con \texttt{bound\_set} il
+\textit{capabilities bounding set}, dopo l'invocazione di \func{exec} il
+processo otterrà dei nuovi insiemi di capacità \texttt{new\_*} secondo la
+formula (espressa in pseudo-codice C) di fig.~\ref{fig:cap_across_exec}; si
+noti come in particolare il \textit{capabilities bounding set} non viene
+comunque modificato e resta lo stesso sia attraverso una \func{fork} che
+attraverso una \func{exec}.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{12cm}
+    \includecodesnip{listati/cap-results.c}
+  \end{minipage}
+  \caption{Espressione della modifica delle \textit{capabilities} attraverso
+    una \func{exec}.}
+  \label{fig:cap_across_exec}
+\end{figure}
 
 
+\itindend{capabilities~bounding~set}
+
+A queste regole se ne aggiungono delle altre che servono a riprodurre il
+comportamento tradizionale di un sistema unix-like in tutta una serie di
+circostanze. La prima di queste è relativa a quello che avviene quando si
+esegue un file senza \textit{capabilities}; se infatti si considerasse questo
+equivalente al non averne assegnata alcuna, non essendo presenti capacità né
+nel \textit{permitted set} né nell'\textit{inheritable set} del file,
+nell'esecuzione di un qualunque programma l'amministratore perderebbe tutti i
+privilegi originali dal processo.
+
+Per questo motivo se un programma senza \textit{capabilities} assegnate viene
+eseguito da un processo con \textit{real user-ID} 0, esso verrà trattato come
+se tanto il \textit{permitted set} che l'\textit{inheritable set} fossero con
+tutte le \textit{capabilities} abilitate, con l'\textit{effective set} attivo,
+col risultato di fornire comunque al processo tutte le capacità presenti nel
+proprio \textit{bounding set}. Lo stesso avviene quando l'eseguibile ha attivo
+il \acr{suid} bit ed appartiene all'amministratore, in entrambi i casi si
+riesce così a riottenere il comportamento classico di un sistema unix-like.
+
+Una seconda circostanza è quella relativa a cosa succede alle
+\textit{capabilities} di un processo nelle possibili transizioni da
+\textit{user-ID} nullo a \textit{user-ID} non nullo o viceversa (corrispondenti
+rispettivamente a cedere o riottenere i i privilegi di amministratore) che si
+possono effettuare con le varie funzioni viste in
+sez.~\ref{sec:proc_setuid}. In questo caso la casistica è di nuovo alquanto
+complessa, considerata anche la presenza dei diversi gruppi di identificatori
+illustrati in tab.~\ref{tab:proc_uid_gid}, si avrà allora che:
+\begin{enumerate*}
+\item se si passa da \textit{effective user-ID} nullo a non nullo
+  l'\textit{effective set} del processo viene totalmente azzerato, se
+  viceversa si passa da \textit{effective user-ID} non nullo a nullo il
+  \textit{permitted set} viene copiato nell'\textit{effective set};
+\item se si passa da \textit{file system user-ID} nullo a non nullo verranno
+  cancellate dall'\textit{effective set} del processo tutte le capacità
+  attinenti i file, e cioè \const{CAP\_LINUX\_IMMUTABLE}, \const{CAP\_MKNOD},
+  \const{CAP\_DAC\_OVERRIDE}, \const{CAP\_DAC\_READ\_SEARCH},
+  \const{CAP\_MAC\_OVERRIDE}, \const{CAP\_CHOWN}, \const{CAP\_FSETID} e
+  \const{CAP\_FOWNER} (le prime due a partire dal kernel 2.2.30), nella
+  transizione inversa verranno invece inserite nell'\textit{effective set}
+  quelle capacità della precedente lista che sono presenti nel suo
+  \textit{permitted set}.
+\item se come risultato di una transizione riguardante gli identificativi dei
+  gruppi \textit{real}, \textit{saved} ed \textit{effective} in cui si passa
+  da una situazione in cui uno di questi era nullo ad una in cui sono tutti
+  non nulli,\footnote{in sostanza questo è il caso di quando si chiama
+    \func{setuid} per rimuovere definitivamente i privilegi di amministratore
+    da un processo.} verranno azzerati completamente sia il \textit{permitted
+    set} che l'\textit{effective set}.
+\end{enumerate*}
+\label{sec:capability-uid-transition}
+
+La combinazione di tutte queste regole consente di riprodurre il comportamento
+ordinario di un sistema di tipo Unix tradizionale, ma può risultare
+problematica qualora si voglia passare ad una configurazione di sistema
+totalmente basata sull'applicazione delle \textit{capabilities}; in tal caso
+infatti basta ad esempio eseguire un programma con \acr{suid} bit di proprietà
+dell'amministratore per far riottenere ad un processo tutte le capacità
+presenti nel suo \textit{bounding set}, anche se si era avuta la cura di
+cancellarle dal \textit{permitted set}.
+
+\itindbeg{securebits}
+
+Per questo motivo a partire dal kernel 2.6.26, se le \textit{file
+  capabilities} sono abilitate, ad ogni processo viene stata associata una
+ulteriore maschera binaria, chiamata \textit{securebits flags}, il cui sono
+mantenuti una serie di flag (vedi tab.~\ref{tab:securebits_values}) il cui
+valore consente di modificare queste regole speciali che si applicano ai
+processi con \textit{user-ID} nullo. La maschera viene sempre mantenuta
+attraverso una \func{fork}, mentre attraverso una \func{exec} viene sempre
+cancellato il flag \const{SECURE\_KEEP\_CAPS}.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|p{10cm}|}
+    \hline
+    \textbf{Flag} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{SECURE\_KEEP\_CAPS}& Il processo non subisce la cancellazione delle
+                                sue \textit{capabilities} quando tutti i suoi
+                                \textit{user-ID} passano ad un valore non
+                                nullo (regola di compatibilità per il cambio
+                                di \textit{user-ID} n. 3 del precedente
+                                elenco), sostituisce il precedente uso
+                                dell'operazione \const{PR\_SET\_KEEPCAPS} di
+                                \func{prctl}.\\
+    \const{SECURE\_NO\_SETUID\_FIXUP}&Il processo non subisce le modifiche
+                                delle sue \textit{capabilities} nel passaggio
+                                da nullo a non nullo degli  \textit{user-ID}
+                                dei gruppi \textit{effective} e
+                                \textit{file system} (regole di compatibilità
+                                per il cambio di \textit{user-ID} nn. 1 e 2 del
+                                precedente elenco).\\
+    \const{SECURE\_NOROOT}    & Il processo non assume nessuna capacità
+                                aggiuntiva quando esegue un programma, anche
+                                se ha \textit{user-ID} nullo o il programma ha
+                                il \acr{suid} bit attivo ed appartiene
+                                all'amministratore (regola di compatibilità
+                                per l'esecuzione di programmi senza
+                                \textit{capabilities}).\\
+    \hline
+  \end{tabular}
+  \caption{Costanti identificative dei flag che compongono la maschera dei
+    \textit{securebits}.}  
+  \label{tab:securebits_values}
+\end{table}
+
+A ciascuno dei flag di tab.~\ref{tab:securebits_values} è inoltre abbinato un
+corrispondente flag di blocco, identificato da una costante omonima con
+l'estensione \texttt{\_LOCKED}, la cui attivazione è irreversibile ed ha
+l'effetto di rendere permanente l'impostazione corrente del corrispondente
+flag ordinario; in sostanza con \const{SECURE\_KEEP\_CAPS\_LOCKED} si rende
+non più modificabile \const{SECURE\_KEEP\_CAPS}, ed analogamente avviene con
+\const{SECURE\_NO\_SETUID\_FIXUP\_LOCKED} per
+\const{SECURE\_NO\_SETUID\_FIXUP} e con \const{SECURE\_NOROOT\_LOCKED} per
+\const{SECURE\_NOROOT}.
+
+Per l'impostazione di questi flag sono stata predisposte due specifiche
+operazioni di \func{prctl} (vedi sez.~\ref{sec:process_prctl}),
+\const{PR\_GET\_SECUREBITS}, che consente di ottenerne il valore, e
+\const{PR\_SET\_SECUREBITS}, che consente di modificarne il valore; per
+quest'ultima sono comunque necessari i privilegi di amministratore ed in
+particolare la capacità \const{CAP\_SETPCAP}. Prima dell'introduzione dei
+\textit{securebits} era comunque possibile ottenere lo stesso effetto di
+\const{SECURE\_KEEP\_CAPS} attraverso l'uso di un'altra operazione di
+\func{prctl}, \const{PR\_SET\_KEEPCAPS}.
+
+\itindend{securebits}
+
+Oltre alla gestione dei \textit{securebits} la nuova versione delle
+\textit{file capabilities} prevede l'uso di \func{prctl} anche per la gestione
+del \textit{capabilities bounding set}, attraverso altre due operazioni
+dedicate, \const{PR\_CAPBSET\_READ} per controllarne il valore e
+\const{PR\_CAPBSET\_DROP} per modificarlo; quest'ultima di nuovo è una
+operazione privilegiata che richiede la capacità \const{CAP\_SETPCAP} e che,
+come indica chiaramente il nome, permette solo la rimozione di una
+\textit{capability} dall'insieme; per i dettagli sull'uso di tutte queste
+operazioni si rimanda alla rilettura di sez.~\ref{sec:process_prctl}.
 
 % TODO verificare per process capability bounding set, vedi:
 %  http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3b7391de67da515c91f48aa371de77cb6cc5c07e
 
 % TODO verificare per process capability bounding set, vedi:
 %  http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3b7391de67da515c91f48aa371de77cb6cc5c07e
@@ -4845,13 +5063,11 @@ che è opportuno dettagliare maggiormente.
     \const{CAP\_SETPCAP}    & La capacità di modifiche privilegiate alle
                               \textit{capabilities}.\\   
     \const{CAP\_SYS\_ADMIN} & La capacità di eseguire una serie di compiti
     \const{CAP\_SETPCAP}    & La capacità di modifiche privilegiate alle
                               \textit{capabilities}.\\   
     \const{CAP\_SYS\_ADMIN} & La capacità di eseguire una serie di compiti
-                              amministrativi. \\
+                              amministrativi.\\
     \const{CAP\_SYS\_BOOT}  & La capacità di fare eseguire un riavvio del
     \const{CAP\_SYS\_BOOT}  & La capacità di fare eseguire un riavvio del
-                              sistema.\\
-% TODO trattare reboot e kexec 
+                              sistema (vedi sez.~\ref{sec:sys_reboot}).\\
     \const{CAP\_SYS\_CHROOT}& La capacità di eseguire la funzione
     \const{CAP\_SYS\_CHROOT}& La capacità di eseguire la funzione
-                              \func{chroot} (vedi
-                              sez.~\ref{sec:file_chroot}).\\
+                              \func{chroot} (vedi sez.~\ref{sec:file_chroot}).\\
     \const{CAP\_MAC\_ADMIN} & La capacità amministrare il \textit{Mandatory
                                Access Control} di Smack (dal kernel 2.6.25).\\  
     \const{CAP\_MAC\_OVERRIDE}& La capacità evitare il  \textit{Mandatory
     \const{CAP\_MAC\_ADMIN} & La capacità amministrare il \textit{Mandatory
                                Access Control} di Smack (dal kernel 2.6.25).\\  
     \const{CAP\_MAC\_OVERRIDE}& La capacità evitare il  \textit{Mandatory
@@ -4859,16 +5075,16 @@ che è opportuno dettagliare maggiormente.
     \const{CAP\_SYS\_MODULE}& La capacità di caricare e rimuovere moduli del
                               kernel.\\ 
     \const{CAP\_SYS\_NICE}  & La capacità di modificare le varie priorità dei
     \const{CAP\_SYS\_MODULE}& La capacità di caricare e rimuovere moduli del
                               kernel.\\ 
     \const{CAP\_SYS\_NICE}  & La capacità di modificare le varie priorità dei
-                              processi.\\
+                              processi (vedi sez.~\ref{sec:proc_priority}).\\
     \const{CAP\_SYS\_PACCT} & La capacità di usare le funzioni di
                               \textit{accounting} dei processi (vedi
                               sez.~\ref{sec:sys_bsd_accounting}).\\ 
     \const{CAP\_SYS\_PTRACE}& La capacità di tracciare qualunque processo con
                               \func{ptrace} (vedi 
     \const{CAP\_SYS\_PACCT} & La capacità di usare le funzioni di
                               \textit{accounting} dei processi (vedi
                               sez.~\ref{sec:sys_bsd_accounting}).\\ 
     \const{CAP\_SYS\_PTRACE}& La capacità di tracciare qualunque processo con
                               \func{ptrace} (vedi 
-                              sez.~\ref{sec:xxx_ptrace}).\\
+                              sez.~\ref{sec:process_ptrace}).\\
     \const{CAP\_SYS\_RAWIO} & La capacità di operare sulle porte
                               di I/O con \func{ioperm} e \func{iopl} (vedi
     \const{CAP\_SYS\_RAWIO} & La capacità di operare sulle porte
                               di I/O con \func{ioperm} e \func{iopl} (vedi
-                              sez.~\ref{sec:file_io_port}).\\
+                              sez.~\ref{sec:process_io_port}).\\
     \const{CAP\_SYS\_RESOURCE}& La capacità di superare le varie limitazioni
                               sulle risorse.\\ 
     \const{CAP\_SYS\_TIME}  & La capacità di modificare il tempo di sistema
     \const{CAP\_SYS\_RESOURCE}& La capacità di superare le varie limitazioni
                               sulle risorse.\\ 
     \const{CAP\_SYS\_TIME}  & La capacità di modificare il tempo di sistema
@@ -4954,9 +5170,8 @@ assegnare classi privilegiate per lo scheduling dell'I/O (vedi
 sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo
 di file aperti,\footnote{quello indicato da \procfile{/proc/sys/fs/file-max}.}
 effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi
 sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo
 di file aperti,\footnote{quello indicato da \procfile{/proc/sys/fs/file-max}.}
 effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi
-sez.~\ref{sec:io_priority}), usare la funzione \func{lookup\_dcookie} (vedi
-sez.~\ref{sec:xxx_profiling}), usare \const{CLONE\_NEWNS} con \func{unshare},
-(vedi sez.~\ref{sec:process_clone}).
+sez.~\ref{sec:io_priority}), usare la funzione \func{lookup\_dcookie}, usare
+\const{CLONE\_NEWNS} con \func{unshare}, (vedi sez.~\ref{sec:process_clone}).
 
 Originariamente \const{CAP\_SYS\_NICE} riguardava soltanto la capacità di
 aumentare le priorità di esecuzione dei processi, come la diminuzione del
 
 Originariamente \const{CAP\_SYS\_NICE} riguardava soltanto la capacità di
 aumentare le priorità di esecuzione dei processi, come la diminuzione del
@@ -5406,14 +5621,17 @@ funzione.
 
 % TODO vedi http://lwn.net/Articles/198557/ e 
 % http://www.madore.org/~david/linux/newcaps/
 
 % TODO vedi http://lwn.net/Articles/198557/ e 
 % http://www.madore.org/~david/linux/newcaps/
-% TODO documentare prctl ...
+
 
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}
 
 % TODO introdurre nuova sezione sulle funzionalità di sicurezza avanzate, con
 
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}
 
 % TODO introdurre nuova sezione sulle funzionalità di sicurezza avanzate, con
-% dentro chroot SELinux e AppArmor ???
+% dentro chroot SELinux e AppArmor, Tomoyo, Smack, cgroup o che altro ???
+
+% inserire setns (introdotta con il 3.0, vedi http://lwn.net/Articles/407495/)
+% e le funzionalità di isolamento dei container
 
 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
 
 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
@@ -5514,10 +5732,10 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  ENOTEMPTY EBUSY mount point EINVAL soft symbolic tab symlink fig
 % LocalWords:  dangling access chdir chmod chown creat exec lchown lstat mkdir
 % LocalWords:  mkfifo mknod opendir pathconf readlink truncate path buff size
 % LocalWords:  ENOTEMPTY EBUSY mount point EINVAL soft symbolic tab symlink fig
 % LocalWords:  dangling access chdir chmod chown creat exec lchown lstat mkdir
 % LocalWords:  mkfifo mknod opendir pathconf readlink truncate path buff size
-% LocalWords:  grub bootloader grep MAXSYMLINKS cat VFS sys dirname fcntl
+% LocalWords:  grub bootloader grep MAXSYMLINKS cat VFS sys dirname fcntl tv Py
 % LocalWords:  dev umask IFREG IFBLK IFCHR IFIFO SVr sgid BSD SVID NULL from to
 % LocalWords:  stream dirent EMFILE ENFILE dirfd SOURCE fchdir readdir struct
 % LocalWords:  dev umask IFREG IFBLK IFCHR IFIFO SVr sgid BSD SVID NULL from to
 % LocalWords:  stream dirent EMFILE ENFILE dirfd SOURCE fchdir readdir struct
-% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno
+% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno ext
 % LocalWords:  name TYPE OFF RECLEN UNKNOWN REG SOCK CHR BLK type IFTODT DTTOIF
 % LocalWords:  DTYPE off reclen seekdir telldir void rewinddir closedir select
 % LocalWords:  namelist compar malloc qsort alphasort versionsort strcoll myls
 % LocalWords:  name TYPE OFF RECLEN UNKNOWN REG SOCK CHR BLK type IFTODT DTTOIF
 % LocalWords:  DTYPE off reclen seekdir telldir void rewinddir closedir select
 % LocalWords:  namelist compar malloc qsort alphasort versionsort strcoll myls
@@ -5527,40 +5745,44 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  EINTR mktemp mkstemp stlib template filename XXXXXX OpenBSD buf
 % LocalWords:  mkdtemp fstat filedes nell'header padding ISREG ISDIR ISCHR IFMT
 % LocalWords:  ISBLK ISFIFO ISLNK ISSOCK IFSOCK IFLNK IFDIR ISUID UID ISGID GID
 % LocalWords:  EINTR mktemp mkstemp stlib template filename XXXXXX OpenBSD buf
 % LocalWords:  mkdtemp fstat filedes nell'header padding ISREG ISDIR ISCHR IFMT
 % LocalWords:  ISBLK ISFIFO ISLNK ISSOCK IFSOCK IFLNK IFDIR ISUID UID ISGID GID
-% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH 
-% LocalWords:  blocks blksize holes lseek TRUNC ftruncate ETXTBSY length
+% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH  OLD
+% LocalWords:  blocks blksize holes lseek TRUNC ftruncate ETXTBSY length QCMD
 % LocalWords:  hole atime read utime mtime write ctime modification leafnode cp
 % LocalWords:  make fchmod fchown utimbuf times actime modtime Mac owner uid fs
 % LocalWords:  gid Control List patch mandatory control execute group other all
 % LocalWords:  hole atime read utime mtime write ctime modification leafnode cp
 % LocalWords:  make fchmod fchown utimbuf times actime modtime Mac owner uid fs
 % LocalWords:  gid Control List patch mandatory control execute group other all
-% LocalWords:  effective passwd IGID locking swap saved text IRWXU IRWXG
-% LocalWords:  IRWXO capability FSETID mask capabilities chroot jail
-% LocalWords:  FTP filter Attributes Solaris FreeBSD libacl hash at
+% LocalWords:  effective passwd IGID locking swap saved text IRWXU IRWXG subcmd
+% LocalWords:  IRWXO capability FSETID mask capabilities chroot jail QUOTAOFF
+% LocalWords:  FTP filter Attributes Solaris FreeBSD libacl hash at dqblk SYNC
 % LocalWords:  XFS SELinux namespace attribute security trusted Draft Modules
 % LocalWords:  attributes mime ADMIN FOWNER libattr lattr getxattr lgetxattr of
 % LocalWords:  fgetxattr attr ssize ENOATTR ENOTSUP NUL setxattr lsetxattr list
 % LocalWords:  fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by
 % LocalWords:  XFS SELinux namespace attribute security trusted Draft Modules
 % LocalWords:  attributes mime ADMIN FOWNER libattr lattr getxattr lgetxattr of
 % LocalWords:  fgetxattr attr ssize ENOATTR ENOTSUP NUL setxattr lsetxattr list
 % LocalWords:  fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by
-% LocalWords:  removexattr lremovexattr fremovexattr attributename acl
+% LocalWords:  removexattr lremovexattr fremovexattr attributename acl GETINFO
 % LocalWords:  OBJ setfacl len any prefix separator options NUMERIC IDS SMART
 % LocalWords:  INDENT major number IDE Documentation makedev proc copy LNK long
 % LocalWords:  euidaccess eaccess delete def tag qualifier permset calendar NOW
 % LocalWords:  mutt noatime relatime strictatime atim nsec mtim ctim atimensec
 % LocalWords:  OBJ setfacl len any prefix separator options NUMERIC IDS SMART
 % LocalWords:  INDENT major number IDE Documentation makedev proc copy LNK long
 % LocalWords:  euidaccess eaccess delete def tag qualifier permset calendar NOW
 % LocalWords:  mutt noatime relatime strictatime atim nsec mtim ctim atimensec
-% LocalWords:  mtimensec utimes timeval futimes lutimes ENOSYS futimens OMIT
+% LocalWords:  mtimensec utimes timeval futimes lutimes ENOSYS futimens OMIT PR
 % LocalWords:  utimensat timespec sec futimesat LIDS DAC OVERRIDE SEARCH chattr
 % LocalWords:  Discrectionary KILL SETGID domain SETUID setuid setreuid SETPCAP
 % LocalWords:  setresuid setfsuid IMMUTABLE immutable append only BIND SERVICE
 % LocalWords:  BROADCAST broadcast multicast multicasting RAW PACKET IPC LOCK
 % LocalWords:  memory mlock mlockall shmctl mmap MODULE RAWIO ioperm iopl PACCT
 % LocalWords:  utimensat timespec sec futimesat LIDS DAC OVERRIDE SEARCH chattr
 % LocalWords:  Discrectionary KILL SETGID domain SETUID setuid setreuid SETPCAP
 % LocalWords:  setresuid setfsuid IMMUTABLE immutable append only BIND SERVICE
 % LocalWords:  BROADCAST broadcast multicast multicasting RAW PACKET IPC LOCK
 % LocalWords:  memory mlock mlockall shmctl mmap MODULE RAWIO ioperm iopl PACCT
-% LocalWords:  PTRACE ptrace accounting NICE RESOURCE TTY CONFIG hangup vhangup
-% LocalWords:  LEASE lease SETFCAP AUDIT permitted inherited inheritable AND
+% LocalWords:  ptrace accounting NICE RESOURCE TTY CONFIG hangup vhangup dell'
+% LocalWords:  LEASE lease SETFCAP AUDIT permitted inherited inheritable AND nn
 % LocalWords:  bounding execve fork capget capset header hdrp datap ESRCH undef
 % LocalWords:  version libcap lcap clear ncap caps pag capgetp CapInh CapPrm
 % LocalWords:  bounding execve fork capget capset header hdrp datap ESRCH undef
 % LocalWords:  version libcap lcap clear ncap caps pag capgetp CapInh CapPrm
-% LocalWords:  fffffeff CapEff getcap scheduling lookup 
+% LocalWords:  fffffeff CapEff getcap scheduling lookup  dqinfo SETINFO GETFMT
 % LocalWords:  NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir
 % LocalWords:  btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT
 % LocalWords:  NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir
 % LocalWords:  btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT
-% LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr
+% LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr dqb
 % LocalWords:  QUOTAON ENODEV ENOPKG ENOTBLK GETQUOTA SETQUOTA SETUSE SETQLIM
 % LocalWords:  QUOTAON ENODEV ENOPKG ENOTBLK GETQUOTA SETQUOTA SETUSE SETQLIM
-% LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME
-% LocalWords:  REALTIME securebits
+% LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME dqstats
+% LocalWords:  REALTIME securebits GETSTATS QFMT curspace curinodes btime itime
+% LocalWords:  QIF BLIMITS bhardlimit bsoftlimit ILIMITS ihardlimit isoftlimit
+% LocalWords:  INODES LIMITS USAGE valid dqi IIF BGRACE bgrace IGRACE igrace
+% LocalWords:  Python Truelite Srl quotamodule Repository who nell' dall' KEEP
+% LocalWords:  SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I
 
 %%% Local Variables: 
 %%% mode: latex
 
 %%% Local Variables: 
 %%% mode: latex