X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=3ba60c60c22e22ec53dc4332903a165f0da4e22d;hp=d182a42fd90f0149f60ce655ebb6c0bba37ee723;hb=dfc23dbc3caad01544e73d2488f8490d9260ebae;hpb=45e080607c5b618a11038a6afc9f79af9931b2da diff --git a/prochand.tex b/prochand.tex index d182a42..3ba60c6 100644 --- a/prochand.tex +++ b/prochand.tex @@ -599,9 +599,8 @@ Oltre ai file aperti i processi figli ereditano dal padre una serie di altre proprietà; la lista dettagliata delle proprietà che padre e figlio hanno in comune dopo l'esecuzione di una \func{fork} è la seguente: \begin{itemize*} -\item i file aperti e gli eventuali flag di \itindex{close-on-exec} - \textit{close-on-exec} impostati (vedi sez.~\ref{sec:proc_exec} e - sez.~\ref{sec:file_fcntl_ioctl}); +\item i file aperti e gli eventuali flag di \textit{close-on-exec} impostati + (vedi sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl_ioctl}); \item gli identificatori per il controllo di accesso: l'\textsl{user-ID reale}, il \textsl{group-ID reale}, l'\textsl{user-ID effettivo}, il \textsl{group-ID effettivo} ed i \textsl{group-ID supplementari} (vedi @@ -613,7 +612,7 @@ comune dopo l'esecuzione di una \func{fork} è la seguente: (vedi sez.~\ref{sec:file_work_dir} e sez.~\ref{sec:file_chroot}); \item la maschera dei permessi di creazione dei file (vedi sez.~\ref{sec:file_perm_management}); -\item la \index{maschera~dei~segnali} maschera dei segnali bloccati (vedi +\item la maschera dei segnali bloccati (vedi sez.~\ref{sec:sig_sigmask}) e le azioni installate (vedi sez.~\ref{sec:sig_gen_beha}); \item i segmenti di memoria condivisa agganciati al processo (vedi @@ -1559,8 +1558,7 @@ seguente: % TODO ===========Importante============= % TODO questo sotto è incerto, verificare % TODO ===========Importante============= -\item la \index{maschera~dei~segnali} maschera dei segnali (si veda - sez.~\ref{sec:sig_sigmask}). +\item la maschera dei segnali (si veda sez.~\ref{sec:sig_sigmask}). \end{itemize*} Una serie di proprietà del processo originale, che non avrebbe senso mantenere @@ -1603,9 +1601,9 @@ nell'esecuzione della funzione \func{exec}, queste sono: \begin{itemize*} \item le operazioni di I/O asincrono (vedi sez.~\ref{sec:file_asyncronous_io}) pendenti vengono cancellate; -\item le \itindex{capabilities} \textit{capabilities} vengono modificate come +\item le \textit{capabilities} vengono modificate come illustrato in sez.~\ref{sec:proc_capabilities}; -\item tutti i \itindex{thread} \textit{thread} tranne il chiamante (vedi +\item tutti i \textit{thread} tranne il chiamante (vedi sez.~\ref{sec:thread_xxx}) sono cancellati e tutti gli oggetti ad essi relativi (vedi sez.~\ref{sec:thread_xxx}) rimossi; \item viene impostato il flag \const{PR\_SET\_DUMPABLE} di \func{prctl} (vedi @@ -1621,18 +1619,23 @@ nell'esecuzione della funzione \func{exec}, queste sono: localizzazione al valore di default POSIX. \end{itemize*} +\itindbeg{close-on-exec} + La gestione dei file aperti nel passaggio al nuovo programma lanciato con -\func{exec} dipende dal valore che ha il flag di \itindex{close-on-exec} -\textit{close-on-exec} (vedi sez.~\ref{sec:file_fcntl_ioctl}) per ciascun -\textit{file descriptor}. I file per cui è impostato vengono chiusi, tutti gli -altri file restano aperti. Questo significa che il comportamento predefinito è -che i file restano aperti attraverso una \func{exec}, a meno di una chiamata -esplicita a \func{fcntl} che imposti il suddetto flag. Per le directory, lo -standard POSIX.1 richiede che esse vengano chiuse attraverso una \func{exec}, -in genere questo è fatto dalla funzione \func{opendir} (vedi +\func{exec} dipende dal valore che ha il flag di \textit{close-on-exec} (vedi +sez.~\ref{sec:file_fcntl_ioctl}) per ciascun \textit{file descriptor}. I file +per cui è impostato vengono chiusi, tutti gli altri file restano +aperti. Questo significa che il comportamento predefinito è che i file restano +aperti attraverso una \func{exec}, a meno di una chiamata esplicita a +\func{fcntl} che imposti il suddetto flag. Per le directory, lo standard +POSIX.1 richiede che esse vengano chiuse attraverso una \func{exec}, in genere +questo è fatto dalla funzione \func{opendir} (vedi sez.~\ref{sec:file_dir_read}) che effettua da sola l'impostazione del flag di -\itindex{close-on-exec} \textit{close-on-exec} sulle directory che apre, in -maniera trasparente all'utente. +\textit{close-on-exec} sulle directory che apre, in maniera trasparente +all'utente. + +\itindend{close-on-exec} + Il comportamento della funzione in relazione agli identificatori relativi al controllo di accesso verrà trattato in dettaglio in sez.~\ref{sec:proc_perms}, @@ -1703,21 +1706,20 @@ problematiche connesse ad una gestione accorta dei privilegi. Come accennato in sez.~\ref{sec:intro_multiuser} il modello base\footnote{in realtà già esistono estensioni di questo modello base, che lo rendono più - flessibile e controllabile, come le \itindex{capabilities} - \textit{capabilities} illustrate in sez.~\ref{sec:proc_capabilities}, le ACL - per i file (vedi sez.~\ref{sec:file_ACL}) o il - \itindex{Mandatory~Access~Control~(MAC)} \textit{Mandatory Access Control} - di \index{SELinux} SELinux; inoltre basandosi sul lavoro effettuato con - SELinux, a partire dal kernel 2.5.x, è iniziato lo sviluppo di una - infrastruttura di sicurezza, i \itindex{Linux~Security~Modules} - \textit{Linux Security Modules}, o LSM, in grado di fornire diversi agganci - a livello del kernel per modularizzare tutti i possibili controlli di - accesso, cosa che ha permesso di realizzare diverse alternative a - \index{SELinux} SELinux.} di sicurezza di un sistema unix-like è fondato sui -concetti di utente e gruppo, e sulla separazione fra l'amministratore -(\textsl{root}, detto spesso anche \textit{superuser}) che non è sottoposto a -restrizioni, ed il resto degli utenti, per i quali invece vengono effettuati i -vari controlli di accesso. + flessibile e controllabile, come le \textit{capabilities} illustrate in + sez.~\ref{sec:proc_capabilities}, le ACL per i file (vedi + sez.~\ref{sec:file_ACL}) o il \textit{Mandatory Access Control} di + \textit{SELinux}; inoltre basandosi sul lavoro effettuato con + \textit{SELinux}, a partire dal kernel 2.5.x, è iniziato lo sviluppo di una + infrastruttura di sicurezza, i \textit{Linux Security Modules}, o LSM, in + grado di fornire diversi agganci a livello del kernel per modularizzare + tutti i possibili controlli di accesso, cosa che ha permesso di realizzare + diverse alternative a \textit{SELinux}.} +di sicurezza di un sistema unix-like è fondato sui concetti di utente e +gruppo, e sulla separazione fra l'amministratore (\textsl{root}, detto spesso +anche \textit{superuser}) che non è sottoposto a restrizioni, ed il resto +degli utenti, per i quali invece vengono effettuati i vari controlli di +accesso. Abbiamo già accennato come il sistema associ ad ogni utente e gruppo due identificatori univoci, lo \itindex{User~ID~(PID)} \textsl{User-ID} @@ -2215,10 +2217,10 @@ chiamata con un vettore di dimensioni adeguate. Infine per impostare i gruppi supplementari di un processo ci sono due funzioni, che possono essere usate solo se si hanno i privilegi di -amministratore.\footnote{e più precisamente se si ha la \itindex{capabilities} - \textit{capability} \macro{CAP\_SETGID}.} La prima delle due è la funzione -di sistema \funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, - ma a differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per +amministratore.\footnote{e più precisamente se si ha la \textit{capability} + \macro{CAP\_SETGID}.} La prima delle due è la funzione di sistema +\funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, ma a + differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per poterla utilizzare deve essere definita la macro \macro{\_BSD\_SOURCE}.} ed il suo prototipo è: @@ -2505,13 +2507,12 @@ un valore qualunque, positivo o negativo, ed il sistema provvederà a troncare il risultato nell'intervallo consentito. Valori positivi comportano maggiore \textit{cortesia} e cioè una diminuzione della priorità, valori negativi comportano invece un aumento della priorità. Con i kernel precedenti il 2.6.12 -solo l'amministratore\footnote{o un processo con la \itindex{capabilities} - \textit{capability} \const{CAP\_SYS\_NICE}, vedi - sez.~\ref{sec:proc_capabilities}.} può specificare valori negativi -di \param{inc} che permettono di aumentare la priorità di un processo, a -partire da questa versione è consentito anche agli utenti normali alzare -(entro certi limiti, che vedremo in sez.~\ref{sec:sys_resource_limit}) la -priorità dei propri processi. +solo l'amministratore\footnote{o un processo con la \textit{capability} + \const{CAP\_SYS\_NICE}, vedi sez.~\ref{sec:proc_capabilities}.} può +specificare valori negativi di \param{inc} che permettono di aumentare la +priorità di un processo, a partire da questa versione è consentito anche agli +utenti normali alzare (entro certi limiti, che vedremo in +sez.~\ref{sec:sys_resource_limit}) la priorità dei propri processi. Gli standard SUSv2 e POSIX.1 prevedono che la funzione ritorni il nuovo valore di \textit{nice} del processo; tuttavia la \textit{system call} di Linux non @@ -2634,18 +2635,18 @@ anche in questo caso per rilevare un errore occorre sempre porre a zero \textit{nice} valido. Si tenga presente che solo l'amministratore\footnote{o più precisamente un - processo con la \itindex{capabilities} \textit{capability} - \const{CAP\_SYS\_NICE}, vedi sez.~\ref{sec:proc_capabilities}.} ha la -possibilità di modificare arbitrariamente le priorità di qualunque -processo. Un utente normale infatti può modificare solo la priorità dei suoi -processi ed in genere soltanto diminuirla. Fino alla versione di kernel -2.6.12 Linux ha seguito le specifiche dello standard SUSv3, e come per tutti i -sistemi derivati da SysV veniva richiesto che l'\ids{UID} reale o quello -effettivo del processo chiamante corrispondessero all'\ids{UID} reale (e solo -a quello) del processo di cui si intendeva cambiare la priorità. A partire -dalla versione 2.6.12 è stata adottata la semantica in uso presso i sistemi -derivati da BSD (SunOS, Ultrix, *BSD), in cui la corrispondenza può essere -anche con l'\ids{UID} effettivo. + processo con la \textit{capability} \const{CAP\_SYS\_NICE}, vedi + sez.~\ref{sec:proc_capabilities}.} ha la possibilità di modificare +arbitrariamente le priorità di qualunque processo. Un utente normale infatti +può modificare solo la priorità dei suoi processi ed in genere soltanto +diminuirla. Fino alla versione di kernel 2.6.12 Linux ha seguito le +specifiche dello standard SUSv3, e come per tutti i sistemi derivati da SysV +veniva richiesto che l'\ids{UID} reale o quello effettivo del processo +chiamante corrispondessero all'\ids{UID} reale (e solo a quello) del processo +di cui si intendeva cambiare la priorità. A partire dalla versione 2.6.12 è +stata adottata la semantica in uso presso i sistemi derivati da BSD (SunOS, +Ultrix, *BSD), in cui la corrispondenza può essere anche con l'\ids{UID} +effettivo. Sempre a partire dal kernel 2.6.12 è divenuto possibile anche per gli utenti ordinari poter aumentare la priorità dei propri processi specificando un @@ -2885,7 +2886,7 @@ sarà reinserito in coda alla lista); l'esecuzione viene ripresa subito solo nel caso che esso sia stato interrotto da un processo a priorità più alta. Solo un processo con i privilegi di amministratore\footnote{più precisamente - con la \itindex{capabilities} capacità \const{CAP\_SYS\_NICE}, vedi + con la capacità \const{CAP\_SYS\_NICE}, vedi sez.~\ref{sec:proc_capabilities}.} può impostare senza restrizioni priorità assolute diverse da zero o politiche \const{SCHED\_FIFO} e \const{SCHED\_RR}. Un utente normale può modificare solo le priorità di @@ -3623,26 +3624,24 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.} \begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}} \item[\const{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle - \itindex{capabilities} \textit{capabilities} (vedi - sez.~\ref{sec:proc_capabilities}). La funzione ritorna 1 se la capacità - specificata nell'argomento \param{arg2} (con una delle costanti di - tab.~\ref{tab:proc_capabilities}) è presente nel \textit{capabilities - bounding set} del processo e zero altrimenti, se \param{arg2} non è un - valore valido si avrà un errore di \errval{EINVAL}. Introdotta a partire - dal kernel 2.6.25. + \textit{capability} (vedi sez.~\ref{sec:proc_capabilities}). La funzione + ritorna 1 se la capacità specificata nell'argomento \param{arg2} (con una + delle costanti di tab.~\ref{tab:proc_capabilities}) è presente nel + \textit{capabilities bounding set} del processo e zero altrimenti, + se \param{arg2} non è un valore valido si avrà un errore di \errval{EINVAL}. + Introdotta a partire dal kernel 2.6.25. \item[\const{PR\_CAPBSET\_DROP}] Rimuove permanentemente una delle - \itindex{capabilities} \textit{capabilities} (vedi - sez.~\ref{sec:proc_capabilities}) dal processo e da tutti i suoi - discendenti. La funzione cancella la capacità specificata + \textit{capabilities} (vedi sez.~\ref{sec:proc_capabilities}) dal processo e + da tutti i suoi discendenti. La funzione cancella la capacità specificata nell'argomento \param{arg2} con una delle costanti di - tab.~\ref{tab:proc_capabilities} dal \textit{capabilities bounding set} - \itindex{capabilities~bounding~set} del processo. L'operazione richiede i - privilegi di amministratore (la capacità \const{CAP\_SETPCAP}), altrimenti - la chiamata fallirà con un errore di \errcode{EPERM}; se il valore - di \param{arg2} non è valido o se il supporto per le \textit{file - capabilities} non è stato compilato nel kernel la chiamata fallirà con un - errore di \errval{EINVAL}. Introdotta a partire dal kernel 2.6.25. + tab.~\ref{tab:proc_capabilities} dal \textit{capabilities bounding set} del + processo. L'operazione richiede i privilegi di amministratore (la capacità + \const{CAP\_SETPCAP}), altrimenti la chiamata fallirà con un errore di + \errcode{EPERM}; se il valore di \param{arg2} non è valido o se il supporto + per le \textit{file capabilities} non è stato compilato nel kernel la + chiamata fallirà con un errore di \errval{EINVAL}. Introdotta a partire dal + kernel 2.6.25. \item[\const{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la terminazione di un processo a causa di un segnale per il quale è prevista la @@ -3724,8 +3723,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. a partire dal kernel 2.4.21, solo su PowerPC. \item[\const{PR\_SET\_KEEPCAPS}] Consente di controllare quali - \itindex{capabilities} \textit{capabilities} vengono cancellate quando si - esegue un cambiamento di \ids{UID} del processo (per i dettagli si veda + \textit{capabilities} vengono cancellate quando si esegue un cambiamento di + \ids{UID} del processo (per i dettagli si veda sez.~\ref{sec:proc_capabilities}, in particolare quanto illustrato a pag.~\pageref{sec:capability-uid-transition}). Un valore nullo (il default) per \param{arg2} comporta che vengano cancellate, il valore 1 che vengano @@ -3736,9 +3735,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. dal kernel 2.2.18. \item[\const{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione - il valore del flag di controllo delle \itindex{capabilities} - \textit{capabilities} impostato con \const{PR\_SET\_KEEPCAPS}. Introdotta a - partire dal kernel 2.2.18. + il valore del flag di controllo delle \textit{capabilities} impostato con + \const{PR\_SET\_KEEPCAPS}. Introdotta a partire dal kernel 2.2.18. \item[\const{PR\_SET\_NAME}] Imposta il nome del processo chiamante alla stringa puntata da \param{arg2}, che deve essere di tipo ``\ctyp{char *}''. Il @@ -3803,9 +3801,9 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. da \param{arg2}; per i dettagli sul significato dei \textit{securebits} si veda sez.~\ref{sec:proc_capabilities}, ed in particolare i valori di tab.~\ref{tab:securebits_values} e la relativa trattazione. L'operazione - richiede i privilegi di amministratore (la \itindex{capabilities} capacità - \const{CAP\_SETPCAP}), altrimenti la chiamata fallirà con un errore di - \errval{EPERM}. Introdotta a partire dal kernel 2.6.26. + richiede i privilegi di amministratore (la capacità \const{CAP\_SETPCAP}), + altrimenti la chiamata fallirà con un errore di \errval{EPERM}. Introdotta a + partire dal kernel 2.6.26. \item[\const{PR\_GET\_SECUREBITS}] Ottiene come valore di ritorno della funzione l'impostazione corrente per i \itindex{securebits}