Materiale sugli extended attributes, inizio di un esempio ed qualche
[gapil.git] / filedir.tex
index ba1cd6bf7de94f43a72c2c201be9dc5cd619e75a..6ac0c4c03eadb7dc55896c0254aa44b3ea58f9cd 100644 (file)
@@ -2604,8 +2604,8 @@ gestione. Per questo motivo il nome di un attributo deve essere sempre
 specificato nella forma \texttt{namespace.attribute}, dove \texttt{namespace}
 fa riferimento alla classe a cui l'attributo appartiene, mentre
 \texttt{attribute} è il nome ad esso assegnato. In tale forma il nome di un
-attributo esteso deve essere univoco. Al momento della scrittura di queste
-dispense sono state definite le quattro classi di attributi riportate in
+attributo esteso deve essere univoco. Al momento sono state definite le
+quattro classi di attributi riportate in
 tab.~\ref{tab:extended_attribute_class}.
 
 \begin{table}[htb]
@@ -2628,12 +2628,11 @@ tab.~\ref{tab:extended_attribute_class}.
                       sez.~\ref{sec:file_ACL}) o le \itindex{capabilities}
                       \textit{capabilities} (vedi
                       sez.~\ref{sec:proc_capabilities}).\\
-    \const{trusted} & I \textit{irusted extended attributes}: visibili ed
-                      accessibili soltanto a processi privilegiati.
-                      Vengono utilizzati per poter realizzare in user space
+    \const{trusted} & I \textit{trusted extended attributes}: vengono
+                      utilizzati per poter realizzare in user space 
                       meccanismi che consentano di mantenere delle
-                      informazioni sui file che non siano accessibili ai
-                      processi ordinari.\\
+                      informazioni sui file che non devono essere accessibili
+                      ai processi ordinari.\\
     \const{user}    & Gli \textit{extended user attributes}: utilizzati per
                       mantenere informazioni aggiuntive sui file (come il
                       \textit{mime-type}, la codifica dei caratteri o del
@@ -2646,34 +2645,129 @@ tab.~\ref{tab:extended_attribute_class}.
 \end{table}
 
 
-Come accennato gli \textit{Extended Attributes} vengono utilizzati in forme
-diverse ed in particolare anche per la realizzazione di estensioni del
-meccanismo tradizionale dei controlli di accesso. Per questo motivo l'accesso
-agli attributi estesi è revolato in maniera diversa a seconda della loro
-classe; in particolare si hanno i seguenti casi:
+Dato che uno degli usi degli \textit{Extended Attributes} è quello che li
+impiega per realizzare delle estensioni (come le 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 riportate in
+tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
 \begin{basedescript}{\desclabelwidth{2.0cm}\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
   \itindex{Linux~Security~Modules} \textit{Linux Security Modules} (ad esempio
-  \index{SELinux} SELinux). Pertanto l'accesso in lettura o scruttura dipende
+  \index{SELinux} SELinux). Pertanto l'accesso in lettura o scrittura dipende
   dalle politiche di sicurezza implementate all'interno dal modulo di
   sicurezza che si sta utilizzando al momento (ciascuno avrà le sue). Se non è
   stato caricato nessun modulo di sicurezza l'accesso in lettura sarà
   consentito a tutti i processi, mentre quello in scrittura solo ai processi
   dotati della \index{capabilities} \textit{capability}
   \const{CAP\_SYS\_ADMIN}.
-\item[\texttt{system}] \textit{extended system attributes}
-\item[\texttt{trusted}] \textit{trusted extended attributes}
-\item[\texttt{user}] \textit{extended user attributes}
+\item[\texttt{system}] anche l'accesso agli \textit{extended system
+    attributes} dipende dalle politiche di accesso che il kernel realizza
+  anche utilizzando gli stessi valori in essi contenuti. Ad esempio nel caso
+  delle ACL l'accesso è consentito in lettura ai processi che hanno la
+  capacità di eseguire una ricerca sul file (cioè hanno il permesso di lettura
+  sulla directory che contiene il file) ed in scrittura al proprietario del
+  file o ai processi dotati della capability \index{capabilities}
+  \const{CAP\_FOWNER}.\footnote{vale a dire una politica di accesso analoga a
+    quella impiegata per gli ordinari permessi dei file.}
+
+\item[\texttt{trusted}] l'accesso ai \textit{trusted extended attributes}, sia
+  in lettura che in scrittura, è consentito soltanto ai processi dotati della
+  \index{capabilities} \textit{capability} \const{CAP\_SYS\_ADMIN}. In questo
+  modo si possono utilizzare questi attributi per realizzare in user space dei
+  meccanismi di 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 dato che esistono
+  diversi oggetti sul filesystem per i quali è normale avere avere il permesso
+  di scrittura aperto a tutti, 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 infatti 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 nessuno è mai stato
+  capace di indicare un uso sensato degli \textit{extended user attributes}
+  per questi oggetti, o per fifo e 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
+  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 amministratitiv della capability
+  \index{capabilities} \const{CAP\_FOWNER}.
 \end{basedescript}
 
+Le funzioni per la gestione degli attributi estesi, come altre funzioni di
+gestione avanzate, non sono 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 libreria invocando il compilatore
+con attraverso l'opzione \texttt{-lattr}.
+
+Per poter leggere gli attributi estesi sono disponibili tre diverse funzioni,
+\funcd{getxattr}, \funcd{lgetxattr} e \funcd{fgetxattr}, che consentono
+rispettivamente di richiedere gli attributi relativi a un file, a un link
+simbolico e ad un file descriptor, per poterle utilizzare occorre collegare il
+i loro prototipi sono:
+\begin{functions}
+  \headdecl{sys/types.h} 
+  \headdecl{attr/xattr.h} 
+  
+  \funcdecl{ssize\_t getxattr(const char *path, const char *name, void
+    *value, size\_t size)} 
 
- è regolato dagli ordinari permessi dei file: occorre il
-permesso di lettura per leggerli e quello di scrittura per scriverli o
-modificarli; il permesso di esecuzione viene invece interpretato coma la
-capacità di ottenere la lista degli attributi presenti.
+  \funcdecl{ssize\_t lgetxattr(const char *path, const char *name, void
+    *value, size\_t size)} 
+
+  \funcdecl{ssize\_t fgetxattr(int filedes, const char *name, void *value,
+    size\_t size)}
+
+  Le funzioni leggono il valore di un attributo esteso.
+  
+  \bodydesc{Le funzioni restituiscono un numero positivo che indica la
+    dimensione dell'attributo richiesto in caso di successo, e -1 in caso di
+    errore, nel qual caso \var{errno} assumerà i valori:
+  \begin{errlist}
+  \item[\errcode{ENOATTR}] l'attributo richiesto non esiste.
+  \item[\errcode{ERANGE}] la dimensione \param{size} del buffer \param{value}
+    non è sufficiente per contenere il risultato.
+  \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.  }
+\end{functions}
 
 
 
@@ -2858,7 +2952,8 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  dell' effective passwd IGID locking swap saved text IRWXU IRWXG
 % LocalWords:  IRWXO ext reiser capability FSETID mask capabilities chroot jail
 % LocalWords:  FTP Di filter reiserfs Attributes Solaris Posix FreeBSD libacl
-% LocalWords:  XFS SELinux namespace attribute security trusted Draft
+% LocalWords:  XFS SELinux namespace attribute security trusted Draft Modules
+% LocalWords:  attributes mime ADMIN FOWNER
 
 %%% Local Variables: 
 %%% mode: latex