Modifiche fino a madvise
[gapil.git] / prochand.tex
index d182a42fd90f0149f60ce655ebb6c0bba37ee723..3ba60c60c22e22ec53dc4332903a165f0da4e22d 100644 (file)
@@ -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}