X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=ef75e52dd8c52b2235666884701029c885a738a7;hp=a45c0d6a11482ef856dd2547765c57b837c18aef;hb=d3cbe0a3984b7189d086ccb631d5b3b1955e223c;hpb=6725bff66b54efcaa3c054d0424721f0adb6396f diff --git a/prochand.tex b/prochand.tex index a45c0d6..ef75e52 100644 --- a/prochand.tex +++ b/prochand.tex @@ -256,8 +256,8 @@ un processo e le varie relazioni fra processi utilizzate per definire una sessione. Oltre al \acr{pid} e al \acr{ppid}, (e a quelli che vedremo in -\secref{sec:sess_xxx}, relativi al controllo di sessione), ad ogni processo -vengono associati degli altri identificatori che vengono usati per il +\secref{sec:sess_proc_group}, relativi al controllo di sessione), ad ogni +processo vengono associati degli altri identificatori che vengono usati per il controllo di accesso. Questi servono per determinare se un processo può eseguire o meno le operazioni richieste, a seconda dei privilegi e dell'identità di chi lo ha posto in esecuzione; l'argomento è complesso e sarà @@ -607,7 +607,7 @@ comune dopo l'esecuzione di una \func{fork} \secref{sec:proc_access_id}). \item gli identificatori per il controllo di sessione: il \textit{process groupid} e il \textit{session id} ed il terminale di controllo (vedi - \secref{sec:sess_xxx} e \secref{sec:sess_xxx}). + \secref{sec:sess_proc_group}). \item la directory di lavoro e la directory radice (vedi \secref{sec:file_work_dir} e \secref{sec:file_chroot}). \item la maschera dei permessi di creazione (vedi \secref{sec:file_umask}). @@ -695,7 +695,7 @@ eseguite alla chiusura di un processo \item se la conclusione di un processo rende orfano un \textit{process group} ciascun membro del gruppo viene bloccato, e poi gli vengono inviati in successione i segnali \macro{SIGHUP} e \macro{SIGCONT} - (vedi \secref{sec:sess_xxx}). + (vedi \secref{sec:sess_ctrl_term}). \end{itemize*} Oltre queste operazioni è però necessario poter disporre di un meccanismo @@ -767,15 +767,15 @@ informazioni riguardo ai processi che sta terminando. Questo viene fatto mantenendo attiva la voce nella tabella dei processi, e memorizzando alcuni dati essenziali, come il \acr{pid}, i tempi di CPU usati -dal processo (vedi \secref{sec:sys_unix_time}) e lo stato di -terminazione\footnote{NdA verificare esattamente cosa c'è!}, mentre la memoria -in uso ed i file aperti vengono rilasciati immediatamente. I processi che sono -terminati, ma il cui stato di terminazione non è stato ancora ricevuto dal -padre sono chiamati \textit{zombie}, essi restano presenti nella tabella dei -processi ed in genere possono essere identificati dall'output di \cmd{ps} per -la presenza di una \texttt{Z} nella colonna che ne indica lo stato. Quando il -padre effettuerà la lettura dello stato di uscita anche questa informazione, -non più necessaria, verrà scartata e la terminazione potrà dirsi completamente +dal processo (vedi \secref{sec:sys_unix_time}) e lo stato di terminazione, +mentre la memoria in uso ed i file aperti vengono rilasciati immediatamente. I +processi che sono terminati, ma il cui stato di terminazione non è stato +ancora ricevuto dal padre sono chiamati \textit{zombie}, essi restano presenti +nella tabella dei processi ed in genere possono essere identificati +dall'output di \cmd{ps} per la presenza di una \texttt{Z} nella colonna che ne +indica lo stato (vedi \tabref{tab:proc_proc_states}). Quando il padre +effettuerà la lettura dello stato di uscita anche questa informazione, non più +necessaria, verrà scartata e la terminazione potrà dirsi completamente conclusa. Possiamo utilizzare il nostro programma di prova per analizzare anche questa @@ -871,9 +871,10 @@ cercato sia ancora attivo. Per questo motivo lo standard POSIX.1 ha introdotto la funzione \func{waitpid} che effettua lo stesso servizio, ma dispone di una serie di funzionalità più -ampie, legate anche al controllo di sessione. Dato che è possibile ottenere -lo stesso comportamento di \func{wait} si consiglia di utilizzare sempre -questa funzione, il cui prototipo è: +ampie, legate anche al controllo di sessione (si veda +\ref{sec:sess_job_control}). Dato che è possibile ottenere lo stesso +comportamento di \func{wait} si consiglia di utilizzare sempre questa +funzione, il cui prototipo è: \begin{functions} \headdecl{sys/types.h} \headdecl{sys/wait.h} @@ -896,7 +897,7 @@ sempre fino a che un processo figlio non termina, mentre \func{waitpid} ha la possibilità si specificare un'opzione \macro{WNOHANG} che ne previene il blocco; inoltre \func{waitpid} può specificare quale processo attendere sulla base del valore fornito dall'argomento \param{pid}, secondo lo -specchietto riportato in \ntab: +specchietto riportato in \tabref{tab:proc_waidpid_pid}: \begin{table}[!htb] \centering \footnotesize @@ -905,7 +906,8 @@ specchietto riportato in \ntab: \textbf{Valore} & \textbf{Macro} &\textbf{Significato}\\ \hline \hline - $<-1$& -- & attende per un figlio il cui \textit{process group} è uguale al + $<-1$& -- & attende per un figlio il cui \textit{process group} (vedi + \secref{sec:sess_proc_group}) è uguale al valore assoluto di \var{pid}. \\ $-1$ & \macro{WAIT\_ANY} & attende per un figlio qualsiasi, usata in questa maniera è equivalente a \func{wait}.\\ @@ -923,12 +925,16 @@ specchietto riportato in \ntab: Il comportamento di \func{waitpid} può inoltre essere modificato passando delle opportune opzioni tramite l'argomento \param{option}. I valori possibili sono il già citato \macro{WNOHANG}, che previene il blocco della funzione -quando il processo figlio non è terminato, e \macro{WUNTRACED} (usata per il -controllo di sessione, trattato in \capref{cha:session}) che fa ritornare la -funzione anche per i processi figli che sono bloccati ed il cui stato non è -stato ancora riportato al padre. Il valore dell'opzione deve essere -specificato come maschera binaria ottenuta con l'OR delle suddette costanti -con zero. +quando il processo figlio non è terminato, e \macro{WUNTRACED}. Quest'ultimo +viene generalmente usato per il controllo di sessione, (trattato in +\secref{sec:sess_job_control}) in quanto permette di identificare i processi +bloccati. La funzione infatti in tal caso ritorna, restituendone il \acr{pid}, +se c'è un processo figlio che è entrato in stato di sleep (vedi +\tabref{tab:proc_proc_states}) di cui non si è ancora letto lo stato (con +questa stessa opzione). Il valore dell'opzione deve essere specificato come +maschera binaria ottenuta con l'OR delle suddette costanti con zero. In Linux +sono previste altre opzioni non standard relative al comportamento con i +thread, che saranno trattate in \secref{sec:thread_xxx}. La terminazione di un processo figlio è chiaramente un evento asincrono rispetto all'esecuzione di un programma e può avvenire in un qualunque @@ -1109,9 +1115,9 @@ Sostituiscono l'immagine corrente del processo con quella indicata nel primo argomento. I parametri successivi consentono di specificare gli argomenti a linea di comando e l'ambiente ricevuti dal nuovo processo. -\bodydesc{Queste funzioni ritornano solo in caso di errore, restituendo - -1; nel qual caso \var{errno} andrà ad assumere i valori visti in - precedenza per \func{execve}.} +\bodydesc{Queste funzioni ritornano solo in caso di errore, restituendo -1; + nel qual caso \var{errno} assumerà i valori visti in precedenza per + \func{execve}.} \end{functions} Per capire meglio le differenze fra le funzioni della famiglia si può fare @@ -1182,7 +1188,7 @@ indicato dal parametro \var{path}, che viene interpretato come il \begin{figure}[htb] \centering - \includegraphics[width=13cm]{img/exec_rel} + \includegraphics[width=15cm]{img/exec_rel} \caption{La interrelazione fra le sei funzioni della famiglia \func{exec}.} \label{fig:proc_exec_relat} \end{figure} @@ -1202,9 +1208,9 @@ la lista completa (\acr{ppid}). \item l'\textsl{userid reale}, il \textit{groupid reale} ed i \textsl{groupid supplementari} (vedi \secref{sec:proc_access_id}). -\item il \textit{session id} ed il \textit{process groupid} (vedi - \secref{sec:sess_xxx}). -\item il terminale di controllo (vedi \secref{sec:sess_xxx}). +\item il \textit{session id} (\acr{sid}) ed il \textit{process groupid} + (\acr{pgid}), vedi \secref{sec:sess_proc_group}. +\item il terminale di controllo (vedi \secref{sec:sess_ctrl_term}). \item il tempo restante ad un allarme (vedi \secref{sec:sig_alarm_abort}). \item la directory radice e la directory di lavoro corrente (vedi \secref{sec:file_work_dir}). @@ -1285,8 +1291,12 @@ problematiche connesse ad una gestione accorta dei privilegi. Come accennato in \secref{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 \textit{capabilities}, le ACL per i file - o il \textit{Mandatory Access Control} di SELinux.} di sicurezza di un -sistema unix-like è fondato sui concetti di utente e gruppo, e sulla + o il \textit{Mandatory Access Control} di SELinux; inoltre basandosi sul + lavoro effettuato con SELinux, a partire dal kernel 2.5.x, è iniziato lo + sviluppo di una infrastruttura di sicurezza, il \textit{Linux Security + Modules}, ol LSM, in grado di fornire diversi agganci a livello del kernel + per modularizzare tutti i possibili controlli di accesso.} 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. @@ -1741,8 +1751,8 @@ questa funzione \param{size}. \bodydesc{La funzione restituisce il numero di gruppi letti in caso di - successo e -1 in caso di fallimento, nel qual caso \var{errno} viene - impostata a: + successo e -1 in caso di fallimento, nel qual caso \var{errno} assumerà + i valori: \begin{errlist} \item[\macro{EFAULT}] \param{list} non ha un indirizzo valido. \item[\macro{EINVAL}] il valore di \param{size} è diverso da zero ma @@ -1783,7 +1793,7 @@ delle due supplementari del processo ai valori specificati in \param{list}. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} viene impostata a: + fallimento, nel qual caso \var{errno} assumerà i valori: \begin{errlist} \item[\macro{EFAULT}] \param{list} non ha un indirizzo valido. \item[\macro{EPERM}] il processo non ha i privilegi di amministratore. @@ -1803,7 +1813,7 @@ un utente specifico, si pu aggiungendo il gruppo addizionale \param{group}. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} viene impostata agli stessi valori di + fallimento, nel qual caso \var{errno} assumerà gli stessi valori di \func{setgroups} più \macro{ENOMEM} quando non c'è memoria sufficiente per allocare lo spazio per informazioni dei gruppi.} \end{functions}