Aggiunte su euid e soci
[gapil.git] / prochand.tex
index 89f8b9812737d43bcc3bc7786bb91d7e3d344f57..07ebb358579f5375876cce2416e9ea9a80554bfc 100644 (file)
@@ -183,6 +183,7 @@ Tutti i processi inoltre memorizzano anche il \acr{pid} del genitore da cui
 sono stati creati, questo viene chiamato in genere \acr{ppid} (da
 \textit{parent process id}).  Questi due identificativi possono essere
 ottenuti da programma usando le funzioni:
+
 \begin{functions}
 \headdecl{sys/types.h}
 \headdecl{unistd.h}
@@ -206,10 +207,17 @@ Tutti i processi figli dello stesso processo padre sono detti
 \textit{sibling}, questa è una delle relazioni usate nel \textsl{controllo di
   sessione}, in cui si raggruppano i processi creati su uno stesso terminale,
 o relativi allo stesso login. Torneremo su questo argomento in dettaglio in
-\secref{cap:session}, dove esamineremo i vari identificativi associati ad un
-processo e le varie relazioni fra processi utilizzate per definire una
+\secref{cap:session}, dove esamineremo gli altri identificativi associati ad
+un processo e le varie relazioni fra processi utilizzate per definire una
 sessione.
 
+Oltre al \acr{pid} e al \acr{ppid}, e a quelli usati per il controllo di
+sessione, ad ogni processo sono associati altri identificatori, usati per il
+controllo di accesso, che servono per determinare se il processo può o meno
+eseguire le operazioni richieste, a seconda dei privilegi e dell'identità di
+chi lo ha posto in esecuzione; su questi torneremo in dettaglii più avanti in
+\secref{sec:proc_perm}.
+
 
 \subsection{La funzione \func{fork}}
 \label{sec:proc_fork}
@@ -527,10 +535,11 @@ padre e figlio avranno in comune:
 \item gli identificatori per il controllo di accesso: il \textit{real user
     id}, il \textit{real group id}, l'\textit{effective user id},
   l'\textit{effective group id} e i \textit{supplementary group id} (vedi
-  \secref{tab:proc_uid_gid}).
+  \secref{sec:proc_user_group}).
 \item gli identificatori per il controllo di sessione: il \textit{process
-    group id} e il \textit{session id} e il terminale di controllo.
-\item i flag \acr{suid} e \acr{sgid} (vedi \secref{sec:file_suid_sgid}).
+    group id} e il \textit{session id} e il terminale di controllo (vedi
+  \secref{sec:sess_xxx} e \secref{sec:sess_xxx}).
+\item i flag di \acr{suid} e \acr{sgid} (vedi \secref{sec:file_suid_sgid}).
 \item la directory di lavoro e la directory radice (vedi
   \secref{sec:file_work_dir}).
 \item la maschera dei permessi di creazione (vedi \secref{sec:file_umask}).
@@ -747,6 +756,7 @@ conclusione dei vari processi figli onde evitare di riempire di
 \textit{zombie} la tabella dei processi; le funzioni deputate a questo compito
 sono sostanzialmente due, \func{wait} e \func{waitpid}. La prima, il cui
 prototipo è:
+
 \begin{functions}
 \headdecl{sys/types.h}
 \headdecl{sys/wait.h}
@@ -781,6 +791,7 @@ che effettua lo stesso servizio, ma dispone di una serie di funzionalit
 ampie, legate anche al controllo di sessione.  Dato che è possibile ottenere
 lo stesso comportamento di \func{wait} si consiglia di utilizzare sempre
 questa funzione; il suo prototipo è:
+
 \begin{functions}
 \headdecl{sys/types.h}
 \headdecl{sys/wait.h}
@@ -975,6 +986,7 @@ versione 4.3 Reno di BSD, attualmente (con il kernel 2.4.x) i soli campi che
 sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime}, \var{ru\_minflt},
 \var{ru\_majflt}, e \var{ru\_nswap}.
 
+
 \subsection{Le funzioni \texttt{exec}}
 \label{sec:proc_exec}
 
@@ -1119,7 +1131,6 @@ indicato dal parametro \var{path}, che viene interpretato come il
   \label{fig:proc_exec_relat}
 \end{figure}
 
-
 La terza differenza è come viene passata la lista delle variabili di ambiente.
 Con lo mnemonico \func{e} vengono indicate quelle funzioni che necessitano di
 un vettore di parametri \var{envp[]} analogo a quello usato per gli argomenti
@@ -1206,45 +1217,76 @@ parametri connessi ai processi.
 \label{sec:proc_perms}
 
 In questa sezione esamineremo le problematiche relative al controllo di
-accesso dal punto di vista del processi; gli identificativi usati, come questi
-possono essere modificati nella creazione e nel lancio di nuovi processi, le
-varie funzioni per la loro manipolazione diretta e tutte le problematiche
-connesse alla gestione accorta dei privilegi.
+accesso dal punto di vista del processi; vedremo quali sono gli identificatori
+usati, come questi possono essere modificati nella creazione e nel lancio di
+nuovi processi, e le varie funzioni per la loro manipolazione diretta e tutte
+le problematiche connesse alla gestione accorta dei privilegi.
 
 
 \subsection{Utente e gruppo di un processo}
 \label{sec:proc_user_group}
 
-Come abbiamo già accennato in \secref{sec:intro_multiuser} il modello
-base\footnote{in realtà esistono estensioni di questo modello, che lo rendono
-  più flessibile e controllabile, come le \textit{capabilities}, le ACL per i
-  file o il modello a ``... NdT riprendere i dati'' di SELinux} di sicurezza
-di un sistema unix è fondato sui concetti di utente e gruppo, e sulla
-separazione fra amministratore (che può fare tutto) e resto degli
-utenti. 
+Come accennato in \secref{sec:intro_multiuser} il modello base\footnote{in
+  realtà esistono estensioni di questo modello, che lo rendono più flessibile
+  e controllabile, come le \textit{capabilities}, le ACL per i file o il
+  modello a ``... NdT riprendere i dati'' di SELinux} di sicurezza di un
+sistema unix-like è fondato sui concetti di utente e gruppo, e sulla
+separazione fra l'amministratore (\textsl{root}, detto spesso anche
+\textit{superuser}) che non è sottoposto a restrizioni, ed il resto degli
+utenti, per i quali invece vengono effettuati i vari controlli di accesso.
+
+%Benché il sistema sia piuttosto semplice (è basato su un solo livello di
+% separazione) il sistema permette una
+%notevole flessibilità, 
+
+Abbiamo già accennato come il sistema associ ad ogni utente e gruppo due
+identificatori univoci, lo \acr{uid} e il \acr{gid}; questi servono al kernel
+per identificare uno specifico utente o un gruppo di utenti, per poi poter
+controllare che essi siano autorizzati a compiere le operazioni richieste. 
 
-%Benché il sistema sia piuttosto semplice il sistema permette una
-%notevole fles
+In \secref{sec:file_access_control} vedremo ad esempio come anche ad ogni file
+vengano associati un utente ed un gruppo (i suoi \textsl{proprietari},
+indicati appunto tramite un \acr{uid} ed un \acr{gid}) che vengono controllati
+dal kernel nella gestione dei permessi di accesso. 
 
-Abbiamo già visto come i\l sistema associ ad ogni utente e gruppo due
-identificatori, lo \acr{uid} e il \acr{gid}, che li contraddistinguono e che
-sono questi quelli che vengono controllati dal kernel nella gestione di
-permessi e protezioni; in \secref{sec:file_access_control} si è visto come
-essi vengano utilizzati per il controllo di accesso ai file, vedremo ora come
-come sono usati nella gestione dei privilegi di accesso dei processi.
+Dato che tutte le operazioni del sistema vengono compiute dai processi, è
+evidente che per poter implementare un controllo sulle operazioni occorre
+anche poter identificare chi ha lanciato un certo processo, e pertanto anche a
+ciascuno di essi è associato un utente e a un gruppo. Un semplice controllo di
+una corrispondenza fra identificativi però non garantisce sufficiente
+flessibilità per tutti quei casi in cui è necessario poter disporre di
+privilegi diversi, o dover impersonare un altro utente per un limitato insieme
+di operazioni.
 
-In \secref{sec:file_perm_overview} abbiamo visto come ogni file appartenga ad
-un utente e ad un gruppo, e che il controllo di accesso viene eseguito sulla
-base del 
+Per questo motivo in generale tutti i processi hanno almeno due gruppi di
+identificatori, chiamati rispettivamente \textsl{reale} e \textsl{effettivo}.
+Al primo gruppo appartengono il \textit{real user ID} e il \textit{real group
+  ID}, che vengono settati al login ai valori corrispondenti all'utente con
+cui si accede al sistema (e relativo gruppo di default), questi normalmente
+non vengono mai cambiati.
 
-Nel caso dei processi però 
+Al secondo gruppo appartengono l'\textit{effective user ID} e
+l'\textit{effective group ID} che sono gli identificatori usati nella
+verifiche dei permessi, (ad esempio, come vedremo in
+\secref{sec:file_perm_overview} vengono usati nel controllo di accesso ai
+file). 
+
+Questi normalmente sono identici ai corrispondenti del gruppo reale tranne nel
+caso in cui (come abbiamo accennato in \secref{sec:proc_exec}) il programma
+che si è posto in esecuzione abbia i bit \acr{suid} o \acr{sgid} settati (su
+questo torneremo in maggior dettagli in \secref{sec:file_suid_sgid}) nel qual
+caso essi saranno settati all'utente e al gruppo proprietari del file.
+
+
+
+
+Oltre a questi Linux, seguendo 
+
+
+Linux inoltre, per poter rilasciare eventuali privilegi addizionali avuti con
+l'esecuzione di un programma 
 
 
-Ad ogni processo è associato un certo numero di identificatori, il cui elenco
-è riportato \ntab, in genere questi derivano direttamente dall'utente che ha
-lanciato il processo (attraverso i valori di \acr{uid} e \acr{gid}), e vengono
-usati sia per il controllo di accesso ai file che per la gestione dei
-privilegi associati ai processi stessi.
 \begin{table}[htb]
   \footnotesize
   \centering
@@ -1323,5 +1365,3 @@ l'ordine di esecuzione di un processo, senza appositi meccanismi di
 sincronizzazione, non è assolutamente prevedibile, queste situazioni sono
 fonti di errori molto subdoli, che possono verificarsi solo in condizioni
 particolari e quindi difficilmente riproducibili.
-
-