Aggiunti suid e sgid
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 22 Jul 2001 07:48:20 +0000 (07:48 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 22 Jul 2001 07:48:20 +0000 (07:48 +0000)
filedir.tex

index bd30e902a80f913413db6fef73903a0fdb7441b2..db9c352402dc45ab9846afe37bd79ca9fa471008 100644 (file)
@@ -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}