Finito, quasi, le ACL
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 9 Mar 2009 16:09:16 +0000 (16:09 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 9 Mar 2009 16:09:16 +0000 (16:09 +0000)
errors.tex
filedir.tex

index a887ea9618f35b4e49d78c0e00a6eb3ac9af0ca1..9b60a2ca349b6019bce221bd68107f77a88c64d3 100644 (file)
@@ -144,7 +144,6 @@ gestione dei file.
 \end{description}
 
 
-
 \section{Gli errori dei processi}
 \label{sec:err_proc_errors}
 
@@ -162,10 +161,11 @@ gestione dei processi.
   troppa memoria, non può mai accadere in GNU/Linux.
 \item \errcode{ECHILD} \textit{There are no child processes}. Non esistono
   processi figli di cui attendere la terminazione. Viene rilevato dalle
-  funzioni \func{wait} e \func{waitpid}.
-%\item \errcode{EPROCLIM} \textit{}.  Il limite dell'utente per nuovi processi
-%  sarà ecceduto alla prossima \func{fork}. (non credo esista in Linux)
-% TODO verificare EPROCLIM
+  funzioni \func{wait} e \func{waitpid} (vedi sez.~\ref{sec:proc_wait}).
+\item \errcode{EPROCLIM} \textit{Too many processes}.  Il limite dell'utente
+  per nuovi processi (vedi sez.~\ref{sec:sys_resource_limit}) sarà ecceduto
+  alla prossima \func{fork}; è un codice di errore di BSD, che non viene
+  utilizzato al momento su Linux. 
 \end{description}
 
 
@@ -372,12 +372,14 @@ messaggio.
 
 \item \errcode{ENODATA} \textit{No data available}. Viene indicato da POSIX
   come restituito da una \func{read} eseguita su un file descriptor in
-  modalità non bloccante quando non ci sono dati. In realtà in questo caso
-  viene utilizzato \errcode{EAGAIN}. In Linux viene utilizzato dalle funzioni
-  per la gestione degli attributi estesi dei file quando il nome
-  dell'attributo richiesto non viene trovato.
+  modalità non bloccante quando non ci sono dati. In realtà in questo caso su
+  Linux viene utilizzato \errcode{EAGAIN}. Lo stesso valore valore però viene
+  usato come sinonimo di \errcode{ENOATTR}. 
 
-% TODO referenziare la trattazione degli attributi estesi dei file
+\item \errcode{ENOATTR} \textit{No such attribute}. È un codice di errore
+  specifico di Linux utilizzato dalle funzioni per la gestione degli attributi
+  estesi dei file (vedi sez.~\ref{sec:file_xattr}) quando il nome
+  dell'attributo richiesto non viene trovato.
 
 \item \errcode{ENOLINK} \textit{Link has been severed}. È un errore il cui
   valore è indicato come \textsl{riservato} nelle \textit{Single Unix
index 69af64b78326fc3f3c12b57bece96847b4e7eb34..4c59dc1cbf458c7407cb470449d773434f2d1f04 100644 (file)
@@ -2346,7 +2346,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.
 
-% 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
@@ -2784,7 +2792,7 @@ classi di attributi riportate in tab.~\ref{tab:extended_attribute_class}.
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}{|c|p{10cm}|}
+  \begin{tabular}{|l|p{10cm}|}
     \hline
     \textbf{Nome} & \textbf{Descrizione} \\
     \hline
@@ -2823,10 +2831,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
-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:
-\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
@@ -2857,58 +2865,51 @@ casi:
   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 è
-  \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
@@ -2939,9 +2940,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}
-  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
@@ -3109,10 +3109,6 @@ illustrate in precedenza per le altre funzioni relative agli attributi estesi.
 
 \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}
 
@@ -3816,8 +3812,8 @@ La funzione ...
 
 %TODO: finire
 
-La seconda funzione che consente di impostare una ACL è
-\funcd{acl\_set\_fd}, il cui prototipo è:
+La seconda funzione che consente di impostare una ACL è \funcd{acl\_set\_fd},
+il cui prototipo è:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
@@ -3845,8 +3841,8 @@ 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
+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.
@@ -3857,13 +3853,20 @@ 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
-singoli voci. 
+singole voci successive alla prima.
 
 Una volta ottenuti detti puntatori si porà operare sui contenuti delle singole
-voci ...
+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}.
 
 
-%TODO: finire
 
 \itindend{Access~Control~List}