'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - ¿cuándo importa cuál es el que se usa o si importa?

195

Cuando estoy haciendo algo que requiere que se escriba root en docenas de veces seguidas, prefiero cambiar mi sesión a una sesión de root. En los diversos tutoriales e instrucciones que he usado en Internet, veo que sudo su , sudo su - , sudo -i y sudo /bin/bash se usan para abrir una sesión raíz, pero no tengo claro la diferencia entre estos y cuando o si esa diferencia importa.

¿Alguien puede aclararme esto?

    
pregunta Paul 13.11.2013 - 00:30

1 respuesta

256

Para explicar esto, necesitas saber qué hacen los programas:

su - El comando su se usa para cambiar a otro usuario ( s bruja u ser), pero también puede cambiar al usuario raíz por invocando el comando sin parámetro. su le pide la contraseña del usuario para cambiar, después de escribir la contraseña que cambió al entorno del usuario.

sudo - sudo está destinado a ejecutar un único comando con privilegios de administrador. Pero a diferencia de su , le solicita la contraseña del usuario actual. Este usuario debe estar en el archivo sudoers (o un grupo que está en el archivo sudoers). Por defecto, Ubuntu "recuerda" su contraseña por 15 minutos, para que no tenga que escribir su contraseña cada vez.

bash - Una interfaz de texto para interactuar con la computadora. Es importante comprender la diferencia entre los shells de inicio de sesión, los que no inician sesión, interactivos y no interactivos:

  • shell de inicio de sesión: un shell de inicio de sesión lo registra en el sistema como un usuario especificado, necesario para esto es un nombre de usuario y contraseña. Cuando presionas ctrl + alt + F1 para iniciar sesión en un terminal virtual que obtienes después de iniciar sesión con éxito un shell de inicio de sesión.
  • shell no de inicio de sesión: un shell que se ejecuta sin iniciar sesión, necesario para esto es un usuario actualmente conectado. Cuando abre un terminal gráfico en gnome, no es un shell de inicio de sesión.
  • shell interactivo: un shell (inicio de sesión o no inicio de sesión) en el que puede escribir o interrumpir comandos de forma interactiva. Por ejemplo, un terminal gnome.
  • shell no interactivo: Un (sub) shell que probablemente se ejecuta desde un proceso automatizado. No verá entrada ni salida.

sudo su Llama a sudo con el comando su . Bash se llama como shell interactivo que no es de inicio de sesión. Entonces bash solo ejecuta .bashrc . Puede ver que después de cambiar a la raíz todavía está en el mismo directorio:

user@host:~$ sudo su
root@host:/home/user#

sudo su - Esta vez es un shell de inicio de sesión, por lo que /etc/profile , .profile y .bashrc se ejecutan y se encontrará en el directorio principal de root con el entorno de root.

sudo -i Es casi lo mismo que sudo su - La opción -i (simular inicio de sesión) ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario de destino como un shell de inicio de sesión. Esto significa que los archivos de recursos específicos de inicio de sesión como .profile , .bashrc o .login serán leídos y ejecutados por el shell.

sudo /bin/bash Esto significa que llamas sudo con el comando /bin/bash . /bin/bash se inicia como un shell que no es de inicio de sesión, por lo que no se ejecutan todos los archivos de puntos, pero bash lee .bashrc del usuario llamante. Tu entorno permanece igual. Tu hogar no será el hogar de la raíz. Entonces eres root, pero en el entorno del usuario que llama.

sudo -s lee la variable $SHELL y ejecuta el contenido. Si $SHELL contiene /bin/bash , invoca sudo /bin/bash (ver arriba).

Comprobar: Para comprobar si está en un shell de inicio de sesión o no (funciona solo en bash porque shopt es un comando incorporado):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
respondido por el chaos 13.11.2013 - 10:43

Lea otras preguntas en las etiquetas