Sistemate setreuid e setresuid
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 26 Oct 2001 17:53:16 +0000 (17:53 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 26 Oct 2001 17:53:16 +0000 (17:53 +0000)
prochand.tex

index 9eb7912a0ddd47eb9c4a3b8b2db8ecafca1156d8..def38644e8c2370fcd94a0161766a631b0dd948e 100644 (file)
@@ -1360,8 +1360,11 @@ servano di nuovo.
 Questo in Linux viene fatto usando altri due gruppi di identificatori, il
 \textit{saved} ed il \textit{filesystem}, analoghi ai precedenti. Il primo
 gruppo è lo stesso usato in SVr4, e previsto dallo standard POSIX quando è
 Questo in Linux viene fatto usando altri due gruppi di identificatori, il
 \textit{saved} ed il \textit{filesystem}, analoghi ai precedenti. Il primo
 gruppo è lo stesso usato in SVr4, e previsto dallo standard POSIX quando è
-definita la costante \macro{\_POSIX\_SAVED\_IDS}, il secondo gruppo è
-specifico di Linux e viene usato per migliorare la sicurezza con NFS. 
+definita la costante \macro{\_POSIX\_SAVED\_IDS}\footnote{in caso si abbia a
+  cuore la portabilità del programma su altri unix è buona norma controllare
+  sempre la disponibilità di queste funzioni controllando se questa costante è
+  definita}, il secondo gruppo è specifico di Linux e viene usato per
+migliorare la sicurezza con NFS.
 
 Il \textit{saved user id} e il \textit{saved group id} sono copie
 dell'\textit{effective user id} e dell'\textit{effective group id} del
 
 Il \textit{saved user id} e il \textit{saved group id} sono copie
 dell'\textit{effective user id} e dell'\textit{effective group id} del
@@ -1478,14 +1481,14 @@ avr
 \end{eqnarray*}
 consentendo l'accesso a \file{/var/log/utmp}.
 
 \end{eqnarray*}
 consentendo l'accesso a \file{/var/log/utmp}.
 
-Occorre però tenere conto che tutto questo non è possibile con root, in tal
-caso infatti l'esecuzione una \func{setuid} comporta il cambiamento di tutti
-gli identificatori associati al processo rendendo impossibile riguadagnare i
-privilegi di amministratore. Questo comportamento è corretto per l'uso che ne
-fa \cmd{login} una volta che crea una nuova shell per l'utente; ma quando si
-vuole cambiare soltanto l'\textit{effective user id} del processo per cedere i
-privilegi occorre ricorrere ad altre funzioni (si veda ad esempio
-\secref{sec:proc_seteuid}).
+Occorre però tenere conto che tutto questo non è possibile con un processo con
+i privilegi di root, in tal caso infatti l'esecuzione una \func{setuid}
+comporta il cambiamento di tutti gli identificatori associati al processo,
+rendendo impossibile riguadagnare i privilegi di amministratore.  Questo
+comportamento è corretto per l'uso che ne fa \cmd{login} una volta che crea
+una nuova shell per l'utente; ma quando si vuole cambiare soltanto
+l'\textit{effective user id} del processo per cedere i privilegi occorre
+ricorrere ad altre funzioni (si veda ad esempio \secref{sec:proc_seteuid}).
 
 
 \subsection{Le funzioni \func{setreuid} e \func{setresuid}}
 
 
 \subsection{Le funzioni \func{setreuid} e \func{setresuid}}
@@ -1512,11 +1515,13 @@ Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
 l'unico errore possibile è \macro{EPERM}. 
 \end{functions}
 
 l'unico errore possibile è \macro{EPERM}. 
 \end{functions}
 
-Gli utenti normali possono settare gli identificatori soltanto ai valori del
-loro \textit{effective id} o \textit{real id}, valori diversi comportano il
-fallimento della chiamata; l'amministratore invece può specificare un valore
-qualunque. Specificando -1 come valore l'identificatore corrispondente viene
-lasciato inalterato.
+I processi non privileguiati possono settare i \textit{real id} soltanto ai
+valori dei loro \textit{effective id} o \textit{real id} e gli
+\textit{effective id} ai valori dei loro \textit{real id}, \textit{effective
+  id} o \textit{saved id}; valori diversi comportano il fallimento della
+chiamata; l'amministratore invece può specificare un valore qualunque.
+Specificando un valore di -1 l'identificatore corrispondente viene lasciato
+inalterato.
 
 Con queste funzione si possono scambiare fra loro \textit{real id} e
 \textit{effective id}, e pertanto è possibile implementare un comportamento
 
 Con queste funzione si possono scambiare fra loro \textit{real id} e
 \textit{effective id}, e pertanto è possibile implementare un comportamento
@@ -1525,41 +1530,21 @@ un primo scambio, e recuperandoli, eseguito il lavoro non privilegiato, con un
 secondo scambio.
 
 In questo caso però occorre porre molta attenzione quando si creano nuovi
 secondo scambio.
 
 In questo caso però occorre porre molta attenzione quando si creano nuovi
-processi nella fase intermedia, questi infatti avranno un \textit{real id}
-privilegiato, che dovrà essere esplicitamente eliminato prima di porre in
-esecuzione un nuovo processo, che altrimenti potrebbero riottenere detti
-privilegi.
-
-Come accennato le funzioni derivano da un'implementazione che non prevedeva la
-presenza di \textit{saved id}, per evitare che questo possa essere
-riutilizzato nella fase intermedia per recuperare un \textit{effective id}
-(privilegiato) originale, tutte le volte che uno degli identificatori viene
-modificato da una di queste funzioni, il \textit{saved id} viene sempre
-settato al nuovo valore che viene ad assumere l'\textit{effective id}.
-
-
-\subsection{Le funzioni \func{seteuid} e \func{setegid}}
-\label{sec:proc_seteuid}
-
-Queste funzioni sono un'estensione allo standard POSIX.1 (ma sono comunque
-supportate dalla maggior parte degli unix) usate per cambiare gli
-\textit{effective id}; i loro prototipi sono:
-
-\begin{functions}
-\headdecl{unistd.h}
-\headdecl{sys/types.h}
-
-\funcdecl{int seteuid(uid\_t uid)} setta l'\textit{effective user ID} del
-processo corrente.
-
-\funcdecl{int setegid(gid\_t gid)} setta l'\textit{effective group ID} del
-processo corrente.
-
-Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
-l'unico errore possibile è \macro{EPERM}. 
-\end{functions}
-
-
+processi nella fase intermedia in cui si sono scambiati gli identificatori, in
+questo caso infatti essi avranno un \textit{real id} privilegiato, che dovrà
+essere esplicitamente eliminato prima di porre in esecuzione un nuovo
+programma (occorrerà cioè eseguire un'altra chiamata dopo la \func{fork}, e
+prima della \func{exec} per uniformare i \textit{real id} agli
+\textit{effective id}) in caso contrario quest'ultimo potrebbe a sua volta
+effettuare uno scambio e riottenere privilegi non previsti.
+
+Lo stesso problema di propagazione dei privilegi ad eventuali processi figli
+si porrebbe per i \textit{saved id}. Queste funzioni derivano da
+un'implementazione che non ne prevede la presenza, e quindi non è possibile
+usarle per correggere la situazione come nel caso precedente, per questo
+motivo tutte le volte che uno degli identificatori viene modificato ad un
+valore diverso dal precedente \textit{real id}, il \textit{saved id} viene
+sempre settato al valore dell'\textit{effective id}.
 
 
 \subsection{Le funzioni \func{setresuid} e \func{setresgid}}
 
 
 \subsection{Le funzioni \func{setresuid} e \func{setresgid}}
@@ -1587,6 +1572,38 @@ Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
 l'unico errore possibile è \macro{EPERM}. 
 \end{functions}
 
 l'unico errore possibile è \macro{EPERM}. 
 \end{functions}
 
+I processi non privilegiati possono cambiare uno qualunque degli
+identificatori usando uno qualunque dei valori correnti di \textit{real id},
+\textit{effective id} o \textit{saved id}, l'ammnistratore può specificare i
+valori che vuole; un valore di -1 per un qualunque parametro lascia inalterato
+l'dentificatore corrispondente.
+
+\subsection{Le funzioni \func{seteuid} e \func{setegid}}
+\label{sec:proc_seteuid}
+
+Queste funzioni sono un'estensione allo standard POSIX.1 (ma sono comunque
+supportate dalla maggior parte degli unix) e usate per cambiare gli
+\textit{effective id}; i loro prototipi sono:
+
+\begin{functions}
+\headdecl{unistd.h}
+\headdecl{sys/types.h}
+
+\funcdecl{int seteuid(uid\_t uid)} setta l'\textit{effective user ID} del
+processo corrente.
+
+\funcdecl{int setegid(gid\_t gid)} setta l'\textit{effective group ID} del
+processo corrente.
+
+Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento:
+l'unico errore possibile è \macro{EPERM}. 
+\end{functions}
+
+Gli utenti normali possono settare l'\textit{effective id} solo al valore del
+\textit{real id} o del \textit{saved id}, l'amministratore può specificare
+qualunque valore. 
+
+
 
 \subsection{Le funzioni \func{setfsuid} e \func{setfsgid}}
 \label{sec:proc_setfsuid}
 
 \subsection{Le funzioni \func{setfsuid} e \func{setfsgid}}
 \label{sec:proc_setfsuid}