Inizio risistemazione delle capabilities.
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 12 Aug 2011 17:35:17 +0000 (17:35 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 12 Aug 2011 17:35:17 +0000 (17:35 +0000)
filedir.tex

index a9db2f9cd84baea7b9d3fb819f7b5a6259ff0076..8cd063d8a41d72ea2fc6096ba54d0f2172fd6331 100644 (file)
@@ -4188,23 +4188,40 @@ Il meccanismo completo delle \textit{capabilities}\footnote{l'implementazione
   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
   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
   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
 
 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
@@ -4212,14 +4229,16 @@ sono mantenuti i diversi insiemi di identificatori di
 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}
 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
   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
 \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
@@ -4227,23 +4246,26 @@ sez.~\ref{sec:proc_setuid}; il loro significato è il seguente:
 \label{sec:capabilities_set}
 \end{basedescript}
 
 \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
 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 pot 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.
 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.
@@ -4377,9 +4399,12 @@ che è opportuno dettagliare maggiormente.
                               \itindex{multicast} \textit{multicast}.\\ 
     \const{CAP\_NET\_RAW}   & La capacità di usare socket \texttt{RAW} e
                               \texttt{PACKET} (vedi sez.~\ref{sec:sock_type}).\\
                               \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\_ADMIN} & La capacità di eseguire una serie di compiti
                               amministrativi. \\
     \const{CAP\_SYS\_BOOT}  & La capacità di fare eseguire un riavvio del
@@ -4395,7 +4420,7 @@ 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 priorità dei
     \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}).\\ 
     \const{CAP\_SYS\_PACCT} & La capacità di usare le funzioni di
                               \textit{accounting} dei processi (vedi
                               sez.~\ref{sec:sys_bsd_accounting}).\\ 
@@ -4416,6 +4441,10 @@ che è opportuno dettagliare maggiormente.
                               del kernel, (vedi sez.~\ref{sec:sess_daemon}),
                               introdotta dal kernel 2.6.38 come capacità
                               separata da \const{CAP\_SYS\_ADMIN}.\\
                               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
     \hline
   \end{tabular}
   \caption{Le costanti che identificano le \textit{capabilities} presenti nel