Un processo superutente può modificare l'ID utente reale e l'ID gruppo di un processo, non corrispondenti a quelli nel file della password?


11

Dall'APUE

L'ID utente reale e l'ID gruppo reale di un processo identificano chi siamo veramente. Questi due campi sono presi dalla nostra voce nel file delle password quando effettuiamo l'accesso. Normalmente, questi valori non cambiano durante una sessione di accesso, anche se ci sono modi in cui un processo di superutente può cambiarli

Un processo superutente può modificare l'ID utente reale e l'ID gruppo reale di un processo, in modo che la relazione tra l'ID utente reale e l'ID gruppo reale non corrisponda a quelli nel file della password? Ad esempio, se l'utente Timnon è un membro del gruppo oceanper il file della password, un processo superutente può modificare l'ID utente reale e l'ID gruppo reale di un processo in modo che siano Time oceanrispettivamente?


5
Un importante chiarimento qui: un processo in esecuzione con privilegi di superutente ha la possibilità di modificare il proprio UID e GID, non quelli di un altro processo.
filbranden,


Il database delle informazioni utente è puramente userland. Il kernel si preoccupa solo di UID e GID, non del database dell'utente o del gruppo.
炸鱼 薯条 德里克

Risposte:


15

Sì, un processo superutente può modificare il suo ID utente reale e l'ID gruppo reale in qualsiasi valore desideri. I valori in /etc/passwde /etc/shadowsono la configurazione per quali valori devono essere impostati, ma non una limitazione dei possibili valori.

Modifica n. 1

Significa che programmi come loginleggeranno i valori dai file, quindi i file sono file di configurazione o file di input. Non sono vincoli a ciò che un programma può fare. Un processo superutente può passare qualsiasi valore al kernel e il kernel non controllerà alcun file.

Un programma potrebbe chiamare

setgid (54321);
setuid (12345);

e questo funzionerebbe, anche se nessuno degli ID è menzionato in alcun file.


9

Il file della password e il file di gruppo non vengono letti, vengono letti solo dal processo di accesso, per impostare l'ID utente reale e l'ID gruppo reale.

Non c'è nulla nel kernel che menzioni questi file. Il login deve aprire i file, elaborarli e impostare i due ID. Potrebbe essere scritto diversamente per ottenere questi ID da qualche altra parte. Ad esempio da un database in rete.

Qualsiasi processo con capacità CAP_SETUID può impostare questi ID, root ha questa capacità.

Il modello di sicurezza in Unix, è in parte implementato nel kernel e in parte implementato in un processo che funziona con elevate capacità (ad es. Come root).


Si noti che /etc/passwde /etc/groupvengono letti anche da ls, pse qualsiasi altro programma che ha bisogno di tradurre i nomi di utente / gruppo da / per gli ID utente / gruppo. (Possono farlo attraverso una libreria, che conosce metodi alternativi di memorizzazione di questi dettagli.)


1
Essi ( /etc/passwd, /etc/groups) vengono letti anche da processi che desiderano mostrare o nomi utente processo anziché gli ID numerici interni, ad esempio pse ls.
Jonas Schäfer,

3

Tra le altre cose, lo scopo di /etc/passwdè tradurre il nome di un utente nell'UID di un utente . Se non ti interessa quale sia l'UID di Bob, non hai bisogno di quel file. Se vuoi solo passare a un UID / GID arbitrario, usa le syscall rilevanti:

int setuid(uid_t uid);
int setgid(gid_t gid);

Si noti che un processo privilegiato con le funzionalitàCAP_SETUID e (che generalmente ha un processo root) può solo cambiare il proprio UID e GID, non quello di un altro processo in esecuzione.CAP_SETGID

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.