Materiale scritto a nizza
[gapil.git] / filedir.tex
index 43724d8b7ec55d9abe84fd97d35c1d43a82aa18f..b15c5f098b3216c6b5539cb3aea5447d3b19a12f 100644 (file)
@@ -1,6 +1,6 @@
 %% filedir.tex
 %%
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2008 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2009 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -1541,9 +1541,10 @@ su un file, su un link simbolico e su un file descriptor.
 La struttura \struct{stat} usata da queste funzioni è definita nell'header
 \file{sys/stat.h} e in generale dipende dall'implementazione; la versione
 usata da Linux è mostrata in fig.~\ref{fig:file_stat_struct}, così come
 La struttura \struct{stat} usata da queste funzioni è definita nell'header
 \file{sys/stat.h} e in generale dipende dall'implementazione; la versione
 usata da Linux è mostrata in fig.~\ref{fig:file_stat_struct}, così come
-riportata dalla pagina di manuale di \func{stat} (in realtà la definizione
+riportata dalla pagina di manuale di \func{stat}in realtà la definizione
 effettivamente usata nel kernel dipende dall'architettura e ha altri campi
 effettivamente usata nel kernel dipende dall'architettura e ha altri campi
-riservati per estensioni come tempi più precisi, o per il padding dei campi).
+riservati per estensioni come tempi dei file più precisi (vedi
+sez.~\ref{sec:file_file_times}), o per il padding dei campi.
 
 \begin{figure}[!htb]
   \footnotesize
 
 \begin{figure}[!htb]
   \footnotesize
@@ -1561,8 +1562,6 @@ Si noti come i vari membri della struttura siano specificati come tipi
 primitivi del sistema (di quelli definiti in
 tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}).
 
 primitivi del sistema (di quelli definiti in
 tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}).
 
-% TODO: aggiornare con i cambiamenti ai tempi fatti con il 2.6
-
 \subsection{I tipi di file}
 \label{sec:file_types}
 
 \subsection{I tipi di file}
 \label{sec:file_types}
 
@@ -1940,6 +1939,17 @@ file di dispositivo, scrivendo direttamente sul disco senza passare attraverso
 il filesystem, ma ovviamente in questo modo la cosa è molto più complicata da
 realizzare.
 
 il filesystem, ma ovviamente in questo modo la cosa è molto più complicata da
 realizzare.
 
+Infine a partire dal kernel 2.6 la risoluzione dei tempi dei file, che nei
+campi di tab.~\ref{tab:file_file_times} è espressa in secondi, è stata
+portata ai nanosecondi per la gran parte dei filesystem. La ulteriore
+informazione può essere acceduta attraverso altri campi; se si sono definite
+le macro \macro{\_BSD\_SOURCE} o \macro{\_SVID\_SOURCE} questi sono
+\var{st\_atim.tv\_nsec}, \var{st\_mtim.tv\_nsec} e \var{st\_ctim.tv\_nsec} se
+queste non sono definite, \var{st\_atimensec}, \var{st\_mtimensec} e
+\var{st\_mtimensec}. Qualora il supporto per questa maggior precisione sia
+assente questi campi aggiuntivi saranno nulli.
+
+%TODO documentare utimes
 
 
 \section{Il controllo di accesso ai file}
 
 
 \section{Il controllo di accesso ai file}
@@ -2346,7 +2356,15 @@ eseguendo un programma coi privilegi di un altro utente (ad esempio attraverso
 l'uso del \itindex{suid~bit} \textit{suid bit}) che vuole controllare se
 l'utente originale ha i permessi per accedere ad un certo file.
 
 l'uso del \itindex{suid~bit} \textit{suid bit}) che vuole controllare se
 l'utente originale ha i permessi per accedere ad un certo file.
 
-% TODO documentare euidaccess (e eaccess)
+Del tutto analoghe a \func{access} sono le due funzioni \funcd{euidaccess} e
+\funcd{eaccess} che ripetono lo stesso controllo usando però gli
+identificatori del gruppo effettivo, verificando quindi le effettive capacità
+di accesso ad un file. Le funzioni hanno entrambe lo stesso
+prototipo\footnote{in realtà \func{eaccess} è solo un sinonimo di
+  \func{euidaccess} fornita per compatibilità con l'uso di questo nome in
+  altri sistemi.} che è del tutto identico a quello di \func{access}. Prendono
+anche gli stessi valori e restituiscono gli stessi risultati e gli stessi
+codici di errore.
 
 Per cambiare i permessi di un file il sistema mette ad disposizione due
 funzioni \funcd{chmod} e \funcd{fchmod}, che operano rispettivamente su un
 
 Per cambiare i permessi di un file il sistema mette ad disposizione due
 funzioni \funcd{chmod} e \funcd{fchmod}, che operano rispettivamente su un
@@ -2784,7 +2802,7 @@ classi di attributi riportate in tab.~\ref{tab:extended_attribute_class}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}{|c|p{10cm}|}
+  \begin{tabular}{|l|p{10cm}|}
     \hline
     \textbf{Nome} & \textbf{Descrizione} \\
     \hline
     \hline
     \textbf{Nome} & \textbf{Descrizione} \\
     \hline
@@ -2823,10 +2841,10 @@ impiega per realizzare delle estensioni (come le \itindex{Access~Control~List}
 ACL, \index{SELinux} SELinux, ecc.) al tradizionale meccanismo dei controlli
 di accesso di Unix, l'accesso ai loro valori viene regolato in maniera diversa
 a seconda sia della loro classe sia di quali, fra le estensioni che li
 ACL, \index{SELinux} SELinux, ecc.) al tradizionale meccanismo dei controlli
 di accesso di Unix, l'accesso ai loro valori viene regolato in maniera diversa
 a seconda sia della loro classe sia di quali, fra le estensioni che li
-utilizzano, sono poste in uso.  In particolare, per ciascuna delle classi
+utilizzano, sono poste in uso. In particolare, per ciascuna delle classi
 riportate in tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti
 casi:
 riportate in tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti
 casi:
-\begin{basedescript}{\desclabelwidth{2.0cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.7cm}\desclabelstyle{\nextlinelabel}}
 \item[\texttt{security}] L'accesso agli \textit{extended security attributes}
   dipende dalle politiche di sicurezza stabilite da loro stessi tramite
   l'utilizzo di un sistema di controllo basato sui
 \item[\texttt{security}] L'accesso agli \textit{extended security attributes}
   dipende dalle politiche di sicurezza stabilite da loro stessi tramite
   l'utilizzo di un sistema di controllo basato sui
@@ -2857,58 +2875,51 @@ casi:
   controllo che accedono ad informazioni non disponibili ai processi ordinari.
 
 \item[\texttt{user}] L'accesso agli \textit{extended user attributes} è
   controllo che accedono ad informazioni non disponibili ai processi ordinari.
 
 \item[\texttt{user}] L'accesso agli \textit{extended user attributes} è
-  regolato dagli ordinari permessi dei file a cui essi fanno riferimento:
-  occorre avere il permesso di lettura per leggerli e quello di scrittura per
-  scriverli o modificarli. Dato l'uso di questi attributi, si è scelto cioè di
-  applicare per il loro accesso gli stessi criteri che si usano per l'accesso
-  al contenuto dei file (o delle directory) cui essi fanno riferimento.
-
-  Questa scelta vale però soltanto per i file e le directory ordinarie, se
-  valesse in generale infatti si avrebbe un serio problema di sicurezza dato
-  che esistono diversi oggetti sul filesystem per i quali è normale avere
-  avere il permesso di scrittura consentito a tutti gli utenti, come i link
-  simbolici, o alcuni file di dispositivo come \texttt{/dev/null}. Se fosse
-  possibile usare su di essi gli \textit{extended user attributes} un utente
-  qualunque potrebbe inserirvi dati a piacere.\footnote{la cosa è stata notata
-    su XFS, dove questo comportamento permetteva, non essendovi limiti sullo
-    spazio occupabile dagli \textit{Extended Attributes}, di bloccare il
-    sistema riempiendo il disco.}
-
-  La semantica del controllo di accesso che abbiamo indicato inoltre non
-  avrebbe alcun senso al di fuori di file e directory: i permessi di lettura e
-  scrittura per un file di dispositivo attengono alle capacità di accesso al
-  dispositivo sottostante,\footnote{motivo per cui si può formattare un disco
-    anche se \texttt{/dev} è su un filesystem in sola lettura.} mentre per i
-  link simbolici questi vengono semplicemente ignorati: in nessuno dei due
-  casi hanno a che fare con il contenuto del file, e nella discussione
-  relativa all'uso degli \textit{extended user attributes} nessuno è mai stato
-  capace di indicare una qualche forma sensata di utilizzo degli stessi per
-  link simbolici o file di dispositivo, e neanche per le fifo o i socket.
-
-  Per questo motivo gli \textit{extended user attributes} sono stati
-  completamente disabilitati per tutto ciò che non sia un file regolare o una
-  directory.\footnote{si può verificare la semantica adottata consultando il
-    file \texttt{fs/xattr.c} dei sorgenti del kernel.} Inoltre per le
-  directory è stata introdotta una ulteriore restrizione, dovuta di nuovo alla
-  presenza ordinaria di permessi di scrittura completi su directory come
-  \texttt{/tmp}.  Questo è un altro caso particolare, in cui il premesso di
-  scrittura viene usato, unito alla presenza dello \itindex{sticky~bit}
-  \textit{sticky bit}, per garantire il permesso di creazione di nuovi file.
-  Per questo motivo, per evitare eventuali abusi, se una directory ha lo
-  \itindex{sticky~bit} \textit{sticky bit} attivo sarà consentito scrivere i
-  suoi \textit{extended user attributes} soltanto se si è proprietari della
-  stessa, o si hanno i privilegi amministrativi della capability
-  \index{capabilities} \const{CAP\_FOWNER}.
+  regolato dai normali permessi dei file: occorre avere il permesso di lettura
+  per leggerli e quello di scrittura per scriverli o modificarli. Dato l'uso
+  di questi attributi si è scelto di applicare al loro accesso gli stessi
+  criteri che si usano per l'accesso al contenuto dei file (o delle directory)
+  cui essi fanno riferimento. Questa scelta vale però soltanto per i file e le
+  directory ordinarie, se valesse in generale infatti si avrebbe un serio
+  problema di sicurezza dato che esistono diversi oggetti sul filesystem per i
+  quali è normale avere avere il permesso di scrittura consentito a tutti gli
+  utenti, come i link simbolici, o alcuni file di dispositivo come
+  \texttt{/dev/null}. Se fosse possibile usare su di essi gli \textit{extended
+    user attributes} un utente qualunque potrebbe inserirvi dati a
+  piacere.\footnote{la cosa è stata notata su XFS, dove questo comportamento
+    permetteva, non essendovi limiti sullo spazio occupabile dagli
+    \textit{Extended Attributes}, di bloccare il sistema riempiendo il disco.}
+
+  La semantica del controllo di accesso indicata inoltre non avrebbe alcun
+  senso al di fuori di file e directory: i permessi di lettura e scrittura per
+  un file di dispositivo attengono alle capacità di accesso al dispositivo
+  sottostante,\footnote{motivo per cui si può formattare un disco anche se
+    \texttt{/dev} è su un filesystem in sola lettura.} mentre per i link
+  simbolici questi vengono semplicemente ignorati: in nessuno dei due casi
+  hanno a che fare con il contenuto del file, e nella discussione relativa
+  all'uso degli \textit{extended user attributes} nessuno è mai stato capace
+  di indicare una qualche forma sensata di utilizzo degli stessi per link
+  simbolici o file di dispositivo, e neanche per le fifo o i socket.  Per
+  questo motivo essi sono stati completamente disabilitati per tutto ciò che
+  non sia un file regolare o una directory.\footnote{si può verificare la
+    semantica adottata consultando il file \texttt{fs/xattr.c} dei sorgenti
+    del kernel.} Inoltre per le directory è stata introdotta una ulteriore
+  restrizione, dovuta di nuovo alla presenza ordinaria di permessi di
+  scrittura completi su directory come \texttt{/tmp}. Per questo motivo, per
+  evitare eventuali abusi, se una directory ha lo \itindex{sticky~bit}
+  \textit{sticky bit} attivo sarà consentito scrivere i suoi \textit{extended
+    user attributes} soltanto se si è proprietari della stessa, o si hanno i
+  privilegi amministrativi della capability \index{capabilities}
+  \const{CAP\_FOWNER}.
 \end{basedescript}
 
 Le funzioni per la gestione degli attributi estesi, come altre funzioni di
 gestione avanzate specifiche di Linux, non fanno parte delle \acr{glibc}, e
 sono fornite da una apposita libreria, \texttt{libattr}, che deve essere
 installata a parte;\footnote{la versione corrente della libreria è
 \end{basedescript}
 
 Le funzioni per la gestione degli attributi estesi, come altre funzioni di
 gestione avanzate specifiche di Linux, non fanno parte delle \acr{glibc}, e
 sono fornite da una apposita libreria, \texttt{libattr}, che deve essere
 installata a parte;\footnote{la versione corrente della libreria è
-  \texttt{libattr1}, e nel caso si usi Debian la si può installare con il
-  pacchetto omonimo ed il collegato \texttt{libattr1-dev}.}  pertanto se un
-programma le utilizza si dovrà indicare esplicitamente l'uso della suddetta
-libreria invocando il compilatore con l'opzione \texttt{-lattr}.
+  \texttt{libattr1}.}  pertanto se un programma le utilizza si dovrà indicare
+esplicitamente l'uso della suddetta libreria invocando il compilatore con
+l'opzione \texttt{-lattr}.  
 
 Per poter leggere gli attributi estesi sono disponibili tre diverse funzioni,
 \funcd{getxattr}, \funcd{lgetxattr} e \funcd{fgetxattr}, che consentono
 
 Per poter leggere gli attributi estesi sono disponibili tre diverse funzioni,
 \funcd{getxattr}, \funcd{lgetxattr} e \funcd{fgetxattr}, che consentono
@@ -2939,9 +2950,8 @@ simbolico e ad un file descriptor; i rispettivi prototipi sono:
   \item[\errcode{ENOTSUP}] gli attributi estesi non sono supportati dal
     filesystem o sono disabilitati.
   \end{errlist}
   \item[\errcode{ENOTSUP}] gli attributi estesi non sono supportati dal
     filesystem o sono disabilitati.
   \end{errlist}
-  Oltre a questi potranno essere restituiti tutti gli errori di \func{stat},
-  ed in particolare \errcode{EPERM} se non si hanno i permessi di accesso
-  all'attributo.  }
+  e tutti gli errori di \func{stat}, come \errcode{EPERM} se non si hanno i
+  permessi di accesso all'attributo. }
 \end{functions}
 
 Le funzioni \func{getxattr} e \func{lgetxattr} prendono come primo argomento
 \end{functions}
 
 Le funzioni \func{getxattr} e \func{lgetxattr} prendono come primo argomento
@@ -3109,10 +3119,6 @@ illustrate in precedenza per le altre funzioni relative agli attributi estesi.
 
 \itindend{Extended~Attributes}
 
 
 \itindend{Extended~Attributes}
 
-% TODO trattare gli attributi estesi e le funzioni la documentazione di
-% sistema è nei pacchetti libxattr1-dev e attr
-
-
 \subsection{Le \textit{Access  Control List}}
 \label{sec:file_ACL}
 
 \subsection{Le \textit{Access  Control List}}
 \label{sec:file_ACL}
 
@@ -3783,8 +3789,9 @@ della ACL rappresentata dai dati contenuti nel buffer puntato da
 utilizzo.
 
 Una volta che si disponga della ACL desiderata, questa potrà essere impostata
 utilizzo.
 
 Una volta che si disponga della ACL desiderata, questa potrà essere impostata
-su un file o una directory. Per far questo sono disponibili due funzioni; la
-prima è \funcd{acl\_set\_file}, il cui prototipo è:
+su un file o una directory. Per impostare una ACL sono disponibili due
+funzioni; la prima è \funcd{acl\_set\_file}, che opera sia su file che su
+directory, ed il cui prototipo è:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
@@ -3792,7 +3799,7 @@ prima 
   \funcdecl{int acl\_set\_file(const char *path, acl\_type\_t type, acl\_t
     acl)}
 
   \funcdecl{int acl\_set\_file(const char *path, acl\_type\_t type, acl\_t
     acl)}
 
-  Imposta una ACL su un file.
+  Imposta una ACL su un file o una directory.
 
   \bodydesc{La funzione restituisce $0$ in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
 
   \bodydesc{La funzione restituisce $0$ in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
@@ -3812,12 +3819,20 @@ prima 
 }
 \end{functions}
 
 }
 \end{functions}
 
-La funzione ...
-
-%TODO: finire
-
-La seconda funzione che consente di impostare una ACL è
-\funcd{acl\_set\_fd}, il cui prototipo è:
+La funzione consente di assegnare la ACL contenuta in \param{acl} al file o
+alla directory indicate dal pathname \param{path}, mentre con \param{type} si
+indica il tipo di ACL utilizzando le constanti di tab.~\ref{tab:acl_type}, ma
+si tenga presente che le ACL di default possono essere solo impostate
+qualora \param{path} indichi una directory. Inoltre perché la funzione abbia
+successo la ACL dovrà essere valida, e contenere tutti le voci necessarie,
+unica eccezione è quella in cui si specifica una ACL vuota per cancellare la
+ACL di default associata a \func{path}.\footnote{questo però è una estensione
+  della implementazione delle ACL di Linux, la bozza di standard POSIX.1e
+  prevedeva l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che
+  prende come unico argomento il pathname della directory di cui si vuole
+  cancellare l'ACL di default, per i dettagli si ricorra alla pagina di
+  manuale.}  La seconda funzione che consente di impostare una ACL è
+\funcd{acl\_set\_fd}, ed il suo prototipo è:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
@@ -3841,12 +3856,19 @@ La seconda funzione che consente di impostare una ACL 
 }
 \end{functions}
 
 }
 \end{functions}
 
+La funzione è del tutto è analoga a \funcd{acl\_set\_file} ma opera
+esclusivamente sui file identificati tramite un file descriptor. Non dovendo
+avere a che fare con directory (e con la conseguente possibilità di avere una
+ACL di default) la funzione non necessita che si specifichi il tipo di ACL,
+che sarà sempre di accesso, e prende come unico argomento, a parte il file
+descriptor, la ACL da impostare.
+
 Le funzioni viste finora operano a livello di una intera ACL, eseguendo in una
 sola volta tutte le operazioni relative a tutte le voci in essa contenuta. In
 generale è possibile modificare un singolo valore all'interno di una singola
 Le funzioni viste finora operano a livello di una intera ACL, eseguendo in una
 sola volta tutte le operazioni relative a tutte le voci in essa contenuta. In
 generale è possibile modificare un singolo valore all'interno di una singola
-voce direttamente con le funzioni previste dallo standardo POSIX.1e.  Queste
-funzioni però sono alquanto macchinose da utilizzare per cui è probabilmente
-più semplice operare direttamente sulla rappresentazione testuale. Questo è il
+voce direttamente con le funzioni previste dallo standard POSIX.1e.  Queste
+funzioni però sono alquanto macchinose da utilizzare per cui è molto più
+semplice operare direttamente sulla rappresentazione testuale. Questo è il
 motivo per non tratteremo nei dettagli dette funzioni, fornendone solo una
 descrizione sommaria; chi fosse interessato potrà ricorrere alle pagina di
 manuale.
 motivo per non tratteremo nei dettagli dette funzioni, fornendone solo una
 descrizione sommaria; chi fosse interessato potrà ricorrere alle pagina di
 manuale.
@@ -3857,19 +3879,22 @@ opportuni puntatori di tipo \type{acl\_entry\_t}, che possono essere ottenuti
 dalla funzione \funcd{acl\_get\_entry} (per una voce esistente) o dalla
 funzione \funcd{acl\_create\_entry} per una voce da aggiungere. Nel caso della
 prima funzione si potrà poi ripetere la lettura per ottenere i puntatori alle
 dalla funzione \funcd{acl\_get\_entry} (per una voce esistente) o dalla
 funzione \funcd{acl\_create\_entry} per una voce da aggiungere. Nel caso della
 prima funzione si potrà poi ripetere la lettura per ottenere i puntatori alle
-singoli voci. 
-
-Una volta ottenuti detti puntatori si porà operare sui contenuti delle singole
-voci ...
-
-
-%TODO: finire
+singole voci successive alla prima.
+
+Una volta ottenuti detti puntatori si potrà operare sui contenuti delle singole
+voci; con le funzioni \funcd{acl\_get\_tag\_type}, \funcd{acl\_get\_qualifier},
+\funcd{acl\_get\_permset} si potranno leggere rispettivamente tipo,
+qualificatore e permessi mentre con le corrispondente funzioni
+\funcd{acl\_set\_tag\_type}, \funcd{acl\_set\_qualifier},
+\funcd{acl\_set\_permset} si possono impostare i valori; in entrambi i casi
+vengono utilizzati tipi di dato ad hoc.\footnote{descritti nelle singole
+  pagine di manuale.} Si possono poi copiare i valori di una voce da una ACL
+ad un altra con \funcd{acl\_copy\_entry} o eliminare una voce da una ACL con
+\funcd{acl\_delete\_entry}.
 
 \itindend{Access~Control~List}
 
 
 \itindend{Access~Control~List}
 
-
-% TODO trattare le ACL, la documentazione di sistema è nei pacchetti
-% libacl1-dev e acl 
+% la documentazione di sistema è nei pacchetti libacl1-dev e acl 
 % vedi anche http://www.suse.de/~agruen/acl/linux-acls/online/
 
 
 % vedi anche http://www.suse.de/~agruen/acl/linux-acls/online/
 
 
@@ -3999,9 +4024,10 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by
 % LocalWords:  removexattr lremovexattr fremovexattr attributename  lacl acl
 % LocalWords:  OBJ setfacl len any prefix separator options NUMERIC IDS SMART
 % LocalWords:  fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by
 % LocalWords:  removexattr lremovexattr fremovexattr attributename  lacl acl
 % LocalWords:  OBJ setfacl len any prefix separator options NUMERIC IDS SMART
-% LocalWords:  INDENT major number IDE Documentation makedev fopendir proc
+% LocalWords:  INDENT major number IDE Documentation makedev fopendir proc copy
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  euidaccess eaccess delete def tag qualifier permset