Inserito programma per impostare l'accounting BSD, prima documentazione
[gapil.git] / prochand.tex
index f94d8635a377835f4d4ad56ff97437bc66bbb9d1..bd0cd21c848b4256530a6a3febca997e74b1d899 100644 (file)
@@ -2060,7 +2060,7 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e
 \label{tab:proc_capabilities}
 \end{table}
 
-\footnotetext[18]{questa capacità è presente soltato a partire dai kernel
+\footnotetext[21]{questa capacità è presente soltato a partire dai kernel
   della serie 2.4.x.}
 
 \footnotetext{questa capacità è presente soltato a partire dai kernel della
@@ -2089,21 +2089,20 @@ 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}
-  ``\textsl{effettive}'', cioè quelle che vengono effettivamente usate dal
-  kernel per eseguire il controllo di accesso per le operazioni compiute dal
-  processo.
+  ``\textsl{effettive}'', cioè di quelle che vengono effettivamente usate 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 che un processo \textsl{può}
-  impostare come \textsl{effettive} se ha la capacità \const{CAP\_SETPCAP}. Se
-  un processo cancella una capacità da questo insieme non potrà più
-  riassumerla (almeno che non esegua un programma che è \acr{suid} di root).
+  ``\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).
 \item[\textit{inherited}] l'insieme delle \textit{capabilities}
-  \textsl{ereditate}, cioè quelle che vengono trasmesse ad un nuovo programma
-  eseguito attraverso una chiamata ad \func{exec} (con l'eccezione del caso
-  che questo sia \acr{suid} di root).
+  ``\textsl{ereditate}'', cioè quelle che vengono trasmesse ad un nuovo
+  programma eseguito attraverso una chiamata ad \func{exec} (con l'eccezione
+  del caso che questo sia \acr{suid} di root).
 \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
@@ -2121,21 +2120,75 @@ 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 può al più rimuovere uno dei bit
-dell'insieme: questo significa che una volta rimossa da esso una
-\textit{capability} essa non sarà più disponibile, neanche per
-l'amministratore, a meno di un riavvio.
-
+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.
 
-Quando viene messo in esecuzione (con \func{exec}) un processo eredita le
+Quando viene messo in esecuzione (con \func{exec}) un processo 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}.
+  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.
+
+Per la gestione delle \textit{capabilities} Linux usa due funzioni,
+\funcd{capget} e \funcd{capset}, che permettono rispettivamente di leggerne ed
+impostarne i valori, i cui rispettivi prototipi sono:
+\begin{functions}
+  \headdecl{sys/capability.h}
+
+  \funcdecl{int capget(cap\_user\_header\_t hdrp, cap\_user\_data\_t datap)}
+  Legge le \textit{capabilities}.
+
+  \funcdecl{int capset(cap\_user\_header\_t hdrp, const cap\_user\_data\_t
+    datap)} 
+  Imposta le \textit{capabilities}.
+
+  
+  \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e -1 in caso
+    di errore, nel qual caso \var{errno} può assumere i valori:
+    \begin{errlist}
+    \item[\errcode{ESRCH}] si è fatto riferimento ad un processo inesistente.
+    \item[\errcode{EPERM}] si è tentato di aggiungere una capacità
+      nell'insieme delle \textit{capabilities} permesse, o di impostare una
+      capacità non presente nell'insieme di quelle permesse negli insieme
+      delle effettive o ereditate, o si è cercato di impostare una
+      \textit{capability} di un altro processo senza avare
+      \const{CAP\_SETPCAP}. 
+  \end{errlist}
+  ed inoltre \errval{EFAULT} ed \errval{EINVAL}}
+\end{functions}
+
+Queste due funzioni costituiscono una interfaccia di basso livello, ed usano
+due strutture specifiche di Linux, la cui definizione è riportata in
+fig.~\ref{fig:cap_kernel_struct}. Queste ultime, come le due funzioni
+precedenti, sono soggette ad essere modificate con il cambiamento del kernel
+(in particolare i tipi di dati delle strutture) ed anche se finora
+l'interfaccia è risultata stabile, 
+
 
+\begin{figure}[!htb]
+  \footnotesize
+  \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/tms.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{Le strutture specifiche di Linux per l'interfaccia di gestione di
+    basso livello delle \textit{capabilities}.}
+  \label{fig:cap_kernel_struct}
+\end{figure}
 
 
+sono definite in una apposita struttura del kernel, 
 
+Per la gestione delle \textit{capabilities} lo standard POSIX.1e prevede l'uso
+di uno specifico tipo di dato \type{cap\_t}, che