From: Simone Piccardi Date: Thu, 18 Oct 2001 17:34:26 +0000 (+0000) Subject: Si inzia con saved e filesystem (id) X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=94a3cc760eb536673f79b662580f1ff9107c9a99;p=gapil.git Si inzia con saved e filesystem (id) --- diff --git a/prochand.tex b/prochand.tex index 07ebb35..66aa002 100644 --- a/prochand.tex +++ b/prochand.tex @@ -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}