From e14c16e9341a6baa99b5e93f733150ba72dfce96 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 5 Sep 2011 14:28:48 +0000 Subject: [PATCH] Ancora su prctl, quasi completate le opzioni, riposizionati alcuni TODO. --- filedir.tex | 13 ++-- prochand.tex | 165 ++++++++++++++++++++++++++++++++++++++++++--------- system.tex | 5 ++ 3 files changed, 147 insertions(+), 36 deletions(-) diff --git a/filedir.tex b/filedir.tex index e959de8..8e93228 100644 --- a/filedir.tex +++ b/filedir.tex @@ -4848,13 +4848,14 @@ illustrati in tab.~\ref{tab:proc_uid_gid}, si avrà allora che: quelle capacità della precedente lista che sono presenti nel suo \textit{permitted set}. \item se come risultato di una transizione riguardante gli identificativi dei - gruppi \texttt{real}, \textit{saved} ed \textit{effective} in cui si passa + gruppi \textit{real}, \textit{saved} ed \textit{effective} in cui si passa da una situazione in cui uno di questi era nullo ad una in cui sono tutti non nulli,\footnote{in sostanza questo è il caso di quando si chiama \func{setuid} per rimuovere definitivamente i privilegi di amministratore da un processo.} verranno azzerati completamente sia il \textit{permitted set} che l'\textit{effective set}. \end{enumerate*} +\label{sec:capability-uid-transition} La combinazione di tutte queste regole consente di riprodurre il comportamento ordinario di un sistema di tipo Unix tradizionale, ma può risultare @@ -5062,13 +5063,11 @@ che è opportuno dettagliare maggiormente. \const{CAP\_SETPCAP} & La capacità di modifiche privilegiate alle \textit{capabilities}.\\ \const{CAP\_SYS\_ADMIN} & La capacità di eseguire una serie di compiti - amministrativi. \\ + amministrativi.\\ \const{CAP\_SYS\_BOOT} & La capacità di fare eseguire un riavvio del - sistema.\\ -% TODO trattare reboot e kexec + sistema (vedi sez.~\ref{sec:sys_reboot}).\\ \const{CAP\_SYS\_CHROOT}& La capacità di eseguire la funzione - \func{chroot} (vedi - sez.~\ref{sec:file_chroot}).\\ + \func{chroot} (vedi sez.~\ref{sec:file_chroot}).\\ \const{CAP\_MAC\_ADMIN} & La capacità amministrare il \textit{Mandatory Access Control} di Smack (dal kernel 2.6.25).\\ \const{CAP\_MAC\_OVERRIDE}& La capacità evitare il \textit{Mandatory @@ -5076,7 +5075,7 @@ che è opportuno dettagliare maggiormente. \const{CAP\_SYS\_MODULE}& La capacità di caricare e rimuovere moduli del kernel.\\ \const{CAP\_SYS\_NICE} & La capacità di modificare le varie priorità dei - processi.\\ + processi (vedi sez.~\ref{sec:proc_priority}).\\ \const{CAP\_SYS\_PACCT} & La capacità di usare le funzioni di \textit{accounting} dei processi (vedi sez.~\ref{sec:sys_bsd_accounting}).\\ diff --git a/prochand.tex b/prochand.tex index 8d7487b..e3aa1e0 100644 --- a/prochand.tex +++ b/prochand.tex @@ -3363,7 +3363,7 @@ predefinite del seguente elenco, che illustra quelle disponibili al momento: kernel 2.3.20, fino al kernel 2.6.12 e per i kernel successivi al 2.6.17 era possibile usare solo un valore 0 di \param{arg2} per disattivare il flag ed un valore 1 per attivarlo, nei kernel dal 2.6.13 al 2.6.17 è stato - supportato anche il valore 2 che causava la generazione di un + supportato anche il valore 2, che causava la generazione di un \itindex{core~dump} \textit{core dump} leggibile solo dall'amministratore.\footnote{la funzionalità è stata rimossa per motivi di sicurezza, in quanto consentiva ad un utente normale di creare un file di @@ -3378,40 +3378,143 @@ predefinite del seguente elenco, che illustra quelle disponibili al momento: sono: \const{PR\_ENDIAN\_BIG} (\textit{big endian}), \const{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e \const{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del - PowerPC) Introdotta a partire dal kernel 2.6.18, solo per architettura + PowerPC). Introdotta a partire dal kernel 2.6.18, solo per architettura PowerPC. \item[\const{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianess} del processo chiamante, salvato sulla variabile puntata da \param{arg2} che deve essere passata come di tipo \type{(int *)}. Introdotta a partire dal kernel 2.6.18, solo su PowerPC. -\item[\const{PR\_SET\_FPEMU}] Introdotta a partire dal kernel 2.4.18, solo su - ia64. -\item[\const{PR\_GET\_FPEMU}] Introdotta a partire dal kernel 2.4.18, solo su - ia64. -\item[\const{PR\_SET\_FPEXC}] Introdotta a partire dal kernel 2.4.21, solo su - PowerPC. -\item[\const{PR\_GET\_FPEXC}] Introdotta a partire dal kernel 2.4.21, solo su - PowerPC. -\item[\const{PR\_SET\_KEEPCAPS}] Introdotta a partire dal kernel 2.2.18. -\item[\const{PR\_GET\_KEEPCAPS}] Introdotta a partire dal kernel 2.2.18. -\item[\const{PR\_SET\_NAME}] Introdotta a partire dal kernel 2.6.9. -\item[\const{PR\_GET\_NAME}] Introdotta a partire dal kernel 2.6.9. -\item[\const{PR\_SET\_PDEATHSIG}] Introdotta a partire dal kernel 2.1.57. -\item[\const{PR\_GET\_PDEATHSIG}] Introdotta a partire dal kernel 2.3.15. -\item[\const{PR\_SET\_SECCOMP}] Introdotta a partire dal kernel 2.6.23. -\item[\const{PR\_GET\_SECCOMP}] Introdotta a partire dal kernel 2.6.23. -\item[\const{PR\_SET\_SECUREBITS}] Introdotta a partire dal kernel 2.6.26. -\item[\const{PR\_GET\_SECUREBITS}] Introdotta a partire dal kernel 2.6.26. -\item[\const{PR\_SET\_TIMING}] Introdotta a partire dal kernel 2.6.0-test4. -\item[\const{PR\_GET\_TIMING}] Introdotta a partire dal kernel 2.6.0-test4. -\item[\const{PR\_SET\_TSC}] Introdotta a partire dal kernel 2.6.26, solo su - x86. -\item[\const{PR\_GET\_TSC}] Introdotta a partire dal kernel 2.6.26, solo su - x86. -\item[\const{PR\_SET\_UNALIGN}] Introdotta con diverse versioni su diverse - architetture. -\item[\const{PR\_GET\_UNALIGN}] Introdotta con diverse versioni su diverse +\item[\const{PR\_SET\_FPEMU}] Imposta i bit di controllo per l'emulazione + della virgola mobile su architettura ia64, secondo il valore + di \param{arg2}, si deve passare \const{PR\_FPEMU\_NOPRINT} per emulare in + maniera trasparente l'accesso alle operazioni in virgola mobile, o + \const{PR\_FPEMU\_SIGFPE} per non emularle ed inviare il segnale + \const{SIGFPE}. Introdotta a partire dal kernel 2.4.18, solo su ia64. +\item[\const{PR\_GET\_FPEMU}] Ottiene il valore dei flag di controllo + dell'emulazione della virgola mobile, salvato all'indirizzo puntato + da \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a + partire dal kernel 2.4.18, solo su ia64. +\item[\const{PR\_SET\_FPEXC}] Imposta la modalità delle eccezioni in virgola + mobile (\textit{floating-point exception mode}) al valore di \param{arg2}. + I valori possibili sono: \const{PR\_FP\_EXC\_SW\_ENABLE} per usare FPEXC per + le eccezioni, \const{PR\_FP\_EXC\_DIV} per la divisione per zero in virgola + mobile, \const{PR\_FP\_EXC\_OVF} per gli overflow, \const{PR\_FP\_EXC\_UND} + per gli underflow, \const{PR\_FP\_EXC\_RES} per risultati non esatti, + \const{PR\_FP\_EXC\_INV} per operazioni invalide, + \const{PR\_FP\_EXC\_DISABLED} per disabilitare le eccezioni, + \const{PR\_FP\_EXC\_NONRECOV} per utilizzare la modalità di eccesione + asincrona non recuperabile, \const{PR\_FP\_EXC\_ASYNC} per utilizzare la + modalità di eccesione asincrona recuperabile, \const{PR\_FP\_EXC\_PRECISE} + per la modalita precisa di eccezione.\footnote{trattasi di gestione + specialistica della gestione delle eccezioni dei calcoli in virgola mobile + che, i cui dettagli al momento vanno al di là dello scopo di questo + testo.} Introdotta a partire dal kernel 2.4.21, solo su PowerPC. +\item[\const{PR\_GET\_FPEXC}] Ottiene il valore della modalità delle eccezioni + delle operazioni in virgola mobile, salvata all'indirizzo + puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a + partire dal kernel 2.4.21, solo su PowerPC. +\item[\const{PR\_SET\_KEEPCAPS}] Consente di controllare quali + \textit{capabilities} vengono cancellate quando si esegue un cambiamento di + \textit{user-ID} 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 + manenute, questo valore viene sempre cancellato attraverso una + \func{exec}. L'uso di questo flag è stato sostituito, a partire dal kernel + 2.6.26, dal flag \const{SECURE\_KEEP\_CAPS} dei \itindex{securebits} + \textit{securebits} (vedi \const{PR\_SET\_SECUREBITS}). Introdotta a partire + dal kernel 2.2.18. +\item[\const{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione + il valore del flag di controllo 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 \code{(char *)}. Il + nome può essere lungo al massimo 16 caratteri, e la stringa deve essere + terminata da NUL se più corta. Introdotta a partire dal kernel 2.6.9. +\item[\const{PR\_GET\_NAME}] Ottiene il nome del processo chiamante nella + stringa puntata da \param{arg2}, che deve essere di tipo \code{(char *)}; si + devono allocare per questo almeno 16 byte, e il nome sarà terminato da NUL + se più corto. Introdotta a partire dal kernel 2.6.9. +\item[\const{PR\_SET\_PDEATHSIG}] Consente di richiedere l'emissione di un + segnale, che sarà ricevuto dal processo chiamante, in occorrenza della + terminazione del proprio processo padre.\footnote{in sostanza consente di + invertire il ruolo di \const{SIGCHLD}.} Il valore di \param{arg2} deve + indicare il numero del segnale, o 0 per disabilitare l'emissione. Il valore + viene automaticamente cancellato per un processo figlio creato con + \func{fork}. Introdotta a partire dal kernel 2.1.57. +\item[\const{PR\_GET\_PDEATHSIG}] Ottiene il valore dell'eventuale segnale + emesso alla terminazione del padre, salvato all'indirizzo + puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a + partire dal kernel 2.3.15. +\item[\const{PR\_SET\_SECCOMP}] Imposta il cosiddetto + \itindex{secure~computing~mode} \textit{secure computing mode} per il + processo corrente. Prevede come unica possibilità che \param{arg2} sia + impostato ad 1. Una volta abilitato il \textit{secure computing mode} il + processo potrà utilizzare soltanto un insieme estremamente limitato di + \textit{system call}: \func{read}, \func{write}, \func{\_exit} e + \func{sigreturn}, ogni altra \textit{system call} porterà all'emissione di + un \func{SIGKILL}. Il \textit{secure computing mode} è stato ideato per + fornire un supporto per l'esecuzione di codice esterno non fidato e non + verificabile a scopo di calcolo;\footnote{lo scopo è quello di poter vendere + la capacità di calcolo della proprio macchina ad un qualche servizio di + calcolo distribuito senza comprometterne la sicurezza eseguendo codice non + sotto il proprio controllo.} in genere i dati vengono letti o scritti + grazie ad un socket o una pipe, e per evitare problemi di sicurezza non sono + possibili altre operazioni se non quelle citate. Introdotta a partire dal + kernel 2.6.23, disponibile solo se si è abilitato il supporto nel kernel con + \texttt{CONFIG\_SECCOMP}. +\item[\const{PR\_GET\_SECCOMP}] Ottiene come valore di ritorno della funzione + lo stato corrente del \textit{secure computing mode}, al momento attuale la + funzione è totalmente inutile in quanto l'unico valore ottenibile è 0, dato + che la chiamata di questa funzione in \textit{secure computing mode} + comporterebbe l'emissione di \texttt{SIGKILL}, è stata comunque definita per + eventuali estensioni future. Introdotta a partire dal kernel 2.6.23. +\item[\const{PR\_SET\_SECUREBITS}] Imposta i \itindex{securebits} + \textit{securebits} per il processo corrente al valore indicato + da \param{arg2}; per i dettagli si veda sez.~\ref{sec:proc_capabilities}, ed + in particolare i valori di tab.~\ref{tab:securebits_values} e la relativa + trattazione. 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} + \textit{securebits}. Introdotta a partire dal kernel 2.6.26. +\item[\const{PR\_SET\_TIMING}] Imposta il metodo di temporizzazione del + processo da indicare con il valore di \param{arg2}, con + \const{PR\_TIMING\_STATISTICAL} si usa il metodo statistico tradizionale, + con \const{PR\_TIMING\_TIMESTAMP} il più accurato basato su dei + \textit{timestamp}, quest'ultimo però non è ancora implementato ed il suo + uso comporta la restituzione di un errore di \errval{EINVAL}. Introdotta a + partire dal kernel 2.6.0-test4. +\item[\const{PR\_GET\_TIMING}] Ottiene come valore di ritorno della funzione + il metodo di temporizzazione del processo attualmente in uso. Introdotta a + partire dal kernel 2.6.0-test4. +\item[\const{PR\_SET\_TSC}] Imposta il flag che indica se il processo può + leggere il registro di processore contenente il contatore dei + \textit{timestamp} (TSC, o \textit{Time Stamp Counter}) da indicare con il + valore di \param{arg2}. Si deve specificare \const{PR\_TSC\_ENABLE} per + abilitare la lettura o \const{PR\_TSC\_SIGSEGV} per disabilitarla con la + generazione di un segnale di \const{SIGSEGV}. La lettura viene + automaticamente disabilitata se si attiva il \textit{secure computing mode}. + Introdotta a partire dal kernel 2.6.26, solo su x86. +\item[\const{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la + lettura del contatatore dei \textit{timestamp}, salvato all'indirizzo + puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a + partire dal kernel 2.6.26, solo su x86. +% articoli sul TSC e relativi problemi: http://lwn.net/Articles/209101/, +% http://blog.cr0.org/2009/05/time-stamp-counter-disabling-oddities.html, +% http://en.wikipedia.org/wiki/Time_Stamp_Counter +\item[\const{PR\_SET\_UNALIGN}] Imposta la modalità di controllo per l'accesso + a indirizzi di memoria non allineati, che in varie architetture risultano + illegali, da indicare con il valore di \param{arg2}. Si deve specificare + \const{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati, e + \const{PR\_UNALIGN\_SIGBUS} per generare un segnale di \const{SIGBUS} in + caso di accesso non allineato. Introdotta con diverse versioni su diverse architetture. +\item[\const{PR\_GET\_UNALIGN}] Ottiene il valore della modalità di controllo + per l'accesso a indirizzi di memoria non allineati, salvato all'indirizzo + puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta con + diverse versioni su diverse architetture. +\item[\const{PR\_MCE\_KILL}] Introdotta a partire dal kernel 2.6.32. +\item[\const{PR\_MCE\_KILL\_GET}] Introdotta a partire dal kernel 2.6.32. \label{sec:prctl_operation} \end{basedescript} @@ -3432,6 +3535,10 @@ Da fare Da fare +% TODO: funzioni varie sparse citate da qualche parte e da trattare forse in +% una sezione a parte: sigreturn, + + \section{Problematiche di programmazione multitasking} \label{sec:proc_multi_prog} diff --git a/system.tex b/system.tex index 12ed77c..7ed9fe9 100644 --- a/system.tex +++ b/system.tex @@ -933,6 +933,11 @@ tralasceremo la trattazione, rimandando al manuale delle \acr{glibc} %\label{sec:keyctl_management} +% +% \subsection{La gestione dello spegnimento e del riavvio} +\label{sec:sys_reboot} +% TODO trattare reboot, kexec_load, ... + \subsection{La gestione delle informazioni su utenti e gruppi} \label{sec:sys_user_group} -- 2.30.2