Differenza tra proprietario / root e RUID / EUID


24

Sono relativamente nuovo ai concetti menzionati nell'interrogazione e la loro lettura da diverse fonti non fa che renderli più confusi. Quindi questo è quello che ho capito finora:

Quando ci vengono concesse le autorizzazioni per un file, sembrano così:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

Partiamo dal presupposto che un utente user2che fa parte del gruppo userstenta di eseguire file.bin. Se il bit setuid non fosse impostato, ciò significherebbe che sia il RUID che l'EUID di file.binerano uguali all'UID di user2. Ma dal momento che il bit setuid è impostato, questo significa che il RUID è ora pari al UID user2, mentre EUID è l'UID del proprietario del file, user1.

Le mie domande sono:

  1. Qual è la differenza tra il proprietario del file e root? Ha rootle stesse autorizzazioni del proprietario? O avremmo bisogno di una voce separata nell'elenco delle autorizzazioni per root?
  2. Differenza tra RUID e EUID?
    • Da quanto ho capito, il RUID e l'EUID sono applicati solo ai processi. In tal caso, perché hanno il valore dell'ID utente?
    • Se RUID è l'utente che crea il processo e EUID è l'utente che sta attualmente eseguendo il processo, la prima frase della prima risposta in questa domanda non ha alcun senso per me.
    • Ho capito bene cosa fa il bit setuid?

Risposte:


35

Ecco le risposte:

  1. rootha sempre pieno accesso a file e directory. Anche il proprietario del file li ha di solito, ma questo non è sempre vero. Per esempio:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1è il proprietario ; tuttavia possono solo leggere ed eseguire , ma hanno rootancora pieno accesso ( rwx ) al file.

  2. RUID è il vero ID utente e non cambia (quasi) mai. Se si user2accede al sistema, la shell viene quindi avviata con l'ID reale impostato su user2. Tutti i processi che iniziano dalla shell erediteranno l'ID reale user2come ID reale.

    EUID è l' ID utente effettivo , cambia per i processi (non per l'utente) eseguiti dall'utente che hanno impostato il bit setuid .

    Se user2eseguito file.bin, il RUID sarà user2e l'EUID del processo avviato sarà user1.

Usiamo il caso di passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • Quando user2vogliono cambiare la loro password , eseguono /usr/bin/passwd.

  • Il RUID sarà, user2ma l'EUID di tale processo sarà root.

  • user2può utilizzare passwdper modificare solo la propria password perché passwdcontrolla internamente il RUID e, in caso contrario root, le sue azioni saranno limitate alla password dell'utente reale.

  • È necessario che l'EUID diventi rootnel caso di passwdperché il processo deve scrivere su /etc/passwde / o /etc/shadow.


Grazie! Ora tutto è più chiaro. Ho un'altra domanda, però. L'EUID cambia solo quando un utente esegue un processo in cui è impostato il bit setuid? O può cambiare anche in un'altra situazione? E se è così, qual è quella situazione?
user1956190

1
Penso che non ci sia altro modo che eseguire processi che hanno setuidimpostato il bit.
jcbermu,

3
Un processo in esecuzione da un programma "setuid" (ovvero un processo che ha UID efficace ≠ UID reale) può riportare l'EUID al RUID. In alcuni casi, può alternare l'EUID tra il suo valore iniziale (ovvero il proprietario del file del programma) e il RUID. Inoltre, potrebbe essere in grado di impostare il proprio RUID uguale al proprio EUID. ... (proseguendo)
Scott,

2
(Segue) ... processi privilegiati (quelli con EUID = 0, alias root) può impostare EUID e RUID a valori arbitrari (per esempio, la login, sue sudoprogrammi farlo). Generalmente, una volta che un processo privilegiato modifica i suoi UID in valori diversi da zero, non è più privilegiato e non può più essere rootripristinato. Vedi le pagine man setuid (2) , seteuid (2) e setreuid (2) .
Scott,

1
(Proseguendo) ... È stato introdotto come un trucco per risolvere un problema, che è stato successivamente risolto in modo più ampio. Potrebbe essere stato rimosso da Linux ad eccezione del fatto che una tale potatura avrebbe rotto i programmi che la utilizzano. Michael Kerrisk, autore di The Linux Programming Interface , afferma, nella sua versione della pagina man setfsuid (2) , "al setfsuid()giorno d'oggi non è necessario e dovrebbe essere evitato in nuove applicazioni".
Scott,
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.