¿Cuáles son las diferencias entre "su", "sudo -s", "sudo -i", "sudo su"?

130

Ya lo leí en el manual, pero no puedo ver la diferencia ...

su - cambie la identificación del usuario o conviértase en superusuario

sudo -s [command]

La opción -s (shell) ejecuta el shell especificado por la variable de entorno SHELL si está configurada o el shell como se especifica en passwd (5). Si un                    comando se especifica, se pasa al shell para su ejecución. De lo contrario, se ejecuta un shell interactivo.

sudo -i desaparecer la descripción en el manual

    
pregunta Smile.Hunter 22.10.2011 - 08:11

5 respuestas

107

La principal diferencia entre estos comandos radica en la forma en que restringen el acceso a sus funciones.

su (que significa "usuario sustituto" o "cambiar de usuario") - hace exactamente eso, inicia otra instancia de shell con privilegios del usuario de destino. Para asegurarse de tener los derechos para hacerlo, le solicita la contraseña del usuario de destino . Entonces, para convertirse en root, necesita saber la contraseña de root. Si hay varios usuarios en su máquina que necesitan ejecutar comandos como raíz, todos necesitan saber la contraseña de root, tenga en cuenta que será la misma contraseña. Si necesita revocar los permisos de administrador de uno de los usuarios, debe cambiar la contraseña de root y contarla solo a las personas que necesitan mantener el acceso: desordenado.

sudo (hmm ... ¿cuál es el mnemónico? ¿Superusuario? ¿HACER?) es completamente diferente. Utiliza un archivo de configuración (/ etc / sudoers) que enumera qué usuarios tienen derechos para acciones específicas (ejecutar comandos como raíz, etc.) Cuando se invoca, solicita la contraseña del usuario que la inició - para garantizar que la persona en la terminal sea realmente la misma "joe" que figura en /etc/sudoers . Para revocar los privilegios de administrador de una persona, solo necesita editar el archivo de configuración (o eliminar el usuario de un grupo que figura en esa configuración). Esto da como resultado una administración mucho más limpia de los privilegios.

Como resultado de esto, en muchos sistemas basados ​​en Debian root el usuario no tiene contraseña establecida, es decir, no es posible iniciar sesión como raíz directamente.

Además, /etc/sudoers permite especificar algunas opciones adicionales, es decir, el usuario X solo puede ejecutar el programa Y, etc.

La combinación de sudo su de uso frecuente funciona de la siguiente manera: first sudo le pide su contraseña y, si tiene permiso para hacerlo, invoca el siguiente comando ( su ) como superusuario. Como su es invocado por root , no requiere que ingrese la contraseña del usuario objetivo. Por lo tanto, sudo su le permite abrir un shell como otro usuario (incluida la raíz), si se le permite el acceso de superusuario mediante el archivo /etc/sudoers .

    
respondido por el Sergey 22.10.2011 - 09:21
48

sudo le permite ejecutar comandos en su propia cuenta de usuario con privilegios de administrador. su te permite cambiar de usuario para que realmente estés conectado como root.

sudo -s ejecuta un shell con privilegios de administrador. sudo -i también adquiere el entorno del usuario raíz.

Para ver la diferencia entre su y sudo -s , haz cd ~ y luego pwd después de cada uno de ellos. En el primer caso, estarás en el directorio raíz de root, porque eres root. En el segundo caso, estarás en tu propio directorio de inicio, porque eres tú mismo con privilegios de administrador.

Hay más discusión sobre esta pregunta exacta aquí .

    
respondido por el Mike Scott 22.10.2011 - 08:28
26

Esta respuesta es una tontería de mi respuesta en una víctima de esta pregunta , ¡ponga aquí la respuesta canónica para que la gente pueda encontrarla!

La principal diferencia entre sudo -i y sudo -s es:

  • sudo -i le da el entorno raíz, es decir, se ignora su ~/.bashrc .
  • sudo -s le proporciona el entorno del usuario, por lo que se respeta su ~/.bashrc .

Aquí hay un ejemplo, puedes ver que tengo una aplicación lsl en mi directorio ~/.bin/ accesible a través de sudo -s pero no accesible con sudo -i . Tenga en cuenta también que el indicador Bash cambia como lo hará con sudo -i pero no con sudo -s :

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Aunque sudo -s es conveniente para proporcionarle el entorno con el que está familiarizado, recomiendo el uso de sudo -i por dos motivos:

  1. El recordatorio visual de que estás en una sesión 'raíz'.
  2. Es mucho menos probable que el entorno raíz sea envenenado con malware, como una línea deshonesta en .bashrc .
respondido por el dotancohen 08.11.2014 - 15:07
6

su pregunta por la contraseña del usuario "root".

sudo solicita tu propia contraseña (y también comprueba si puedes ejecutar comandos como root, que está configurado a través de /etc/sudoers - de manera predeterminada todas las cuentas de usuario que pertenecen al grupo "admin" están permitidas para usar sudo).

sudo -s inicia un shell como root, pero no cambia su directorio de trabajo. sudo -i simula un inicio de sesión en la cuenta raíz: su directorio de trabajo será /root y el .profile de root se obtendrá como si estuviera conectado.

    
respondido por el Marius Gedminas 22.10.2011 - 21:38
2

En Ubuntu o en un sistema relacionado, no encuentro mucho uso para su en el sentido tradicional de superusuario. sudo maneja ese caso mucho mejor. Sin embargo, su es ideal para convertirse en otro usuario en situaciones puntuales donde la configuración de sudoers sería una tontería.

Por ejemplo, si estoy reparando mi sistema desde un CD / USB en vivo, a menudo montaré mi disco duro y otras cosas necesarias y chroot en el sistema. En tal caso, mi primer comando es en general:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

De esta forma, estoy operando no como root, sino como mi usuario normal, y luego uso sudo según corresponda.

    
respondido por el Scott Severance 26.10.2011 - 09:23

Lea otras preguntas en las etiquetas