Si inzia con saved e filesystem (id)
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 18 Oct 2001 17:34:26 +0000 (17:34 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 18 Oct 2001 17:34:26 +0000 (17:34 +0000)
prochand.tex

index 07ebb358579f5375876cce2416e9ea9a80554bfc..66aa00272fc730855649de50dc9161cd13039f47 100644 (file)
@@ -1227,9 +1227,9 @@ le problematiche connesse alla gestione accorta dei privilegi.
 \label{sec:proc_user_group}
 
 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
+  realtà già esistono estensioni di questo modello base, che lo rendono più
+  flessibile e controllabile, come le \textit{capabilities}, le ACL per i file
+  o il \textit{Mandatory Access Control} 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
@@ -1242,62 +1242,86 @@ utenti, per i quali invece vengono effettuati i vari controlli di accesso.
 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. 
-
-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. 
+controllare che essi siano autorizzati a compiere le operazioni richieste.  Ad
+esempio in \secref{sec:file_access_control} vedremo come 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.
 
 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.
-
-Per questo motivo in generale tutti i processi hanno almeno due gruppi di
-identificatori, chiamati rispettivamente \textsl{reale} e \textsl{effettivo}.
+anche poter identificare chi è che 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 però 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. Per questo motivo in generale
+tutti gli unix prevedono che i processi abbiano almeno due gruppi di
+identificatori, chiamati rispettivamente \textit{real} ed \textit{effective}.
+
 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.
+  ID}: questi vengono settati al login ai valori corrispondenti all'utente con
+cui si accede al sistema (e relativo gruppo di default). Servono per
+l'identificazione dell'utente e normalmente non vengono mai cambiati.
 
 Al secondo gruppo appartengono l'\textit{effective user ID} e
-l'\textit{effective group ID} che sono gli identificatori usati nella
+l'\textit{effective group ID}: questi 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.
-
+\secref{sec:file_perm_overview}, vengono usati nel controllo di accesso ai
+file).
 
+Questi identificatori normalmente sono identici ai corrispondenti del gruppo
+\textsl{reale} tranne nel caso in cui, come visto in \secref{sec:proc_exec}, il
+programma che si è posto in esecuzione abbia i bit \acr{suid} o \acr{sgid}
+settati (il significato di questi bit è affrontato in dettaglio in
+\secref{sec:file_suid_sgid}). In questo caso essi saranno settati all'utente e
+al gruppo proprietari del file, questo consente, per programmi in cui ci sia
+necessità, di dare anche all'utente normale privilegi o permessi superiori.
 
+Come nel caso del \acr{pid} e del \acr{ppid} identificatori possono essere
+letti dal processo attraverso delle opportune funzioni, i cui prototipi sono i
+seguenti:
 
-Oltre a questi Linux, seguendo 
-
+\begin{functions}
+\headdecl{unistd.h}
+\headdecl{sys/types.h}
+\funcdecl{uid\_t getuid(void)} restituisce il \textit{real user ID} pid del
+processo corrente.
+\funcdecl{uid\_t geteuid(void)} restituisce l'\textit{effective user ID} del
+processo corrente.
+\funcdecl{gid\_t getgid(void)} restituisce il \textit{real group ID} del
+processo corrente.
+\funcdecl{gid\_t getegid(void)} restituisce l'\textit{effective group ID} del
+processo corrente.
+
+Queste funzioni non riportano condizioni di errore. 
+\end{functions}
 
-Linux inoltre, per poter rilasciare eventuali privilegi addizionali avuti con
-l'esecuzione di un programma 
+Dato che in generale l'uso di privilegi superiori deve essere limitato il più
+possibile, per evitare abusi e creare problemi di sicurezza, occorre anche un
+meccanismo che provveda a rilasciare gli eventuali maggiori privilegi una
+volta che si siano effettuate le operazioni per i quali erano richiesti, per
+poterli eventualmente recuperare all'occorrenza.
 
+Questo in Linux viene fatto usando altri due gruppi di identificatori, il
+\textit{saved} ed il \textit{filesystem}, analoghi ai precedenti, e riportati
+nello specchietto di tutti gli identificatori di utente e gruppo fornito in
+\ntab. Il primo gruppo è lo stesso usato in SVr4, e previsto dallo standard
+POSIX quando è definita la costante \macro{\_POSIX\_SAVED\_IDS}, il secondo
+gruppo è specifico di Linux e viene usato per migliorare la sicurezza con NFS.
 
 \begin{table}[htb]
   \footnotesize
   \centering
   \begin{tabular}[c]{|c|l|p{8cm}|}
     \hline
-    \textbf{Sigla} & \textbf{Significato} & \textbf{Utilizzo} \\ 
+    \textbf{Suffisso} & \textbf{Significato} & \textbf{Utilizzo} \\ 
     \hline
     \hline
-    \acr{ruid} & \textit{real user id} & indica l'utente reale che ha lanciato
+    \acr{uid} & \textit{real user id} & indica l'utente reale che ha lanciato
     il programma\\ 
-    \acr{rgid} & \textit{real group id} & indica il gruppo reale dell'utente 
+    \acr{gid} & \textit{real group id} & indica il gruppo reale dell'utente 
     che ha lanciato il programma \\ 
     \acr{euid} & \textit{effective user id} & indica l'utente effettivo usato
     dal programma \\ 
@@ -1305,15 +1329,16 @@ l'esecuzione di un programma
     dal programma \\ 
                & \textit{supplementary group id} & indica i gruppi cui
     l'utente appartiene  \\ 
-    \acr{suid} & \textit{saved user id} & indica l'utente  \\ 
-    \acr{sgid} & \textit{saved group id} & indica il gruppo  \\ 
+    --   & \textit{saved user id} & indica l'utente  \\ 
+    --   & \textit{saved group id} & indica il gruppo  \\ 
     \acr{fsuid} & \textit{filesystem user id} & indica l'utente effettivo per
     il filesystem \\ 
     \acr{fsgid} & \textit{filesystem group id} & indica il gruppo effettivo
     per il filesystem  \\ 
     \hline
   \end{tabular}
-  \caption{Identificatori di utente e gruppo associati a ciascun processo.}
+  \caption{Identificatori di utente e gruppo associati a ciascun processo con
+    indicazione dei suffissi usate dalle varie funzioni di manipolazione.}
   \label{tab:proc_uid_gid}
 \end{table}