-Infine come accennato, esiste un altro insieme, il
-\itindex{capabilities~bounding~set} \textit{capabilities bounding set}, il cui
-scopo è quello di costituire un limite alle capacità che possono essere
-attivate per un processo, ma il suo significato è stato completamente
-modificato con l'introduzione delle \textit{file capabilities}.
-
-
-a meno che non sia dotato della capacità
- \macro{CAP\_SETPCAP} nel qual caso potrà, come vedremo in seguito,
- impostarne anche altre.
-
-che non esegua un programma che è \acr{suid} di root o
- che ce l'ha nelle \textit{capabilities} presenti sul file
- eseguibile.\footnote{e neanche in questo caso se vengono usate le estensioni
- introdotte con il kernel 2.6.26 che vedremo più avanti.}
-
-Fino al kernel 2.6.25 oltre a questi tre insiemi, che sono relativi al singolo
-processo, il kernel manteneva un ulteriore insieme unico valido per tutto il
-sistema, chiamato \itindex{capabilities~bounding~set} \textit{capabilities
- bounding set}. Ogni volta che un programma viene posto in esecuzione con
-\func{exec} il contenuto degli insiemi \textit{effective} e \textit{permitted}
-venivano mascherati con un \textsl{AND} binario del contenuto corrente del
-\textit{capabilities bounding set}, così che il nuovo processo potesse
-disporre soltanto delle capacità in esso elencate.
-
-A lungo il \textit{capabilities bounding set} è stato un parametro generale di
-sistema, accessibile attraverso il contenuto del file
-\procfile{/proc/sys/kernel/cap-bound}, usato per impostare un limite
-universale alle capacità che possono essere accordate ai vari processi. Il
-suo valore poteva essere impostato esclusivamente dal primo processo eseguito
-nel sistema (di norma cioè da \texttt{/sbin/init}), ogni processo eseguito
-successivamente (cioè con \textsl{pid} diverso da 1) anche se eseguito con
-privilegi di amministratore, era in grado soltanto di rimuovere uno dei bit
-già presenti dell'insieme: questo significava che tolta una
-\textit{capability} dal \textit{capabilities bounding set} questa non era più
-disponibile, neanche per l'amministratore, a meno di un riavvio.
-
-Qualora invece si sia abilitato nel kernel il supporto per le
-\textit{capabilities} dei file il \textit{capabilities bounding set} mantiene
-il suo significato di limite alle capacità che possono essere assegnate al
-processo, ma diventa una proprietà dello stesso (un quarto insieme che il
-processo si porta dietro). In questo
-
-
-
- viene a costituire un doppio limite:
-
-
+\itindbeg{capabilities~bounding~set}
+
+Infine come accennato, esiste un ulteriore insieme, chiamato
+\textit{capabilities bounding set}, il cui scopo è quello di costituire un
+limite alle capacità che possono essere attivate per un programma. Il suo
+funzionamento però è stato notevolmente modificato con l'introduzione delle
+\textit{file capabilities} e si deve pertanto prendere in considerazione una
+casistica assai complessa.
+
+Per i kernel fino al 2.6.25, o se non si attiva il supporto per le
+\textit{file capabilities}, il \textit{capabilities bounding set} è un
+parametro generale di sistema, il cui valore viene riportato nel file
+\procfile{/proc/sys/kernel/cap-bound}. Il suo valore iniziale è definito in
+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
+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 orginale.}
+
+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
+sia attraverso una \func{fork} che una \func{exec}. In questo caso il file
+\procfile{/proc/sys/kernel/cap-bound} non esiste e \texttt{init} non ha nessun
+ruolo speciale, inoltre in questo caso all'avvio il valore iniziale prevede la
+presenza di tutte le capacità (compresa \const{CAP\_SETPCAP}).
+
+Con questo nuovo meccanismo il \textit{bounding set} continua a ricoprire un
+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
+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.
+
+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à
+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
+\textit{inheritable set} queste verrebbero assegnate.
+
+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.