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


19

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

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

Si prega di fornire collegamenti alla documentazione di Ubuntu.


Riconsidera la tua scelta di risposte "accettate". Il più votato è in realtà l'unico corretto.
Kyle Strand,

Risposte:


15

Il sudo sucomando sta per "cambia utente" e ti consente di diventare un altro utente. Consente a un utente autorizzato di eseguire un comando come superutente o un altro utente, come specificato nel file sudoers.

L'opzione ‑i (simula il login 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


1
"L'uso di su crea problemi di sicurezza ed è essenzialmente pericoloso." Che cosa?
Smetti di fare del male a Monica il

1
Se esegui sudo suti viene chiesta la password, non la password di root. L'utente root non deve nemmeno avere una password. Indipendentemente da ciò, se un amministratore utilizza la password di root, ciò non implica che tutti gli utenti normali lo sappiano.
Smetti di fare del male a Monica il

2
No, non lo farà. sudoviene eseguito sucome root e root può essere eseguito da suqualsiasi utente senza conoscere la propria password. I fraintendimenti fondamentali su come funziona il sistema meritano una valutazione negativa dell'IMO.
Smetti di fare del male a Monica il

3
Ed eliminare i tuoi commenti non fa che aumentare la confusione.
Smetti di fare del male a Monica il

1
Non stai migliorando molto. sudo -inon chiederà neanche la password di root, quindi non è rilevante per la domanda.
Smetti di fare del male a Monica il

14

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

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

La differenza è più evidente se si utilizzano altri utenti. Dopo sudo su bobsarai bob, ma nello stesso posto. Dopo sudo -i -u bobche sarai bob, nella home directory di bob, con la shell predefinita di bob e con bob .profilee tutti gli altri script di login che sono stati eseguiti.

Vedi man sudoper maggiori dettagli su cosa -ifa. Sfortunatamente, i man sudettagli sono chiari.


Trovato 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 reimpostato su "<spazio> <tab> <nuova>", se impostato.

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

Le variabili di 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 di ambiente $ TERM, $ COLORTERM, $ DISPLAY e $ XAUTHORITY vengono copiate se impostate.

Altri ambienti potrebbero essere impostati da moduli PAM.

Quindi, se e fino a che punto sudo sul'ambiente cambia dipende dalla tua distribuzione e configurazione. Quindi sudo -iè teoricamente più portatile.


su fa impostazioni di ambiente cambiamento, e può essere utilizzato per simulare un login utilizzando -o -l. Anche senza -l, $PATH è cambiato. Prova queste affermazioni prima di farle! (Intendevi che PWDrimane lo stesso?)
Kyle Strand,

La vera domanda è: esiste una differenza tra sudo su -e sudo -i?
Kyle Strand,

1
Stai chiaramente riflettendo su questo e stai effettivamente facendo alcuni test nella shell, quindi mi scuso per il mio commento "prova queste affermazioni". Detto questo, sul mio sistema osservo che $PATHè cambiato quando lo uso susenza sudo(usando la password di root). Secondo info su(che potrebbe essere una cosa migliore da collegare nella tua risposta), suleggi davvero la voce della password per l'utente che stai diventando. Forse il $PATHcambiamento che sto osservando dipende dal sistema (sono su Debian 7).
Kyle Strand,

1
Hmmm. Il mio man su(che è più lungo di quello a cui ti sei collegato) dice che fa parte di shadow-utils 4.1.5.1. La mia manpagina dice anche che $PATHè impostato anche se --preserve-environmentviene utilizzato. Quindi immagino che sia davvero solo una differenza tra le diverse versioni di su.
Kyle Strand,

1
Il comportamento è influenzato anche dalla configurazione di PAM. /etc/pam.d/sudoe /etc/pam.d/supuò essere impostato per fare cose completamente diverse o esattamente le stesse.
Smetti di fare del male a Monica il

7

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

L'uso sudo sudella nuova shell ottiene il suo ambiente dall'utente che emette il comando, il che può essere problematico.

Con sudo -ite ottieni una shell root pulita.

Vedi Note speciali su sudo e shell

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


Le "note speciali" che si collega per dire che sudo -iè simile sudo su -, che in realtà non ottiene il suo ambiente dall'utente che emette il comando.
Kyle Strand,

@KyleStrand thx per la precisazione - è stato un errore di battitura, la questione è davvero di sudo sucontro sudo -i.
Guntbert,
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.