X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=e174c5bb37040e7778c9677d6dfdca6bf86cbd27;hp=2891b774c2f01ac691513b32f0c2d9d6fc9985d2;hb=8f0d759b2a9864c839d8803b2ea12860f386f17d;hpb=a801b1a1804866073aad5c25a84893a697a3b3b3 diff --git a/filedir.tex b/filedir.tex index 2891b77..e174c5b 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1,6 +1,6 @@ %% filedir.tex %% -%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2015 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", @@ -1623,26 +1623,22 @@ Un altro punto da tenere sempre presente è che, come abbiamo accennato, un collegamento simbolico può fare riferimento anche ad un file che non esiste; ad esempio possiamo usare il comando \cmd{ln} per creare un collegamento simbolico nella nostra directory con: -\begin{Command} -$ ln -s /tmp/tmp_file symlink -\end{Command} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{ln -s /tmp/tmp_file symlink} +\end{Console} %$ e questo avrà successo anche se \file{/tmp/tmp\_file} non esiste: -\begin{Command} -$ ls symlink -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{ls symlink} symlink -\end{Terminal} +\end{Console} %$ ma questo può generare confusione, perché accedendo in sola lettura a \file{symlink}, ad esempio con \cmd{cat}, otterremmo un errore: -\begin{Command} -$ cat symlink -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{cat symlink} cat: symlink: No such file or directory -\end{Terminal} +\end{Console} %$ con un errore che può sembrare sbagliato, dato che \cmd{ls} ci ha mostrato l'esistenza di \file{symlink}, se invece scrivessimo su \file{symlink} @@ -2446,10 +2442,10 @@ la stampa della sintassi, anch'essa omessa, ma il codice completo può essere trovato coi sorgenti allegati alla guida nel file \file{myls.c}. In sostanza tutto quello che fa il programma, dopo aver controllato -(\texttt{\small 12--15}) di avere almeno un argomento, che indicherà la +(\texttt{\small 12-15}) di avere almeno un argomento, che indicherà la directory da esaminare, è chiamare (\texttt{\small 16}) la funzione \myfunc{dir\_scan} per eseguire la scansione, usando la funzione \code{do\_ls} -(\texttt{\small 22--29}) per fare tutto il lavoro. +(\texttt{\small 22-29}) per fare tutto il lavoro. Quest'ultima si limita (\texttt{\small 26}) a chiamare \func{stat} sul file indicato dalla directory entry passata come argomento (il cui nome è appunto @@ -2476,15 +2472,15 @@ Tutto il grosso del lavoro è svolto dalla funzione \myfunc{dir\_scan}, riportata in fig.~\ref{fig:file_dirscan}. La funzione è volutamente generica e permette di eseguire una funzione, passata come secondo argomento, su tutte le voci di una directory. La funzione inizia con l'aprire (\texttt{\small - 18--22}) uno \textit{stream} sulla directory passata come primo argomento, + 18-22}) uno \textit{stream} sulla directory passata come primo argomento, stampando un messaggio in caso di errore. -Il passo successivo (\texttt{\small 23--24}) è cambiare +Il passo successivo (\texttt{\small 23-24}) è cambiare \index{directory~di~lavoro} directory di lavoro (vedi sez.~\ref{sec:file_work_dir}), usando in sequenza le funzioni \func{dirfd} e \func{fchdir} (in realtà si sarebbe potuto usare direttamente \func{chdir} su \var{dirname}), in modo che durante il successivo ciclo (\texttt{\small - 26--30}) sulle singole voci dello \textit{stream} ci si trovi all'interno + 26-30}) sulle singole voci dello \textit{stream} ci si trovi all'interno della directory.\footnote{questo è essenziale al funzionamento della funzione \code{do\_ls}, e ad ogni funzione che debba usare il campo \var{d\_name}, in quanto i nomi dei file memorizzati all'interno di una struttura @@ -4233,12 +4229,10 @@ condizioni: Un classico esempio di directory che ha questo bit impostato è \file{/tmp}, i cui permessi infatti di solito sono i seguenti: -\begin{Command} -$ ls -ld /tmp -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{ls -ld /tmp} drwxrwxrwt 6 root root 1024 Aug 10 01:03 /tmp -\end{Terminal} +\end{Console} %$ quindi con lo \textit{sticky bit} bit impostato. In questo modo qualunque utente nel sistema può creare dei file in questa directory, che come @@ -5937,17 +5931,17 @@ ACL di un file, passato come argomento. La sezione principale del programma, da cui si è rimossa la sezione sulla gestione delle opzioni, è riportata in fig.~\ref{fig:proc_mygetfacl}. Il -programma richiede un unico argomento (\texttt{\small 16--20}) che indica il +programma richiede un unico argomento (\texttt{\small 16-20}) che indica il file di cui si vuole leggere la ACL. Se questo è presente si usa (\texttt{\small 22}) la funzione \func{get\_acl\_file} per leggerne la ACL, e -si controlla (\texttt{\small 23--26}) se l'operazione ha successo, uscendo con +si controlla (\texttt{\small 23-26}) se l'operazione ha successo, uscendo con un messaggio di errore in caso contrario. Ottenuta la ACL la si converte in formato testuale (\texttt{\small 27}) con la funzione \func{acl\_to\_text}, controllando di nuovo se l'operazione ha -successo (\texttt{\small 28--31}) ed uscendo in caso contrario. Si provvede +successo (\texttt{\small 28-31}) ed uscendo in caso contrario. Si provvede infine a stampare la rappresentazione testuale (\texttt{\small 32}) e dopo -aver liberato (\texttt{\small 33--34}) le risorse allocate automaticamente, si +aver liberato (\texttt{\small 33-34}) le risorse allocate automaticamente, si conclude l'esecuzione. @@ -6377,11 +6371,11 @@ quote.\footnote{questi vengono passati come argomenti dalle funzioni mappate con \macro{QCMD} al comando \const{Q\_GETQUOTA} per ottenere i dati. La funzione viene eseguita all'interno di un condizionale (\texttt{\small - 5--16}) che in caso di successo provvede a costruire (\texttt{\small 6--12}) + 5-16}) che in caso di successo provvede a costruire (\texttt{\small 6-12}) opportunamente una risposta restituendo tramite la opportuna funzione di interfaccia un oggetto Python contenente i dati della struttura \struct{dqblk} relativi a uso corrente e limiti sia per i blocchi che per gli \itindex{inode} -\textit{inode}. In caso di errore (\texttt{\small 13--15}) si usa un'altra +\textit{inode}. In caso di errore (\texttt{\small 13-15}) si usa un'altra funzione dell'interfaccia per passare il valore di \var{errno} come eccezione. \begin{figure}[!htbp] @@ -6398,16 +6392,16 @@ riportata in fig.~\ref{fig:set_block_quota}, che prende gli stessi argomenti della precedente, con lo stesso significato, a cui si aggiungono i valori per il \textit{soft limit} e l'\textit{hard limit}. In questo caso occorrerà, prima di chiamare \func{quotactl}, inizializzare opportunamente -(\texttt{\small 5--7}) i campi della struttura \struct{dqblk} che si vogliono +(\texttt{\small 5-7}) i campi della struttura \struct{dqblk} che si vogliono utilizzare (quelli relativi ai limiti sui blocchi) e specificare gli stessi con \const{QIF\_BLIMITS} in \var{dq.dqb\_valid}. Fatto questo la chiamata a \func{quotactl}, stavolta con il comando \const{Q\_SETQUOTA}, viene eseguita come in precedenza all'interno di un -condizionale (\texttt{\small 9--14}). In questo caso non essendovi da +condizionale (\texttt{\small 9-14}). In questo caso non essendovi da restituire nessun dato in caso di successo si usa (\texttt{\small 10}) una apposita funzione di uscita, mentre si restituisce come prima una eccezione -con il valore di \var{errno} in caso di errore (\texttt{\small 12--13}). +con il valore di \var{errno} in caso di errore (\texttt{\small 12-13}). \subsection{La gestione delle \textit{capabilities}} @@ -6798,10 +6792,10 @@ operazioni si rimanda alla rilettura di sez.~\ref{sec:process_prctl}. \itindend{file~capabilities} -% TODO verificare per process capability bounding set, vedi: -% http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3b7391de67da515c91f48aa371de77cb6cc5c07e +% NOTE per dati relativi al process capability bounding set, vedi: +% http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3b7391de67da515c91f48aa371de77cb6cc5c07e -% TODO capire cosa cambia con i patch vari, vedi +% NOTE riferimenti ai vari cambiamenti vedi: % http://lwn.net/Articles/280279/ % http://lwn.net/Articles/256519/ % http://lwn.net/Articles/211883/ @@ -6812,7 +6806,7 @@ breve descrizione ed il nome delle costanti che le identificano, è riportato in tab.~\ref{tab:proc_capabilities};\footnote{l'elenco presentato questa tabella, ripreso dalla pagina di manuale (accessibile con \texttt{man capabilities}) e dalle definizioni in - \texttt{include/linux/capabilities.h}, è aggiornato al kernel 2.6.26.} la + \texttt{include/linux/capabilities.h}, è aggiornato al kernel 3.2.} la tabella è divisa in due parti, la prima riporta le \textit{capabilities} previste anche nella bozza dello standard POSIX1.e, la seconda quelle specifiche di Linux. Come si può notare dalla tabella alcune @@ -6836,6 +6830,8 @@ opportuno dettagliare maggiormente. \const{CAP\_AUDIT\_WRITE}&Scrivere dati nel giornale di auditing del kernel (dal kernel 2.6.11).\\ % TODO verificare questa roba dell'auditing + \const{CAP\_BLOCK\_SUSPEND}&Utilizzare funzionalità che possono bloccare + la sospensione del sistema (dal kernel 3.5).\\ \const{CAP\_CHOWN} & Cambiare proprietario e gruppo proprietario di un file (vedi sez.~\ref{sec:file_ownership_management}).\\ @@ -6883,7 +6879,8 @@ opportuno dettagliare maggiormente. funzioni \func{mlock}, \func{mlockall}, \func{shmctl}, \func{mmap} (vedi sez.~\ref{sec:proc_mem_lock} e - sez.~\ref{sec:file_memory_map}). \\ + sez.~\ref{sec:file_memory_map}). \\ +% TODO verificare l'interazione con SHM_HUGETLB \const{CAP\_IPC\_OWNER} & Evitare il controllo dei permessi per le operazioni sugli oggetti di intercomunicazione fra processi (vedi @@ -6893,57 +6890,51 @@ opportuno dettagliare maggiormente. sez.~\ref{sec:file_asyncronous_lease}) pur non essendo proprietari del file (dal kernel 2.4).\\ - \const{CAP\_LINUX\_IMMUTABLE}& Impostare sui file gli - attributi \textit{immutable} e - \itindex{append~mode} \textit{append-only} (vedi + \const{CAP\_LINUX\_IMMUTABLE}& Impostare sui file gli attributi + \textit{immutable} e \itindex{append~mode} + \textit{append-only} (vedi sez.~\ref{sec:file_perm_overview}) se supportati.\\ - \const{CAP\_MKNOD} & Creare - \index{file!di~dispositivo} file di dispositivo - con \func{mknod} (vedi + \const{CAP\_MKNOD} & Creare \index{file!di~dispositivo} file di + dispositivo con \func{mknod} (vedi sez.~\ref{sec:file_mknod}) (dal kernel 2.4).\\ \const{CAP\_NET\_ADMIN} & Eseguire alcune operazioni privilegiate sulla rete.\\ - \const{CAP\_NET\_BIND\_SERVICE}& Porsi in ascolto - su porte riservate (vedi + \const{CAP\_NET\_BIND\_SERVICE}& Porsi in ascolto su porte riservate (vedi sez.~\ref{sec:TCP_func_bind}).\\ \const{CAP\_NET\_BROADCAST}& Consentire l'uso di socket in \itindex{broadcast} \textit{broadcast} e \itindex{multicast} \textit{multicast}.\\ - \const{CAP\_NET\_RAW} & Usare socket \texttt{RAW} e - \texttt{PACKET} (vedi sez.~\ref{sec:sock_type}).\\ + \const{CAP\_NET\_RAW} & Usare socket \texttt{RAW} e \texttt{PACKET} + (vedi sez.~\ref{sec:sock_type}).\\ \const{CAP\_SETPCAP} & Effettuare modifiche privilegiate alle \textit{capabilities}.\\ - \const{CAP\_SYS\_ADMIN} & Eseguire una serie di compiti - amministrativi.\\ - \const{CAP\_SYS\_BOOT} & Eseguire un riavvio del - sistema (vedi sez.~\ref{sec:sys_reboot}).\\ - \const{CAP\_SYS\_CHROOT}& Eseguire la funzione - \func{chroot} (vedi sez.~\ref{sec:file_chroot}).\\ + \const{CAP\_SYS\_ADMIN} & Eseguire una serie di compiti amministrativi.\\ + \const{CAP\_SYS\_BOOT} & Eseguire un riavvio del sistema (vedi + sez.~\ref{sec:sys_reboot}).\\ + \const{CAP\_SYS\_CHROOT}& Eseguire la funzione \func{chroot} (vedi + sez.~\ref{sec:file_chroot}).\\ \const{CAP\_MAC\_ADMIN} & Amministrare il \textit{Mandatory Access Control} di Smack (dal kernel 2.6.25).\\ \const{CAP\_MAC\_OVERRIDE}& Evitare il \textit{Mandatory Access Control} di Smack (dal kernel 2.6.25).\\ - \const{CAP\_SYS\_MODULE}& Caricare e rimuovere moduli del - kernel.\\ - \const{CAP\_SYS\_NICE} & Modificare le varie priorità dei - processi (vedi sez.~\ref{sec:proc_priority}).\\ - \const{CAP\_SYS\_PACCT} & Usare le funzioni di - \textit{accounting} dei processi (vedi - sez.~\ref{sec:sys_bsd_accounting}).\\ + \const{CAP\_SYS\_MODULE}& Caricare e rimuovere moduli del kernel.\\ + \const{CAP\_SYS\_NICE} & Modificare le varie priorità dei processi (vedi + sez.~\ref{sec:proc_priority}).\\ + \const{CAP\_SYS\_PACCT} & Usare le funzioni di \textit{accounting} dei + processi (vedi + sez.~\ref{sec:sys_bsd_accounting}).\\ \const{CAP\_SYS\_PTRACE}& La capacità di tracciare qualunque processo con \func{ptrace} (vedi sez.~\ref{sec:process_ptrace}).\\ - \const{CAP\_SYS\_RAWIO} & Operare sulle porte - di I/O con \func{ioperm} e \func{iopl} (vedi + \const{CAP\_SYS\_RAWIO} & Operare sulle porte di I/O con \func{ioperm} e + \func{iopl} (vedi sez.~\ref{sec:process_io_port}).\\ - \const{CAP\_SYS\_RESOURCE}& Superare le varie limitazioni - sulle risorse.\\ - \const{CAP\_SYS\_TIME} & Modificare il tempo di sistema - (vedi sez.~\ref{sec:sys_time}).\\ - \const{CAP\_SYS\_TTY\_CONFIG}&Simulare un \textit{hangup} - della console, con la funzione - \func{vhangup}.\\ + \const{CAP\_SYS\_RESOURCE}& Superare le varie limitazioni sulle risorse.\\ + \const{CAP\_SYS\_TIME} & Modificare il tempo di sistema (vedi + sez.~\ref{sec:sys_time}).\\ + \const{CAP\_SYS\_TTY\_CONFIG}&Simulare un \textit{hangup} della console, + con la funzione \func{vhangup}.\\ \const{CAP\_SYSLOG} & Gestire il buffer dei messaggi del kernel, (vedi sez.~\ref{sec:sess_daemon}), introdotta dal kernel 2.6.38 come capacità @@ -7603,16 +7594,14 @@ allocare autonomamente e che al solito deve essere disallocato con \errval{ESRCH}. Gli stessi valori possono essere letti direttamente nel filesystem \textit{proc}, nei file \texttt{/proc//status}; ad esempio per \texttt{init} si otterrà qualcosa del tipo: -\begin{Command} -$ cat /proc/1/status -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{cat /proc/1/status} ... CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff ... -\end{Terminal} +\end{Console} %$ \itindend{capability~state} @@ -7679,14 +7668,14 @@ e si basa su una condizione sulla variabile \var{pid} che se si è usato l'opzione \texttt{-p} è impostata (nella sezione di gestione delle opzioni, che si è tralasciata) al valore del \ids{PID} del processo di cui si vuole leggere le \textit{capabilities} e nulla altrimenti. Nel primo caso -(\texttt{\small 1--6}) si utilizza (\texttt{\small 2}) \func{cap\_get\_proc} +(\texttt{\small 1-6}) si utilizza (\texttt{\small 2}) \func{cap\_get\_proc} per ottenere lo stato delle capacità del processo, nel secondo (\texttt{\small - 7--13}) si usa invece \func{cap\_get\_pid} (\texttt{\small 8}) per leggere + 7-13}) si usa invece \func{cap\_get\_pid} (\texttt{\small 8}) per leggere il valore delle capacità del processo indicato. Il passo successivo è utilizzare (\texttt{\small 15}) \func{cap\_to\_text} per tradurre in una stringa lo stato, e poi (\texttt{\small 16}) stamparlo; infine -(\texttt{\small 18--19}) si libera la memoria allocata dalle precedenti +(\texttt{\small 18-19}) si libera la memoria allocata dalle precedenti funzioni con \func{cap\_free} per poi ritornare dal ciclo principale della funzione. @@ -7705,7 +7694,10 @@ funzione. % cgroup o altro % TODO: trattare la funzione setns e i namespace file descriptors (vedi -% http://lwn.net/Articles/407495/) introdotti con il kernel 3.0 +% http://lwn.net/Articles/407495/) introdotti con il kernel 3.0, altre +% informazioni su setns qui: http://lwn.net/Articles/532748/ +% http://lwn.net/Articles/531498/ + % TODO: spostare chroot e le funzioni affini relative ai container da qualche % parte diversa se è il caso.