From: Simone Piccardi Date: Sun, 24 Nov 2002 15:47:41 +0000 (+0000) Subject: Correzioni varie a figure, altre correzioni di D. Masini, inizio di una X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=978f01b032c3492f1a5bec1f9139b84979efb800 Correzioni varie a figure, altre correzioni di D. Masini, inizio di una riassunto sui permessi con tanto di tabelle. --- diff --git a/ChangeLog b/ChangeLog index 1dfa3b3..57a102f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2002-11-24 Simone Piccardi + + * filedir.tex Correzioni varie da D. Masini + 2002-11-21 Simone Piccardi * prochand.tex: Correzioni e chiarimenti su suggerimento di D. Masini. diff --git a/filedir.tex b/filedir.tex index cc4b004..3774978 100644 --- a/filedir.tex +++ b/filedir.tex @@ -80,7 +80,7 @@ principali, come risultano dalla pagina di manuale, sono le seguenti: La creazione di un nuovo collegamento diretto non copia il contenuto del file, ma si limita a creare una voce nella directory specificata con \var{newpath} e -ad aumentare di uno il numero di referenze al file (riportato nel campo +ad aumentare di uno il numero di riferimenti al file (riportato nel campo \var{st\_nlink} della struttura \var{stat}, vedi \secref{sec:file_stat}) aggiungendo il nuovo nome ai precedenti. Si noti che uno stesso file può essere così chiamato con vari nomi in diverse directory. @@ -168,7 +168,7 @@ processo (quando tutti i file vengono chiusi). \subsection{Le funzioni \func{remove} e \func{rename}} \label{sec:file_remove} -Al contrario di quanto avviene con altri unix in Linux non è possibile usare +Al contrario di quanto avviene con altri Unix, in Linux non è possibile usare \func{unlink} sulle directory; per cancellare una directory si può usare la funzione \func{rmdir} (vedi \secref{sec:file_dir_creat_rem}), oppure la funzione \func{remove}. Questa è la funzione prevista dallo standard ANSI C @@ -608,12 +608,12 @@ struttura \var{struct dirent}. \subsection{La directory di lavoro} \label{sec:file_work_dir} -A ciascun processo è associato ad una directory nel filesystem che è chiamata +A ciascun processo è associata una directory nel filesystem che è chiamata directory corrente o directory di lavoro (\textit{current working directory}) che è quella a cui si fa riferimento quando un filename è espresso in forma relativa, dove il ``relativa'' fa riferimento appunto a questa directory. -Quando un utente effettua il login questa directory viene impostata alla +Quando un utente effettua il login, questa directory viene impostata alla \textit{home directory} del suo account. Il comando \cmd{cd} della shell consente di cambiarla a piacere, spostandosi da una directory ad un'altra, il comando \cmd{pwd} la stampa sul terminale. Siccome la directory corrente @@ -712,10 +712,10 @@ specificata da \param{fd}. \label{sec:file_temp_file} In molte occasioni è utile poter creare dei file temporanei; benché la cosa -sembri semplice in realtà il problema è più sottile di quanto non appaia a +sembri semplice, in realtà il problema è più sottile di quanto non appaia a prima vista. Infatti anche se sembrerebbe banale generare un nome a caso e creare il file dopo aver controllato che questo non esista, nel momento fra il -controllo e la creazione si ha giusto lo spazio per una \textit{race +controllo e la creazione si ha giusto lo spazio per una possibile \textit{race condition} (si ricordi quanto visto in \secref{sec:proc_race_cond}). Le \acr{glibc} provvedono varie funzioni per generare nomi di file temporanei, @@ -919,7 +919,7 @@ queste funzioni sono i seguenti: su un file, su un link simbolico e su un file descriptor. La struttura \var{stat} usata da queste funzioni è definita nell'header -\file{sys/stat.h} e in generale dipende dall'implementazione, la versione +\file{sys/stat.h} e in generale dipende dall'implementazione; la versione usata da Linux è mostrata in \figref{fig:file_stat_struct}, così come riportata dalla pagina di manuale di \func{stat} (in realtà la definizione effettivamente usata nel kernel dipende dall'architettura e ha altri campi @@ -962,12 +962,12 @@ primitivi del sistema (di quelli definiti in \label{sec:file_types} Come riportato in \tabref{tab:file_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 \func{stat} come maschera binaria nel campo +directory esistono altri oggetti che possono stare su un filesystem. Il tipo +di file è ritornato dalla \func{stat} come maschera binaria nel campo \var{st\_mode} (che che contiene anche le informazioni relative ai permessi). 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, +standard POSIX definisce un insieme di macro per verificare il tipo di file, queste vengono usate anche da Linux che supporta pure le estensioni allo standard per i link simbolici e i socket definite da BSD; l'elenco completo delle macro con cui è possibile estrarre l'informazione da \var{st\_mode} è @@ -1060,9 +1060,9 @@ poi si effettua il confronto con la combinazione di tipi scelta. \subsection{Le dimensioni dei file} \label{sec:file_file_size} -Il membro \var{st\_size} contiene la dimensione del file in byte (se il file è -un file regolare, nel caso di un link simbolico la dimensione è quella del -pathname che contiene). +Il membro \var{st\_size} contiene la dimensione del file in byte (se si tratta +di un file regolare, nel caso di un link simbolico la dimensione è quella del +pathname che contiene, per le fifo è sempre nullo). Il campo \var{st\_blocks} definisce la lunghezza del file in blocchi di 512 byte. Il campo \var{st\_blksize} infine definisce la dimensione preferita per @@ -1135,8 +1135,8 @@ nell'inode insieme agli altri attributi del file e possono essere letti tramite la funzione \func{stat}, che li restituisce attraverso tre campi della struttura \var{stat} di \figref{fig:file_stat_struct}. Il significato di detti tempi e dei relativi campi è riportato nello schema in -\tabref{tab:file_file_times}, dove si è anche riportato un esempio delle -funzioni che effettuano cambiamenti su di essi. +\tabref{tab:file_file_times}, dove è anche riportato un esempio delle funzioni +che effettuano cambiamenti su di essi. \begin{table}[htb] \centering @@ -1337,8 +1337,11 @@ ovviamente in questo modo la cosa Una delle caratteristiche fondamentali di tutti i sistemi unix-like è quella del controllo di accesso ai file, che viene implementato per qualunque -filesystem standard. In questa sezione ne esamineremo i concetti essenziali e -le funzioni usate per gestirne i vari aspetti. +filesystem standard.\footnote{per standard si intende che implementa le + caratteristiche previste dallo standard POSIX. In Linux sono disponibili + anche una serie di altri filesystem, come quelli di Windiws e del Mac, che + non supportano queste caratteristiche.} In questa sezione ne esamineremo i +concetti essenziali e le funzioni usate per gestirne i vari aspetti. \subsection{I permessi per l'accesso ai file} @@ -1346,7 +1349,7 @@ le funzioni usate per gestirne i vari aspetti. Ad ogni file Linux associa sempre l'utente che ne è proprietario (il cosiddetto \textit{owner}) ed un gruppo di appartenenza, secondo il meccanismo -degli identificatori di utenti e gruppi (\acr{uid} e \acr{gid}). Questi valori +degli identificatori di utente e gruppo (\acr{uid} e \acr{gid}). Questi valori sono accessibili da programma tramite la funzione \func{stat}, e sono mantenuti nei campi \var{st\_uid} e \var{st\_gid} della struttura \var{stat} (si veda \secref{sec:file_stat}).\footnote{Questo è vero solo per filesystem @@ -1359,12 +1362,11 @@ Il controllo di accesso ai file segue un modello abbastanza semplice che prevede tre permessi fondamentali strutturati su tre livelli di accesso. Esistono varie estensioni a questo modello,\footnote{come le \textit{Access Control List} che possono essere aggiunte al filesystem standard con - opportune patch, e sono presenti in filesystem non ancora inclusi nel kernel - ufficiale come \textsl{xfs}, o meccanismi di controllo ancora più - sofisticati come il \textit{mandatory access control} di SE-Linux.} ma nella -maggior parte dei casi il meccanismo standard è più che sufficiente a -soffisfare tutte le necessità più comuni. I tre permessi di base associati ad -ogni file sono: + opportune patch, la cui introduzione nei kernel ufficiali è iniziata con la + serie 2.5.x. per arrivare a meccanismi di controllo ancora più sofisticati + come il \textit{mandatory access control} di SE-Linux.} ma nella maggior +parte dei casi il meccanismo standard è più che sufficiente a soddisfare tutte +le necessità più comuni. I tre permessi di base associati ad ogni file sono: \begin{itemize*} \item il permesso di lettura (indicato con la lettera \texttt{r}, dall'inglese \textit{read}). @@ -1389,7 +1391,16 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri. I restanti tre bit (noti come \acr{suid}, \acr{sgid}, e \textsl{sticky}) sono usati per indicare alcune caratteristiche più complesse del meccanismo del controllo di accesso su cui torneremo in seguito (in -\secref{sec:file_suid_sgid} e \secref{sec:file_sticky}). +\secref{sec:file_suid_sgid} e \secref{sec:file_sticky}); lo schema di +allocazione dei bit è riportato in \figref{fig:file_perm_bit}. + +\begin{figure}[htb] + \centering + \includegraphics[width=6cm]{img/fileperm} + \caption{Lo schema dei bit utilizzati per specificare i permessi di un file + contenuti nel campo \var{st\_mode} di \var{fstat}.} + \label{fig:file_perm_bit} +\end{figure} Anche i permessi, come tutte le altre informazioni pertinenti al file, sono memorizzati nell'inode; in particolare essi sono contenuti in alcuni bit del @@ -1433,7 +1444,7 @@ che permettono di accedere al valore numerico di questi bit nel campo \end{table} I permessi vengono usati in maniera diversa dalle varie funzioni, e a seconda -che si riferiscano a dei file, dei link simbolici o delle directory, qui ci +che si riferiscano a dei file, dei link simbolici o delle directory; qui ci limiteremo ad un riassunto delle regole generali, entrando nei dettagli più avanti. @@ -1525,7 +1536,7 @@ di accesso sono i seguenti: \end{enumerate} Si tenga presente che questi passi vengono eseguiti esattamente in -quest'ordine. Questo vuol dire che se un processo è il proprietario di un file +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 @@ -1549,12 +1560,13 @@ identificatori del gruppo \textit{effective} del nuovo processo al valore dei corrispondenti del gruppo \textit{real} del processo corrente, che normalmente corrispondono dell'utente con cui si è entrati nel sistema. -Se però il file del programma\footnote{per motivi di sicurezza il kernel - ignora i bit \acr{suid} e \acr{sgid} per gli script eseguibili.} (che -ovviamente deve essere eseguibile) ha il bit \acr{suid} impostato, il kernel -assegnerà come userid effettivo al nuovo processo l'\acr{uid} del proprietario -del file al posto dell'\acr{uid} del processo originario. Avere il bit -\acr{sgid} impostato ha lo stesso effetto sul groupid effettivo del processo. +Se però il file del programma (che ovviamente deve essere +eseguibile\footnote{per motivi di sicurezza il kernel ignora i bit \acr{suid} + e \acr{sgid} per gli script eseguibili.}) ha il bit \acr{suid} impostato, il +kernel assegnerà come userid effettivo al nuovo processo l'\acr{uid} del +proprietario del file al posto dell'\acr{uid} del processo originario. Avere +il bit \acr{sgid} impostato ha lo stesso effetto sul groupid effettivo del +processo. I bit \acr{suid} e \acr{sgid} vengono usati per permettere agli utenti normali di usare programmi che abbisognano di privilegi speciali; l'esempio classico è @@ -1580,16 +1592,16 @@ l'uso delle due costanti \macro{S\_ISUID} e \macro{S\_IGID}, i cui valori sono riportati in \tabref{tab:file_mode_flags}. Gli stessi bit vengono ad assumere in significato completamente diverso per le -directory, normalmente infatti Linux usa la convenzione di SVR4 per indicare +directory, normalmente infatti Linux usa la convenzione di SVr4 per indicare con questi bit l'uso della semantica BSD nella creazione di nuovi file (si veda \secref{sec:file_ownership} per una spiegazione dettagliata al proposito). Infine Linux utilizza il bit \acr{sgid} per una ulteriore estensione mutuata -da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostare senza che lo sia -anche il corrispondente bit di esecuzione viene utilizzato per attivare per -quel file il \textit{mandatory locking} (argomento che affronteremo in -dettagliopiù avanti in \secref{sec:file_mand_locking}). +da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostato senza che lo +sia anche il corrispondente bit di esecuzione viene utilizzato per attivare +per quel file il \textit{mandatory locking} (affronteremo questo argomento in +dettaglio più avanti, in \secref{sec:file_mand_locking}). \subsection{Il bit \textsl{sticky}} @@ -1619,7 +1631,7 @@ sostanzialmente inutile questo procedimento. Benché ormai non venga più utilizzato per i file, lo \textsl{sticky bit} ha invece assunto un uso importante per le directory;\footnote{lo \textsl{sticky bit} per le directory è un'estensione non definita nello standard POSIX, - Linux però la supporta, così come BSD e SVR4.} in questo caso se il bit è + Linux però la supporta, così come BSD e SVr4.} in questo caso se tale bit è impostato un file potrà essere rimosso dalla directory soltanto se l'utente ha il permesso di scrittura su di essa ed inoltre è vera una delle seguenti condizioni: @@ -1655,7 +1667,7 @@ Lo standard POSIX prescrive che l'\acr{uid} del nuovo file corrisponda all'userid effettivo del processo che lo crea; per il \acr{gid} invece prevede due diverse possibilità: \begin{itemize*} -\item il \acr{gid} del file corrisponde al group id effettivo del processo. +\item il \acr{gid} del file corrisponde al groupid effettivo del processo. \item il \acr{gid} del file corrisponde al \acr{gid} della directory in cui esso è creato. \end{itemize*} @@ -1670,8 +1682,8 @@ automaticamente propagato, restando coerente a quello della directory di partenza, in tutte le sottodirectory. La semantica SVr4 offre la possibilità di scegliere, ma per ottenere lo stesso risultato di coerenza che si ha con BSD necessita che per le nuove directory venga anche propagato anche il bit -\acr{sgid}. Questo è il comportamento predefinito di \func{mkdir}, ed è in -questo modo ad esempio che Debian assicura che le sottodirectory create nelle +\acr{sgid}. Questo è il comportamento predefinito di \cmd{mkdir}, ed è in +questo modo ad esempio che Debian assicura che le sottodirectory create nella home di un utente restino sempre con il \acr{gid} del gruppo primario dello stesso. @@ -1768,23 +1780,17 @@ filename e su un file descriptor, i loro prototipi sono: \begin{errlist} \item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del proprietario del file o non è zero. + \item[\macro{EROFS}] Il file è su un filesystem in sola lettura. \end{errlist} - 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}.} + ed inoltre \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 -\tabref{tab:file_permission_const}. I valori possono esser combinati con l'OR -binario delle relative costanti simboliche, o specificati direttamente, come -per l'analogo comando di shell, con il valore numerico (la shell lo vuole in -ottale, dato che i bit dei permessi sono divisibili in gruppi di tre). 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 -\acr{suid} il valore da fornire sarebbe $4755$. +Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una +variabile dell'apposito tipo primitivo \type{mode\_t} (vedi +\tabref{tab:intro_primitive_types}) utilizzato per specificare i permessi sui +file. \begin{table}[!htb] \centering @@ -1814,37 +1820,58 @@ esecuzione attivo, con un valore di $0755$, se si volesse attivare il bit \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.} + \caption{Valori delle costanti usate per indicare i vari bit di + \param{mode} utilizzato per impostare 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: +Le costanti con cui specificare i singoli bit di \param{mode} sono riportate +in \tabref{tab:file_permission_const}. Il valore di \param{mode} può essere +ottenuto combinando fra loro con un OR binario le costanti simboliche relative +ai vari bit, o specificato direttamente, come per l'omonimo comando di shell, +con un valore numerico (la shell lo vuole in ottale, dato che i bit dei +permessi sono divisibili in gruppi di tre), che si può calcolare direttamente +usando lo schema si utilizzo dei bit illustrato in \figref{fig:file_perm_bit}. + +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 \acr{suid} il valore da fornire sarebbe $4755$. + +Il cambiamento dei permessi di un file eseguito attraverso queste funzioni ha +comunque alcune limitazioni, previste per motivi di sicurezza. L'uso delle +funzioni infatti è possibile solo se l'userid effettivo del processo +corrisponde a quello del proprietario del file o dell'amministratore, +altrimenti esse falliranno con un errore di \macro{EPERM}. + +Ma oltre a questa regola generale, di immediata comprensione, esistono delle +limitazioni ulteriori. Per questo motivo, anche se si è proprietari del file, +non tutti i valori possibili di \param{mode} sono permessi o hanno effetto; +in particolare accade che: \begin{enumerate} \item siccome solo l'amministratore può impostare lo \textit{sticky bit}, se l'userid effettivo 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'userid effettivo del - processo è zero). + \param{mode}. +\item per quanto detto in \secref{sec:file_ownership} riguardo la 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 da + \param{mode} (senza notifica di errore) qualora il gruppo del file non + corrisponda a quelli associati al processo (la cosa non avviene quando + l'userid effettivo del processo è zero). \end{enumerate} Per alcuni filesystem\footnote{il filesystem \acr{ext2} supporta questa caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore misura di sicurezza, volta a 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. +\acr{sgid}; essa consiste nel cancellare automaticamente questi bit dai +permessi di un file qualora un processo che non appartenga all'amministratore +effettui una scrittura. In questo modo anche se un utente malizioso scopre un +file \acr{suid} su cui può scrivere, un'eventuale modifica comporterà la +perdita di questo privilegio. \subsection{La funzione \func{umask}} \label{sec:file_umask} @@ -1943,11 +1970,101 @@ che per il file %completo vedi \ntab), i permessi (vedi \secref{sec:file_perms}), le date (vedi %\secref{sec:file_times}). + +\subsection{Un quadro d'insieme sui permessi} +\label{sec:file_riepilogo} + +Avendo affrontato in maniera separata il comportamento delle varie funzioni ed +il significato dei singoli bit dei permessi sui file, vale la pena fare un +riepilogo in cui si riassumono le caratteristiche di ciascuno di essi, in modo +da poter fornire un quadro d'insieme. + +In \tabref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari bit +per un file; per quanto riguarda l'applicazione dei permessi per proprietario, +gruppo ed altri si ricordi quanto illustrato in +\secref{sec:file_perm_overview}. Per compattezza nella tabella si sono +specificati i bit di \acr{suid}, \acr{sgid} e \acr{stiky} con la notazione +illustrata anche in \figref{fig:file_perm_bit}. + +\begin{table}[!htb] + \centering + \footnotesize + \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|p{7cm}|} + \hline + \multicolumn{3}{|c|}{}& + \multicolumn{3}{|c|}{user}& + \multicolumn{3}{|c|}{group}& + \multicolumn{3}{|c|}{other}& + \multirow{2}{*}{\textbf{Operazioni possibili}} \\ + \cline{1-12} + \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\ + \hline + \hline + 1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\ + -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\ + -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\ + -&-&1&-&-&-&-&-&-&-&-&-&Ineffettivo\\ + -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il propritario\\ + -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo propritario\\ + -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\ + -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il propritario\\ + -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo propritario\\ + -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\ + -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il propritario\\ + -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo propritario\\ + -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\ + \hline + \end{tabular} + \caption{Tabella riassuntiva del significato dei bit dei permessi per un + file.} + \label{tab:file_fileperm_bits} +\end{table} + +In \tabref{tab:file_dirperm_bits} si sono riassunti gli effetti dei vari bit +per una directory; anche in questo caso si sono specificati i bit di +\acr{suid}, \acr{sgid} e \acr{stiky} con la notazione illustrata anche in +\figref{fig:file_perm_bit}. + +\begin{table}[!htb] + \centering + \footnotesize + \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|p{7cm}|} + \hline + \multicolumn{3}{|c|}{}& + \multicolumn{3}{|c|}{user}& + \multicolumn{3}{|c|}{group}& + \multicolumn{3}{|c|}{other}& + \multirow{2}{*}{\textbf{Operazioni possibili}} \\ + \cline{1-12} + \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\ + \hline + \hline + 1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del propritario\\ + -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo propritario\\ + -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\ + -&-&1&-&-&-&-&-&-&-&-&-&Ineffettivo\\ + -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il propritario\\ + -&-&-&-&1&-&-&-&-&-&-&-&Permesso di lettura per il gruppo propritario\\ + -&-&-&-&-&1&-&-&-&-&-&-&Permesso di lettura per tutti gli altri\\ + -&-&-&-&-&-&1&-&-&-&-&-&Permesso di scrittura per il propritario\\ + -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo propritario\\ + -&-&-&-&-&-&-&-&1&-&-&-&Permesso di scrittura per tutti gli altri \\ + -&-&-&-&-&-&-&-&-&1&-&-&Permesso di esecuzione per il propritario\\ + -&-&-&-&-&-&-&-&-&-&1&-&Permesso di esecuzione per il gruppo propritario\\ + -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\ + \hline + \end{tabular} + \caption{Tabella riassuntiva del significato dei bit dei permessi per una + directory.} + \label{tab:file_dirperm_bits} +\end{table} + + \subsection{La funzione \func{chroot}} \label{sec:file_chroot} -Benché non abbia niente a che fare con permessi, utenti e gruppi, questa -funzione viene usata spesso per restringere le capacità di acccesso di un +Benché non abbia niente a che fare con permessi, utenti e gruppi, la funzione +\func{chroot} viene usata spesso per restringere le capacità di acccesso di un programma ad una sezione limitata del filesystem, per cui ne parleremo in questa sezione. diff --git a/fileintro.tex b/fileintro.tex index d20ab6b..7da0dab 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -495,8 +495,8 @@ operazioni previste dal kernel \secref{sec:file_multiplexing}). \\ \textsl{\code{mmap}} & mappa il file in memoria (vedi \secref{sec:file_memory_map}). \\ - \textsl{\code{release}}& chiamata quando l'ultima referenza a un file - aperto è chiusa. \\ + \textsl{\code{release}}& chiamata quando l'ultimo riferimento a un file + aperto è chiuso. \\ \textsl{\code{fsync}} & sincronizza il contenuto del file (vedi \secref{sec:file_sync}). \\ \textsl{\code{fasync}} & abilita l'I/O asincrono (vedi @@ -513,12 +513,11 @@ astratta del VFS. Qualora se ne voglia eseguire una, il kernel andr utilizzare l'opportuna routine dichiarata in \var{f\_ops} appropriata al tipo di file in questione. -In questo modo è possibile scrivere allo stesso modo sulla porta seriale come -su normale un file di dati; ovviamente certe operazioni (nel caso della -seriale ad esempio la \code{seek}) non saranno disponibili, però con questo -sistema l'utilizzo di diversi filesystem (come quelli usati da Windows o -MacOs) è immediato e (relativamente) trasparente per l'utente ed il -programmatore. +Pertanto è possibile scrivere allo stesso modo sulla porta seriale come su +normale un file di dati; ovviamente certe operazioni (nel caso della seriale +ad esempio la \code{seek}) non saranno disponibili, però con questo sistema +l'utilizzo di diversi filesystem (come quelli usati da Windows o MacOs) è +immediato e (relativamente) trasparente per l'utente ed il programmatore. \subsection{Il funzionamento di un filesystem Unix} diff --git a/fileunix.tex b/fileunix.tex index 0e2658e..0f1f225 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -753,7 +753,7 @@ voce della \textit{file table}. \subsection{Operazioni atomiche coi file} \label{sec:file_atomic} -Come si è visto in un sistema unix è sempre possibile per più processi +Come si è visto in un sistema Unix è sempre possibile per più processi accedere in contemporanea allo stesso file, e che le operazioni di lettura e scrittura possono essere fatte da ogni processo in maniera autonoma in base ad una posizione corrente nel file che è locale a ciascuno di essi. diff --git a/img/ipv4_head.dia b/img/ipv4_head.dia index 657c776..63a7ac8 100644 Binary files a/img/ipv4_head.dia and b/img/ipv4_head.dia differ diff --git a/img/ipv6_head.dia b/img/ipv6_head.dia index 2d2e75f..4fe96fb 100644 Binary files a/img/ipv6_head.dia and b/img/ipv6_head.dia differ