Qual è la differenza funzionale tra sudo su e sudo -i?

16

Perché uno è preferito rispetto all'altro in questo esempio?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Fornisci collegamenti alla documentazione di Ubuntu.

    
posta chili555 10.08.2013 - 22:45

3 risposte

13

Il comando sudo su sta per "switch user" e ti consente di diventare un altro utente. Permette a un utente autorizzato di eseguire un comando come superutente o altro utente, come specificato nel file sudoers.

L'opzione -i (simula l'accesso iniziale) esegue 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.

Fonte: ManPage

    
risposta data Mitch 10.08.2013 - 23:01
12

sudo su cambia solo l'utente corrente in root. Le impostazioni dell'ambiente (come PATH) rimangono le stesse.

sudo -i crea un nuovo ambiente come se la root avesse appena effettuato l'accesso.

La differenza è più evidente se si utilizzano altri utenti. Dopo sudo su bob sarai bob, ma nello stesso posto. Dopo sudo -i -u bob verrai bob, nella home directory di bob, con la shell predefinita di bob e con .profile di bob e dopo aver eseguito tutti gli altri script di accesso.

Vedi man sudo per maggiori dettagli su cosa fa -i . Purtroppo, man su è chiaro sui dettagli.

Trovata una versione di man su (da login-1: 4.1.4.2 + svn3283-3ubuntu5.1) che ha il seguente da dire:

  

$ PATH ripristinato secondo le opzioni /etc/login.defs ENV_PATH o ENV_SUPATH (vedi sotto);

     

$ IFS ripristinato a "& lt; space & gt; & lt; tab & gt; & lt; newline & gt;", se è stato impostato.

     

Si noti che il comportamento predefinito per l'ambiente è il seguente:

     

Le variabili d'ambiente $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH e $ IFS vengono ripristinate.

     

Se --login non viene utilizzato, l'ambiente viene copiato, ad eccezione delle variabili sopra.

     

Se si utilizza --login, le variabili d'ambiente $ TERM, $ COLORTERM, $ DISPLAY e $ XAUTHORITY vengono copiate se sono state impostate.

     

Altri ambienti potrebbero essere impostati dai moduli PAM.

Quindi, se e in che misura sudo su cambia l'ambiente dipende dalla tua distribuzione e configurazione. Quindi sudo -i è teoricamente più portabile.

    
risposta data OrangeDog 11.08.2013 - 00:02
6

Il problema principale è una delle (non così) impostazioni dell'ambiente sane.

Usando sudo su la nuova shell ottiene il suo ambiente dall'utente che ha emesso il comando - il che potrebbe essere problematico.

Con sudo -i ottieni una shell di root pulita.

Vedi Note speciali su sudo e shell

Resta da osservare che raramente è necessario creare una shell di root.

    
risposta data guntbert 10.08.2013 - 22:59

Leggi altre domande sui tag