From dc5d6dd815d1aeac2f42891ec2f0a3f38c816ac1 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 22 Jul 2001 07:48:20 +0000 Subject: [PATCH] Aggiunti suid e sgid --- filedir.tex | 135 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 92 insertions(+), 43 deletions(-) diff --git a/filedir.tex b/filedir.tex index bd30e90..db9c352 100644 --- a/filedir.tex +++ b/filedir.tex @@ -129,17 +129,19 @@ Per poter eseguire un file (che sia un programma compilato od uno script di shell), occorre il permesso di esecuzione per il medesimo, inoltre solo i file regolari possono essere eseguiti. - La procedura con cui il kernel stabilisce se un processo possiede un certo permesso (di lettura, scrittura o esecuzione) si basa sul confronto fra l'utente e il gruppo a cui il file appartiene (i valori di \var{st\_uid} e \var{st\_gid} accennati in precedenza) e l'\textit{effective user id}, l'\textit{effective group id} e gli eventuali \textit{supplementary group id} -del processo (per una spiegazione dettagliata degli ID dei processi si veda -\secref{sec:prochand_perms}; normalmente, a parte quanto spiegato in -\secref{sec:filedir_suid_sgid}, essi corrispondono all'uid e al gid -dell'utente che ha lanciato il processo). +del processo. +Per una spiegazione dettagliata degli identificatori associati ai processi si +veda \secref{sec:prochand_perms}; normalmente, a parte quanto vedremo in +\secref{sec:filedir_suid_sgid}, l'\textit{effective user id} e +l'\textit{effective group id} corrispondono a uid e gid dell'utente che ha +lanciato il processo, mentre i \textit{supplementary group id} sono quelli dei +gruppi cui l'utente appartiene. % Quando un processo cerca l'accesso al file esso controlla i propri uid e gid % confrontandoli con quelli del file e se l'operazione richiesta è compatibile @@ -162,8 +164,8 @@ di accesso sono i seguenti: controllo. Per questo motivo \textsl{root} ha piena libertà di accesso a tutti i file. \item Se l'\textit{effective user id} del processo è uguale all'uid del - proprietario del file (che nel caso più comune significa che chi ha lanciato - il processo è il proprietario del file) allora: + proprietario del file (nel qual caso si dice che il processo è proprietario + del file) allora: \begin{itemize} \item se il relativo\footnote{per relativo si intende il bit di user-read se il processo, vuole accedere in scrittura, quello di user-write per @@ -172,14 +174,60 @@ di accesso sono i seguenti: \item altrimenti l'accesso è negato \end{itemize} \item Se l'\textit{effective group id} del processo o uno dei - \textit{supplementary group id} dei processi. + \textit{supplementary group id} dei processi corrispondono al gid del file + allora: + \begin{itemize} + \item se il bit dei permessi d'accesso del gruppo è settato, l'accesso è + consentito, altrimenti l'accesso è negato + \end{itemize} +\item se il bit dei permessi d'accesso per tutti gli altri è settato, + l'accesso è consentito, altrimenti l'accesso è negato. \end{itemize} -questi passi vengono eseguiti in quest'ordine, qualora si abbia il permesso -d'accesso la scansione viene terminata. + +Si tenga presente che questi passi vengono eseguiti esattamente in +quest'ordine. Questo vuol dire che se un processo è il proprietario di un file +l'accesso è consentito o negato solo sulla base dei permessi per l'utente; i +permessi per il gruppo non vengono neanche controllati; lo stesso vale se il +processo appartiene ad un gruppo appropriato, in questo caso i permessi per +tutti gli altri non vengono controllati. \subsection{I flag \texttt{suid} e \texttt{sgid}} \label{sec:filedir_suid_sgid} +Quandi si lancia un programma in genere l'\textit{effective user id} e +l'\textit{effective group id} sono settati rispettivamente all'uid e al gid +dell'utente che ha lanciato il programma. + + +Ma nei dodici bit del campo \var{st\_mode} relativi ai permessi esiste un bit +speciale, il \textit{set-user-ID bit} o suid, che se settato fa si che quando +un programma viene lanciato invece di avere assegnato come \textit{effective + user id} l'uid di chi lo lancia, assume quello del proprietario del file. +Analogamente il \textit{set-group-ID bit} o sgid settato per un file ha lo +stesso effetto sull'\textit{effective group id}. + +Questa caratteristica viene usata per permettere agli utenti normali di usare +programmi che abbisognano di privilegi speciali; l'esempio classico è il +comando \cmd{passwd} che ha la necessità di modificare il file delle password, +che può essere scritto solo dall'amministratore. Per questo il comando +\cmd{passwd} appartiene a root e ha il suid bit settato per cui quando viene +lanciato da un utente normale ha comunque i privilegi di root. + +Chiaramente avere un processo che ha privilegi superiori a quelli che avrebbe +normalmente un utente comporta vari rischi, e questo tipo di programmi devono +essere scritti accuratamente (torneremo sull'argomento in +\secref{sec:prochand_perms}). + +I due bit suid e sgid possono essere controllati all'interno di \var{st\_mode} +con l'uso delle due costanti \macro{S\_ISUID} e \macro{S\_ISGID}, definite in +\tabref{tab:filedir_file_mode_flags}. + + +\subsection{Il flag \texttt{sticky}} +\label{sec:filedir_sticky} + +L'ultimo + \subsection{La titolarità di nuovi files e directory} \label{sec:filedir_ownership} @@ -195,9 +243,6 @@ d'accesso la scansione viene terminata. \subsection{Le funzioni \texttt{chmod} e \texttt{fchmod}} \label{sec:filedir_chmod} -\subsection{Il flag \texttt{sticky}} -\label{sec:filedir_sticky} - \subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}} \label{sec:filedir_chown} @@ -308,10 +353,11 @@ Come riportato in \tabref{tab:fileintr_file_types} in Linux oltre ai file e alle directory esistono vari altri oggetti che possono stare su un filesystem; il tipo di file è ritornato dalla \texttt{stat} nel campo \texttt{st\_mode}. -Dato che il valore numerico può variare a seconda delle implementazioni lo +Dato che il valore numerico può variare a seconda delle implementazioni, lo standard POSIX definisce un insieme di macro per verificare il tipo di files, -queste venfono usate anche da Linux che supporta pure le estensioni per link -simbolici e socket definite da BDS, l'elenco è riportato in \ntab: +queste vengono usate anche da Linux che supporta pure le estensioni per link +simbolici e socket definite da BSD, l'elenco completo di tutte le macro +definite in GNU/Linux è riportato in \ntab: \begin{table}[htb] \centering \footnotesize @@ -320,7 +366,7 @@ simbolici e socket definite da BDS, l'elenco Macro & Tipo del file \\ \hline \hline - \macro{S\_ISREG(m)} & file normale \\ + \macro{S\_ISREG(m)} & file regolare \\ \macro{S\_ISDIR(m)} & directory \\ \macro{S\_ISCHR(m)} & device a caraetteri \\ \macro{S\_ISBLK(m)} & device a blocchi\\ @@ -345,34 +391,37 @@ per questo sempre in \texttt{sys/stat.h} sono definiti i flag riportati in Flag & Valore & Significato \\ \hline \hline - \macro{S\_IFMT} & 0170000 & bitmask for the file type bitfields \\ - \macro{S\_IFSOCK} & 0140000 & socket \\ - \macro{S\_IFLNK} & 0120000 & symbolic link \\ - \macro{S\_IFREG} & 0100000 & regular file \\ - \macro{S\_IFBLK} & 0060000 & block device \\ - \macro{S\_IFDIR} & 0040000 & directory \\ - \macro{S\_IFCHR} & 0020000 & character device \\ - \macro{S\_IFIFO} & 0010000 & fifo \\ - \macro{S\_ISUID} & 0004000 & set UID bit \\ - \macro{S\_ISGID} & 0002000 & set GID bit (see below) \\ - \macro{S\_ISVTX} & 0001000 & sticky bit (see below) \\ - \macro{S\_IRWXU} & 00700 & mask for file owner permissions \\ - \macro{S\_IRUSR} & 00400 & owner has read permission \\ - \macro{S\_IWUSR} & 00200 & owner has write permission \\ - \macro{S\_IXUSR} & 00100 & owner has execute permission \\ - \macro{S\_IRWXG} & 00070 & mask for group permissions \\ - \macro{S\_IRGRP} & 00040 & group has read permission \\ - \macro{S\_IWGRP} & 00020 & group has write permission \\ - \macro{S\_IXGRP} & 00010 & group has execute permission \\ - \macro{S\_IRWXO} & 00007 & mask for permissions for others (not in - group) \\ - \macro{S\_IROTH} & 00004 & others have read permission \\ - \macro{S\_IWOTH} & 00002 & others have write permisson \\ - \macro{S\_IXOTH} & 00001 & others have execute permission \\ + \macro{S\_IFMT} & 0170000 & bitmask per i bit del tipo di file \\ + \macro{S\_IFSOCK} & 0140000 & socket \\ + \macro{S\_IFLNK} & 0120000 & link simbolico \\ + \macro{S\_IFREG} & 0100000 & file regolare \\ + \macro{S\_IFBLK} & 0060000 & device a blocchi \\ + \macro{S\_IFDIR} & 0040000 & directory \\ + \macro{S\_IFCHR} & 0020000 & device a caratteri \\ + \macro{S\_IFIFO} & 0010000 & fifo \\ + \hline + \macro{S\_ISUID} & 0004000 & set UID bit \\ + \macro{S\_ISGID} & 0002000 & set GID bit \\ + \macro{S\_ISVTX} & 0001000 & sticky bit \\ + \hline + \macro{S\_IRWXU} & 00700 & bitmask per i permessi del proprietario \\ + \macro{S\_IRUSR} & 00400 & il proprietario ha permesso di lettura \\ + \macro{S\_IWUSR} & 00200 & il proprietario ha permesso di scrittura \\ + \macro{S\_IXUSR} & 00100 & il proprietario ha permesso di esecuzione\\ + \hline + \macro{S\_IRWXG} & 00070 & bitmask per i permessi del gruppo \\ + \macro{S\_IRGRP} & 00040 & il gruppo ha permesso di lettura \\ + \macro{S\_IWGRP} & 00020 & il gruppo ha permesso di scrittura \\ + \macro{S\_IXGRP} & 00010 & il gruppo ha permesso di esecuzione \\ + \hline + \macro{S\_IRWXO} & 00007 & bitmask per i permessi di tutti gli altri\\ + \macro{S\_IROTH} & 00004 & gli altri hanno permesso di lettura \\ + \macro{S\_IWOTH} & 00002 & gli altri hanno permesso di esecuzione \\ + \macro{S\_IXOTH} & 00001 & gli altri hanno permesso di esecuzione \\ \hline \end{tabular} - \caption{Flag per il campo \var{st\_mode} (definite in - \texttt{sys/stat.h})} + \caption{Costanti per l'identificazione dei vari bit che compongono il campo + \var{st\_mode} (definite in \texttt{sys/stat.h})} \label{tab:filedir_file_mode_flags} \end{table} -- 2.30.2