X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=filedir.tex;h=1d1f3861886ec3a4fa6fe3c8c2f3576995863fbd;hb=f8d990a1b2a184dba66301ae20d1f7e8f300c139;hp=461bcacb47675dc6acad30db75d0c61558eee390;hpb=4a64ffb309155737e851268a29e4217987a9c15e;p=gapil.git diff --git a/filedir.tex b/filedir.tex index 461bcac..1d1f386 100644 --- a/filedir.tex +++ b/filedir.tex @@ -4870,7 +4870,7 @@ cancellarle dal \textit{permitted set}. Per questo motivo a partire dal kernel 2.6.26, se le \textit{file capabilities} sono abilitate, ad ogni processo viene stata associata una -ulteriore maschera binaria, chiamata \textit{securebits flags}, il cui sono +ulteriore maschera binaria, chiamata \textit{securebits flags}, su cui sono mantenuti una serie di flag (vedi tab.~\ref{tab:securebits_values}) il cui valore consente di modificare queste regole speciali che si applicano ai processi con \textit{user-ID} nullo. La maschera viene sempre mantenuta @@ -5143,8 +5143,8 @@ operazioni;\footnote{vale a dire la richiesta che l'user-ID effettivo del sez.~\ref{sec:proc_setuid}) coincida con quello del proprietario.} queste comprendono i cambiamenti dei permessi e dei tempi del file (vedi sez.~\ref{sec:file_perm_management} e sez.~\ref{sec:file_file_times}), le -impostazioni degli attributi estesi e delle ACL (vedi -sez.~\ref{sec:file_xattr} e \ref{sec:file_ACL}), poter ignorare lo +impostazioni degli attributi dei file (vedi sez.~\ref{sec:file_ioctl}) e delle +ACL (vedi sez.~\ref{sec:file_xattr} e \ref{sec:file_ACL}), poter ignorare lo \itindex{sticky~bit} \textit{sticky bit} nella cancellazione dei file (vedi sez.~\ref{sec:file_special_perm}), la possibilità di impostare il flag di \const{O\_NOATIME} con \func{open} e \func{fcntl} (vedi @@ -5173,7 +5173,7 @@ sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo di file aperti,\footnote{quello indicato da \procfile{/proc/sys/fs/file-max}.} effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi sez.~\ref{sec:keyctl_management}), usare la funzione \func{lookup\_dcookie}, -usare \const{CLONE\_NEWNS} con \func{unshare}, (vedi +usare \const{CLONE\_NEWNS} con \func{unshare} e \func{clone}, (vedi sez.~\ref{sec:process_clone}). Originariamente \const{CAP\_SYS\_NICE} riguardava soltanto la capacità di @@ -5196,7 +5196,6 @@ risorse di un processo (vedi sez.~\ref{sec:sys_resource_limit}) e quelle sul numero di processi, ed i limiti sulle dimensioni dei messaggi delle code del SysV IPC (vedi sez.~\ref{sec:ipc_sysv_mq}). - Per la gestione delle \textit{capabilities} il kernel mette a disposizione due funzioni che permettono rispettivamente di leggere ed impostare i valori dei tre insiemi illustrati in precedenza. Queste due funzioni sono \funcd{capget} @@ -5226,7 +5225,6 @@ loro rispettivi prototipi sono: \end{errlist} ed inoltre \errval{EFAULT} ed \errval{EINVAL}. } - \end{functions} Queste due funzioni prendono come argomenti due tipi di dati dedicati, @@ -5433,8 +5431,9 @@ di tipo \type{cap\_flag\_t} che può assumere esclusivamente\footnote{si tratta definizione che si trova in \texttt{/usr/include/sys/capability.h}.} uno dei valori illustrati in tab.~\ref{tab:cap_set_identifier}. -Si possono inoltre confrontare in maniera diretta due \textit{capability - state} con la funzione \funcd{cap\_compare}; il suo prototipo è: +Si possono inoltre confrontare in maniera diretta due diversi +\textit{capability state} con la funzione \funcd{cap\_compare}; il suo +prototipo è: \begin{functions} \headdecl{sys/capability.h} \funcdecl{int cap\_compare(cap\_t cap\_a, cap\_t cap\_b)} @@ -5539,9 +5538,10 @@ tab.~\ref{tab:cap_value_type}. Per semplificare la gestione delle \textit{capabilities} l'interfaccia prevede che sia possibile utilizzare anche una rappresentazione testuale del contenuto -di un \textit{capability state} e fornisce le opportune funzioni di gestione; -la prima di queste, che consente di ottenere la rappresentazione testuale, è -\funcd{cap\_to\_text}, il cui prototipo è: +di un \textit{capability state} e fornisce le opportune funzioni di +gestione;\footnote{entrambe erano previste dalla bozza dello standard + POSIX.1e.} la prima di queste, che consente di ottenere la rappresentazione +testuale, è \funcd{cap\_to\_text}, il cui prototipo è: \begin{functions} \headdecl{sys/capability.h} @@ -5574,7 +5574,7 @@ Ciascuna proposizione è nella forma di un elenco di capacità, espresso con i nomi di tab.~\ref{tab:proc_capabilities} separati da virgole, seguito da un operatore, e dall'indicazione degli insiemi a cui l'operazione si applica. I nomi delle capacità possono essere scritti sia maiuscoli che minuscoli, viene -inoltre riconosciuto il nome speciale \texttt{all} che è equivalmente a +inoltre riconosciuto il nome speciale \texttt{all} che è equivalente a scrivere la lista completa. Gli insiemi sono identificati dalle tre lettere iniziali: ``\texttt{p}'' per il \textit{permitted}, ``\texttt{i}'' per l'\textit{inheritable} ed ``\texttt{e}'' per l'\textit{effective} che devono @@ -5589,32 +5589,81 @@ o negli insiemi specificati, ignorando tutto il resto. I due operatori possono anche essere combinati nella stessa proposizione, per aggiungere e togliere le capacità dell'elenco da insiemi diversi. -La assegnazione si applica invece su tutti gli insiemi allo stesso tempo, +L'assegnazione si applica invece su tutti gli insiemi allo stesso tempo, pertanto l'uso di ``\texttt{=}'' è equivalente alla cancellazione preventiva di tutte le capacità ed alla impostazione di quelle elencate negli insiemi -specificati, pertanto in genere lo si usa una sola volta all'inizio della -stringa. In tal caso l'elenco delle capacità può non essere indicato e viene -assunto che si stia facendo riferimento a tutte quante senza doverlo scrivere -esplicitamente. +specificati, questo significa che in genere lo si usa una sola volta +all'inizio della stringa. In tal caso l'elenco delle capacità può non essere +indicato e viene assunto che si stia facendo riferimento a tutte quante senza +doverlo scrivere esplicitamente. Come esempi avremo allora che un processo non privilegiato di un utente, che non ha nessuna capacità attiva, avrà una rappresentazione nella forma ``\texttt{=}'' che corrisponde al fatto che nessuna capacità viene assegnata a nessun insieme (vale la cancellazione preventiva), mentre un processo con privilegi di amministratore avrà una rappresentazione nella forma -``\texttt{=ep}'' in cui tutte le capacità vengono assegnati agli insiemi -\textit{permitted} ed \textit{effective} (l' \textit{inheritable} è ignorato +``\texttt{=ep}'' in cui tutte le capacità vengono assegnate agli insiemi +\textit{permitted} ed \textit{effective} (e l'\textit{inheritable} è ignorato in quanto per le regole viste a pag.~\ref{sec:capability-uid-transition} le -capacità verranno attivate attraverso una \func{exec}). Infine, come esempio -meno banale, otterremo per \texttt{init} una rappresentazione nella forma -``\texttt{=ep cap\_setpcap-e}'' dato che come accennato tradizionalmente -\const{CAP\_SETPCAP} è sempre stata rimossa da detto processo. +capacità verranno comunque attivate attraverso una \func{exec}). Infine, come +esempio meno banale dei precedenti, otterremo per \texttt{init} una +rappresentazione nella forma ``\texttt{=ep cap\_setpcap-e}'' dato che come +accennato tradizionalmente \const{CAP\_SETPCAP} è sempre stata rimossa da +detto processo. + +Viceversa per passare ottenere un \textit{capability state} dalla sua +rappresentazione testuale si può usare \funcd{cap\_from\_text}, il cui +prototipo è: +\begin{functions} + \headdecl{sys/capability.h} + + \funcdecl{cap\_t cap\_from\_text(const char *string)} + + Crea un \textit{capability state} dalla sua rappresentazione testuale. + + \bodydesc{La funzione ritorna un puntatore valido in caso di successo e + \val{NULL} in caso di errore, nel qual caso \var{errno} può assumere i + valori \errval{EINVAL} o \errval{ENOMEM}.} +\end{functions} + +La funzione restituisce il puntatore ad un \textit{capability state} +inizializzato con i valori indicati nella stringa \param{string} che ne +contiene la rappresentazione testuale. La memoria per il \textit{capability + state} viene allocata automaticamente dalla funzione e dovrà essere liberata +con \func{cap\_free}. + +Alle due funzioni citate se ne aggiungono altre due che consentono di +convertire i valori delle costanti di tab.~\ref{tab:proc_capabilities} nelle +stringhe usate nelle rispettive rappresentazioni e viceversa. Le due funzioni, +\func{cap\_to\_name} e \func{cap\_from\_name}, sono estensioni specifiche di +Linux ed i rispettivi prototipi sono: +\begin{functions} + \headdecl{sys/capability.h} + + \funcdecl{char * cap\_to\_name(cap\_value\_t cap)} + \funcdecl{int cap\_from\_name(const char *name, cap\_value\_t *cap\_p)} + Convertono le \textit{capabilities} dalle costanti alla rappresentazione + testuale e viceversa. + + \bodydesc{La funzione \func{cap\_to\_name} ritorna un valore diverso da + \val{NULL} in caso di successo e \val{NULL} in caso di errore, mentre + \func{cap\_to\_name} ritorna rispettivamente 0 e $-1$; per entrambe in + caso di errore \var{errno} può assumere i valori \errval{EINVAL} o + \errval{ENOMEM}. } +\end{functions} + +La prima funzione restituisce la stringa (allocata automaticamente e che dovrà +essere liberata con \func{cap\_free}) che corrisponde al valore della +capacità \param{cap}, mentre la seconda restituisce nella variabile puntata +da \param{cap\_p} il valore della capacità rappresentata dalla +stringa \param{name}. Fin quei abbiamo trattato solo le funzioni di servizio relative alla -manipolazione dei \textit{capability state}; l'interfaccia di gestione prevede -però anche le funzioni per la gestione delle \textit{capabilities} stesse. La -prima di queste è \funcd{cap\_get\_proc} che consente la lettura delle -\textit{capabilities} del processo corrente, il suo prototipo è: +manipolazione dei \textit{capability state} come strutture di dati; +l'interfaccia di gestione prevede però anche le funzioni per trattare le +\textit{capabilities} presenti nei processi. La prima di queste funzioni è +\funcd{cap\_get\_proc} che consente la lettura delle \textit{capabilities} del +processo corrente, il suo prototipo è: \begin{functions} \headdecl{sys/capability.h} @@ -5884,7 +5933,7 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % LocalWords: ptrace accounting NICE RESOURCE TTY CONFIG hangup vhangup dell' % LocalWords: LEASE lease SETFCAP AUDIT permitted inherited inheritable AND nn % LocalWords: bounding execve fork capget capset header hdrp datap ESRCH undef -% LocalWords: version libcap lcap clear ncap caps pag capgetp CapInh CapPrm +% LocalWords: version libcap lcap clear ncap caps pag capgetp CapInh CapPrm RT % LocalWords: fffffeff CapEff getcap scheduling lookup dqinfo SETINFO GETFMT % LocalWords: NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir % LocalWords: btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT @@ -5895,7 +5944,8 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % LocalWords: QIF BLIMITS bhardlimit bsoftlimit ILIMITS ihardlimit isoftlimit % LocalWords: INODES LIMITS USAGE valid dqi IIF BGRACE bgrace IGRACE igrace % LocalWords: Python Truelite Srl quotamodule Repository who nell' dall' KEEP -% LocalWords: SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I +% LocalWords: SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I IOPRIO +% LocalWords: CAPBSET CLASS IDLE dcookie overflow DIFFERS %%% Local Variables: %%% mode: latex