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
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
\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}
\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}
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
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\\
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}