X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=5a96413bfd3587a8bd0175848c63f4f7e41319c9;hp=e3b5100df5a3a43bd58cf195bba7f28694283ee7;hb=c56e6721f8ea10764f29995600f1506e72209423;hpb=8f0d759b2a9864c839d8803b2ea12860f386f17d diff --git a/session.tex b/session.tex index e3b5100..5a96413 100644 --- a/session.tex +++ b/session.tex @@ -295,8 +295,8 @@ sia dal processo padre, per impostare il valore nel figlio, che da quest'ultimo, per sé stesso, in modo che il cambiamento di \textit{process group} sia immediato per entrambi; una delle due chiamate sarà ridondante, ma non potendo determinare quale dei due processi viene eseguito per primo, -occorre eseguirle comunque entrambe per evitare di esporsi ad una -\itindex{race~condition} \textit{race condition}. +occorre eseguirle comunque entrambe per evitare di esporsi ad una \textit{race + condition}. Si noti come nessuna delle funzioni esaminate finora permetta di spostare un processo da una sessione ad un altra; infatti l'unico modo di far cambiare @@ -655,21 +655,21 @@ numero di volte dopo di che \cmd{login} esce ed \cmd{init} provvede a rilanciare un'altra istanza di \cmd{getty}. Se invece la password corrisponde \cmd{login} esegue \func{chdir} per -impostare come \index{directory~di~lavoro} directory di lavoro la \textit{home - directory} dell'utente, cambia i diritti di accesso al terminale (con -\func{chown} e \func{chmod}) per assegnarne la titolarità all'utente ed al suo -gruppo principale, assegnandogli al contempo i diritti di lettura e -scrittura.\footnote{oggi queste operazioni, insieme ad altre relative alla - contabilità ed alla tracciatura degli accessi, vengono gestite dalle - distribuzioni più recenti in una maniera generica appoggiandosi a servizi di - sistema come \textit{ConsoleKit}, ma il concetto generale resta - sostanzialmente lo stesso.} Inoltre il programma provvede a costruire gli -opportuni valori per le variabili di ambiente, come \envvar{HOME}, -\envvar{SHELL}, ecc. Infine attraverso l'uso di \func{setuid}, \func{setgid} -e \func{initgroups} verrà cambiata l'identità del proprietario del processo, -infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo invocato tali -funzioni con i privilegi di amministratore, tutti gli \ids{UID} ed i \ids{GID} -(reali, effettivi e salvati) saranno impostati a quelli dell'utente. +impostare come directory di lavoro la \textit{home directory} dell'utente, +cambia i diritti di accesso al terminale (con \func{chown} e \func{chmod}) per +assegnarne la titolarità all'utente ed al suo gruppo principale, assegnandogli +al contempo i diritti di lettura e scrittura.\footnote{oggi queste operazioni, + insieme ad altre relative alla contabilità ed alla tracciatura degli + accessi, vengono gestite dalle distribuzioni più recenti in una maniera + generica appoggiandosi a servizi di sistema come \textit{ConsoleKit}, ma il + concetto generale resta sostanzialmente lo stesso.} Inoltre il programma +provvede a costruire gli opportuni valori per le variabili di ambiente, come +\envvar{HOME}, \envvar{SHELL}, ecc. Infine attraverso l'uso di \func{setuid}, +\func{setgid} e \func{initgroups} verrà cambiata l'identità del proprietario +del processo, infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo +invocato tali funzioni con i privilegi di amministratore, tutti gli \ids{UID} +ed i \ids{GID} (reali, effettivi e salvati) saranno impostati a quelli +dell'utente. A questo punto \cmd{login} provvederà (fatte salve eventuali altre azioni iniziali, come la stampa di messaggi di benvenuto o il controllo della posta) @@ -738,14 +738,14 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni: eseguendo una ulteriore \func{fork} uscendo nel padre e proseguendo nel figlio. In questo caso, non essendo più quest'ultimo un leader di sessione non potrà ottenere automaticamente un terminale di controllo. -\item Eseguire una \func{chdir} per impostare la \index{directory~di~lavoro} - directory di lavoro del processo (su \file{/} o su una directory che - contenga dei file necessari per il programma), per evitare che la directory - da cui si è lanciato il processo resti in uso e non sia possibile rimuoverla - o smontare il filesystem che la contiene. -\item Impostare la \itindex{umask} maschera dei permessi (di solito con - \code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da - chi ha lanciato originariamente il processo. +\item Eseguire una \func{chdir} per impostare la directory di lavoro del + processo (su \file{/} o su una directory che contenga dei file necessari per + il programma), per evitare che la directory da cui si è lanciato il processo + resti in uso e non sia possibile rimuoverla o smontare il filesystem che la + contiene. +\item Impostare la maschera dei permessi (di solito con \code{umask(0)}) in + modo da non essere dipendenti dal valore ereditato da chi ha lanciato + originariamente il processo. \item Chiudere tutti i file aperti che non servono più (in generale tutti); in particolare vanno chiusi i file standard che di norma sono ancora associati al terminale (un'altra opzione è quella di redirigerli verso @@ -772,10 +772,9 @@ La funzione esegue una \func{fork}, per uscire subito, con \func{\_exit}, nel padre, mentre l'esecuzione prosegue nel figlio che esegue subito una \func{setsid}. In questo modo si compiono automaticamente i passi 1 e 2 della precedente lista. Se \param{nochdir} è nullo la funzione imposta anche la -\index{directory~di~lavoro} directory di lavoro su \file{/}, -se \param{noclose} è nullo i file standard vengono rediretti su -\file{/dev/null} (corrispondenti ai passi 4 e 6); in caso di valori non nulli -non viene eseguita nessuna altra azione. +directory di lavoro su \file{/}, se \param{noclose} è nullo i file standard +vengono rediretti su \file{/dev/null} (corrispondenti ai passi 4 e 6); in caso +di valori non nulli non viene eseguita nessuna altra azione. Dato che un programma demone non può più accedere al terminale, si pone il problema di come fare per la notifica di eventuali errori, non potendosi più @@ -1012,8 +1011,8 @@ funzione è originaria di BSD e per utilizzarla deve essere definito La sola differenza con \func{syslog} è quella di prendere invece di una lista di argomenti esplicita un unico argomento finale passato nella forma di una \macro{va\_list}; la funzione risulta utile qualora si ottengano gli argomenti -dalla invocazione di un'altra funzione \index{funzioni!variadic} -\textit{variadic} (si rammenti quanto visto in sez.~\ref{sec:proc_variadic}). +dalla invocazione di un'altra funzione \textit{variadic} (si ricordi quanto +visto in sez.~\ref{sec:proc_variadic}). Per semplificare la gestione della scelta del livello di priorità a partire dal quale si vogliono registrare i messaggi, le funzioni di gestione @@ -1453,9 +1452,9 @@ associato ad un file descriptor; il suo prototipo è: La funzione restituisce il puntatore alla stringa contenente il nome del file di dispositivo del terminale associato a \param{fd}, che però è allocata staticamente e può essere sovrascritta da successive chiamate. Per questo -della funzione esiste anche una versione \index{funzioni!rientranti} -rientrante, \funcd{ttyname\_r}, che non presenta il problema dell'uso di una -zona di memoria statica; il suo prototipo è: +della funzione esiste anche una versione rientrante, \funcd{ttyname\_r}, che +non presenta il problema dell'uso di una zona di memoria statica; il suo +prototipo è: \begin{funcproto}{ \fhead{unistd.h} @@ -1539,7 +1538,7 @@ ne aggiungono degli altri per mantenere ulteriori informazioni.\footnote{la I primi quattro campi sono quattro flag che controllano il comportamento del terminale; essi sono realizzati come maschera binaria, pertanto il tipo -\type{tcflag\_t} è di norma realizzato con un intero senza segno di lunghezza +\typed{tcflag\_t} è di norma realizzato con un intero senza segno di lunghezza opportuna. I valori devono essere specificati bit per bit, avendo cura di non modificare i bit su cui non si interviene.