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; ma
-il supporto per questa funzionalità è 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 come
-\index{SELinux} SELinux.
-
-Per gestire questo meccanismo ciascun processo porta con sé tre distinti
-insiemi di \textit{capabilities}, che vengono denominati rispettivamente
-\textit{effective}, \textit{permitted} ed \textit{inherited}. Questi insiemi
-vengono mantenuti in forma di tre diverse maschere binarie,\footnote{il kernel
- li mantiene, come i vari identificatori di sez.~\ref{sec:proc_setuid},
- all'interno della \struct{task\_struct} di ciascun processo (vedi
+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.
+
+Inoltre il meccanismo delle \textit{capabilities} è stato ulteriormente
+perfezionato nel kernel 2.6.25 rimovendo 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 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 pesantemente 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
+cui a ciascun processo sono stati associati tre distinti insiemi di
+\textit{capabilities}, denominati rispettivamente \textit{effective},
+\textit{permitted} ed \textit{inherited}. Questi insiemi vengono mantenuti in
+forma di tre diverse maschere binarie,\footnote{il kernel li mantiene, come i
+ vari identificatori di sez.~\ref{sec:proc_setuid}, all'interno della
+ \struct{task\_struct} di ciascun processo (vedi
fig.~\ref{fig:proc_task_struct}), nei tre campi \texttt{cap\_effective},
\texttt{cap\_inheritable}, \texttt{cap\_permitted} del tipo
- \texttt{kernel\_cap\_t}; questo è attualmente definito come intero a 32 bit,
- il che comporta un massimo di 32 \textit{capabilities} distinte.} in cui
-ciascun bit corrisponde ad una capacità diversa.
+ \texttt{kernel\_cap\_t}; questo era, fino al kernel 2.6.25 definito come
+ intero a 32 bit per un massimo di 32 \textit{capabilities} distinte,
+ attualmente è stato aggiornato ad un vettore in grado di mantenerne fino a
+ 64.} in cui ciascun bit corrisponde ad una capacità diversa.
L'utilizzo di tre distinti insiemi serve a fornire una interfaccia flessibile
per l'uso delle \textit{capabilities}, con scopi analoghi a quelli per cui
sez.~\ref{sec:proc_setuid}; il loro significato è il seguente:
\begin{basedescript}{\desclabelwidth{2.0cm}\desclabelstyle{\nextlinelabel}}
\item[\textit{effective}] l'insieme delle \textit{capabilities}
- ``\textsl{effettive}'', cioè di quelle che vengono effettivamente usate dal
+ ``\textsl{effettive}'', cioè di quelle che vengono effettivamente u-sate dal
kernel quando deve eseguire il controllo di accesso per le varie operazioni
compiute dal processo.
\item[\textit{permitted}] l'insieme delle \textit{capabilities}
``\textsl{permesse}'', cioè l'insieme di quelle capacità che un processo
\textsl{può} impostare come \textsl{effettive}. Se un processo cancella una
capacità da questo insieme non potrà più riassumerla (almeno che non esegua
- un programma che è \acr{suid} di root).
+ un programma che è \acr{suid} di root).\footnote{e neanche in questo caso se
+ vengono usate le estensioni introdotte con il kernel 2.6.26 che vedremo
+ più avanti.}
\item[\textit{inherited}] l'insieme delle \textit{capabilities}
``\textsl{ereditabili}'', cioè quelle che vengono trasmesse ad un nuovo
programma eseguito attraverso una chiamata ad \func{exec} (con l'eccezione
\label{sec:capabilities_set}
\end{basedescript}
-Oltre a questi tre insiemi, che sono relativi al singolo processo, il kernel
-mantiene un insieme generale 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} vengono mascherati con
-un \textsl{AND} binario del contenuto corrente del \textit{capabilities
- bounding set}, così che il nuovo processo potrà disporre soltanto delle
-capacità in esso elencate.
-
-Il \textit{capabilities bounding set} è un parametro di sistema, accessibile
-attraverso il contenuto del file \procfile{/proc/sys/kernel/cap-bound}, che per
-questa sua caratteristica consente di impostare un limite generale alle
-capacità che possono essere accordate ai vari processi. Questo valore può
+
+
+
+Fino al kernel 2.6.25 oltre a questi tre insiemi, che sono relativi al singolo
+processo, il kernel manteneva un insieme generale 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} vengono
+mascherati con un \textsl{AND} binario del contenuto corrente del
+\textit{capabilities bounding set}, così che il nuovo processo potrà disporre
+soltanto delle capacità in esso elencate.
+
+Il \textit{capabilities bounding set} era un parametro di sistema, accessibile
+attraverso il contenuto del file \procfile{/proc/sys/kernel/cap-bound}, che
+per questa sua caratteristica consentiva di impostare un limite generale alle
+capacità che possono essere accordate ai vari processi. Questo valore poteva
essere impostato ad un valore arbitrario 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 potrà soltanto rimuovere uno dei bit
+eseguito con privilegi di amministratore poteva soltanto rimuovere uno dei bit
già presenti dell'insieme: questo significa che una volta rimossa una
\textit{capability} dal \textit{capabilities bounding set} essa non sarà più
disponibile, neanche per l'amministratore, a meno di un riavvio.
\itindex{multicast} \textit{multicast}.\\
\const{CAP\_NET\_RAW} & La capacità di usare socket \texttt{RAW} e
\texttt{PACKET} (vedi sez.~\ref{sec:sock_type}).\\
- \const{CAP\_SETPCAP} & La capacità di impostare o rimuovere una
- capacità.\\
- % TODO cambiata nel 2.4.24 rc1 ?
+ \const{CAP\_SETPCAP} & Prima del 2.6.24 la capacità di impostare o
+ rimuovere le \textit{capabilities} da un
+ processo, dopo quella di impostare una capacità
+ del \textit{bounding set} nelle proprie
+ \textit{inheritable} o rimoverla dal
+ \textit{bounding set} stesso.\\
\const{CAP\_SYS\_ADMIN} & La capacità di eseguire una serie di compiti
amministrativi. \\
\const{CAP\_SYS\_BOOT} & La capacità di fare eseguire un riavvio del
\const{CAP\_SYS\_MODULE}& La capacità di caricare e rimuovere moduli del
kernel. \\
\const{CAP\_SYS\_NICE} & La capacità di modificare le priorità dei
- processi. \\
+ processi.\\
\const{CAP\_SYS\_PACCT} & La capacità di usare le funzioni di
\textit{accounting} dei processi (vedi
sez.~\ref{sec:sys_bsd_accounting}).\\
del kernel, (vedi sez.~\ref{sec:sess_daemon}),
introdotta dal kernel 2.6.38 come capacità
separata da \const{CAP\_SYS\_ADMIN}.\\
+ \const{CAP\_WAKE\_ALARM}& La capacità di usare i timer di tipo
+ \macro{CLOCK\_BOOTTIME\_ALARM} e
+ \macro{CLOCK\_REALTIME\_ALARM}, vedi
+ sez.~\ref{sec:sig_timer_adv} (dal kernel 3.0).\\
\hline
\end{tabular}
\caption{Le costanti che identificano le \textit{capabilities} presenti nel