- ed inoltre \macro{EROFS} e \macro{EIO}; \func{chmod} restituisce anche
- \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM},
- \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche
- \macro{EBADF}.
-\end{functions}
-
-I valori possibili per \var{mode} sono indicati in \ntab. I valori possono
-esser combinati con l'OR binario delle relative macro, o specificati
-direttamente, come per l'analogo comando di shell, con il valore ottale. Ad
-esempio i permessi standard assegnati ai nuovi file (lettura e scrittura per
-il proprietario, sola lettura per il gruppo e gli altri) sono corrispondenti
-al valore ottale $0644$, un programma invece avrebbe anche il bit di
-esecuzione attivo, con un valore di $0755$, se si volesse attivare il bit suid
-il valore da fornire sarebbe $4755$.
-
-\begin{table}[!htb]
- \centering
- \footnotesize
- \begin{tabular}[c]{|c|c|l|}
- \hline
- \textbf{\var{mode}} & \textbf{Valore} & \textbf{Significato} \\
- \hline
- \hline
- \macro{S\_ISUID} & 04000 & set user ID \\
- \macro{S\_ISGID} & 02000 & set group ID \\
- \macro{S\_ISVTX} & 01000 & sticky bit \\
- \hline
- \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
- \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura \\
- \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
- \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
- \hline
- \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi \\
- \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura \\
- \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
- \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
- \hline
- \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
- \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura \\
- \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
- \macro{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
- \hline
- \end{tabular}
- \caption{I valori delle costanti usate per indicare i permessi dei file.}
- \label{tab:file_permission_const}
-\end{table}
-
-Il cambiamento dei permessi di un file attraverso queste funzioni ha comunque
-alcune limitazioni, provviste per motivi di sicurezza. Questo significa che
-anche se si è proprietari del file non tutte le operazioni sono permesse, in
-particolare:
-\begin{itemize}
-\item siccome solo l'amministratore può settare lo \textit{sticky bit} se se
- l'\textit{effective user id} del processo non è zero esso viene
- automaticamente cancellato (senza notifica di errore) qualora sia stato
- indicato in \var{mode}.
-\item per via della semantica SVR4 nella creazione dei nuovi file, si può
- avere il caso in cui il file creato da un processo è assegnato a un gruppo
- per il quale il processo non ha privilegi. Per evitare che si possa
- assegnare il bit \acr{sgid} ad un file appartenente a un gruppo per cui
- non si hanno diritti, questo viene automaticamente cancellato (senza
- notifica di errore) da \var{mode} qualora il gruppo del file non corrisponda
- a quelli associati al processo (la cosa non avviene quando
- l'\textit{effective user id} del processo è zero).
-\end{itemize}
-
-Per alcuni filesystem\footnote{il filesystem \textsl{ext2} supporta questa
- caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore
-misura di sicurezza, volta ad scongiurare l'abuso dei bit \acr{suid} e
-\acr{sgid}; essa consiste nel cancellare automaticamente questi bit qualora un
-processo che non appartenga all'amministratore scriva su un file. In questo
-modo anche se un utente malizioso scopre un file \acr{suid} su cui può
-scrivere, un eventuale modifica comporterà la perdita di ogni ulteriore
-privilegio.
-
-
-\subsection{La funzione \texttt{umask}}
-\label{sec:file_umask}
-
-Oltre che dai valori indicati in sede di creazione, i permessi assegnati ai
-nuovi file sono controllati anche da una maschera di bit settata con la
-funzione \func{umask}, il cui prototipo è:
-
-\begin{prototype}{stat.h}
-{mode\_t umask(mode\_t mask)}
-
- Setta la maschera dei permessi dei bit al valore specificato da \var{mask}
- (di cui vengono presi solo i 9 bit meno significativi).
-
- La funzione ritorna il precedente valore della maschera. È una delle poche
- funzioni che non restituisce codici di errore.