GNU/Linux >> Linux Esercitazione >  >> Linux

Sudo vs radice; differenze effettive?

Dipende fortemente da come chiami il tuo programma con sudo o su .
Per esempio. sul sistema su cui mi trovo in questo momento:

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

Dove [1]=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Le variabili Env=Environment vengono reimpostate per 1 e 5, prese da $USER in 2,3,4.

Quindi uno script o un programma avviato con un'opzione diversa può vedere $PATH diversi , $HOME , la sua shell può leggere diversi .bashrc ,.profile e variabili d'ambiente. Legge il file relativo al $HOME . Ogni utente può modificare il proprio ambiente in modo diverso (variabili, $PATH , .bashrc, .profile, .bash_profile, alias...). In particolare un utente può avere un diverso ordine delle directory nel suo $PATH e, di conseguenza, uno script può eseguire un comando, ad es. in /home/$USER/bin invece poi quello nel percorso previsto da root.

Puoi eseguire il programma in sudo -i dato che eri loggato come root con su - , ma puoi avere un comportamento diverso se lo esegui con sudo MyCommand o con su -c MyCommand .

Da man su :

Nella parte descrittiva:
L'ambiente corrente viene passato alla nuova shell . Il valore di $PATH viene reimpostato a /bin:/usr/bin per gli utenti normali o/sbin:/bin:/usr/sbin:/usr/bin per il superutente
...
Nella parte delle opzioni:
- , -l, --login
Fornisci un ambiente simile a ciò che l'utente si aspetterebbe se l'utente avesse effettuato l'accesso direttamente .

Dall'uomo sudo

-i , --Accedere
Eseguire la shell specificata dalla voce del database delle password dell'utente di destinazione come shell di login. Ciò significa che i file di risorse specifici per l'accesso come .profile o .login verranno letti dalla shell. Se viene specificato un comando, viene passato alla shell per l'esecuzione tramite l'opzione -c della shell. Se non viene specificato alcun comando, viene eseguita una shell interattiva. sudo tenta di passare alla home directory di quell'utente prima di eseguire la shell. Il comando viene eseguito con un ambiente simile a quello che un utente riceverebbe al momento dell'accesso . La sezione Command Environment nel manuale sudoers(5) documenta come l'opzione -i influisce sull'ambiente in cui viene eseguito un comando quando la politica sudoers è in uso.


Se hai sudo completo accesso, puoi diventare root utilizzando sudo su - , quindi il punto di sicurezza è discutibile.

In effetti, c'è un modo per discernere la differenza tra un programma eseguito come root e un programma è stato eseguito con sudo - utilizzando getuid rispetto a geteuid - ma questo è un trucco artificioso. Perché un sistema di patch dovrebbe farlo?


Ci sono alcune differenze se stai ricevendo una shell di root, come sottolineato da @Hastur.

Se non ottieni una shell di root, allora ci sono più differenze. Il membro dell'assistenza potrebbe avere esperienza nel provare a fare cose come sudo patch -p0 < /root/patch.file dove patch viene eseguito come root, ma < (piping da un file) non lo è.


Linux
  1. Differenza tra utente Sudo e utente root?

  2. Cambia la password di root con Sudo, senza Su?

  3. Come eseguire il terminale come root?

  4. Salva il file come root dopo averlo modificato come non root

  5. Qual è la differenza tra root e sudo?

Come modificare la password di sudo o root in Ubuntu

Come passare all'utente root in Ubuntu 22.04

Avvia sempre Terminal come utente root (sudo) in Ubuntu

Dove vengono segnalati gli incidenti sudo?

Usa in modo sicuro find con sudo

Perché la password "sudo" è diversa dalla password "su root".