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

148

Ya lo leí del manual pero no puedo ver la diferencia.

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

sudo -s [command]

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

sudo -i desaparecer descripción en manual

Sonrisa cazador
fuente
77
Además, no use su userpara iniciar sesión desde shells no confiables, pero su - user. Ver unix.stackexchange.com/q/7013/8250
Lekensteyn el
@Lekensteyn wow, gran ejemplo. gracias por la LOL :)
törzsmókus
1
recuerda siempre el antiguo mandamiento: ¡no reclamarás el nombre de la raíz en vano!
törzsmókus
No decir sudo -ies malo, pero que sin duda puede f *** cosas usarlo
Kolob Canyon
Casi duplicado: askubuntu.com/questions/376199/…
Reinier Post

Respuestas:

118

La principal diferencia entre estos comandos está 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 objetivo. Para asegurarse de que tiene los derechos para hacerlo, le solicita la contraseña del usuario objetivo . 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 root, todos deben conocer 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 decírselo solo a aquellas personas que necesitan mantener el acceso: desordenado.

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

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

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

La sudo sucombinación de uso frecuente funciona de la siguiente manera: primero sudole pide su contraseña y, si se le permite hacerlo, invoca el siguiente comando ( su) como superusuario. Debido a que sues invocado por root, no requiere que ingrese la contraseña del usuario objetivo. Por lo tanto, le sudo supermite abrir un shell como otro usuario (incluida la raíz), si el /etc/sudoersarchivo le permite el acceso de superusuario .

Sergey
fuente
2
Nunca lo he visto sucomo "cambiar de usuario", sino siempre como superusuario; El comportamiento predeterminado sin el nombre de usuario de otro (aunque tiene sentido). De wikipedia : "El comando su, también conocido como superusuario [1] ya en 1974, también se ha denominado" usuario sustituto "," usuario falso "o" usuario establecido "porque permite cambiar la cuenta asociada con el actual terminal (ventana) ".
Dr. Jimbob
55
@dr jimbob: tienes razón, pero descubro que "cambiar de usuario" describe mejor lo que hace, aunque históricamente significa "superusuario". También estoy encantado de descubrir que el artículo de Wikipedia es muy similar a mi respuesta: nunca vi el artículo antes :)
Sergey
11
El significado oficial de "su" es "usuario sustituto". Ver: "hombre su".
Angel O'Sphere
1
@ AngelO'Sphere: Curiosamente, la página de manual de Ubuntu no menciona "sustituto" en absoluto. La página de manual en gnu.org ( gnu.org/software/coreutils/manual/html_node/su-invocation.html ) de hecho dice "su: Ejecute un comando con ID de usuario y grupo sustitutos". Creo que gnu.org es una fuente canónica :)
Sergey
1
¿Qué hay de sudo su?
Kaz Wolfe
59

sudole permite ejecutar comandos en su propia cuenta de usuario con privilegios de root. sule permite cambiar de usuario para que realmente haya iniciado sesión como root.

sudo -sejecuta un shell con privilegios de root. sudo -itambién adquiere el entorno del usuario root.

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

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

Mike Scott
fuente
20
"eres tú mismo con privilegios de root" no es lo que realmente está sucediendo :) En realidad, no es posible ser "tú mismo con privilegios de root", o eres root o eres tú mismo. Intenta escribir whoami en ambos casos. El hecho de que los cd ~resultados sean diferentes es resultado de que sudo -s no configura la variable de entorno $ HOME.
Sergey
1
@Sergey, whoami dice que es 'root' porque está ejecutando el cmd 'whoami' como si lo hubiera superado, por lo que temporalmente (durante la duración de ese comando) parece ser el usuario root, pero es posible que aún no tenga acceso a la raíz de acuerdo con el archivo sudoers.
Pulpo
1
@Octopus: lo que intentaba decir es que en Unix, un proceso solo puede tener un UID, y ese UID determina los permisos del proceso. No puede ser "usted mismo con privilegios de root", un programa se ejecuta con su UID o con el UID de root (0).
Sergey
55
Con respecto a "es posible que aún no tenga acceso completo a la raíz de acuerdo con el archivo sudoers": el sudoersarchivo controla quién puede ejecutar qué comando como otro usuario, pero eso sucede antes de que se ejecute el comando. Sin embargo, una vez que se le permitió iniciar un proceso como, por ejemplo, root: el proceso en ejecución tiene el UID de root y tiene un acceso completo al sistema, no hay forma de que sudo restrinja eso. Una vez más, siempre eres tú mismo o root, no hay "mitad y mitad". Por lo tanto, si el sudoersarchivo le permite ejecutar el shell como root, los permisos en ese shell serían indistinguibles de un shell raíz "normal".
Sergey
36

Esta respuesta es un engaño de mi respuesta en un engaño de esta pregunta , ¡pon aquí la respuesta canónica para que la gente pueda encontrarla!

La principal diferencia entre sudo -iy sudo -ses:

  • sudo -ile da el entorno raíz, es decir, ~/.bashrcse ignora su
  • sudo -sle brinda el entorno del usuario, por lo que ~/.bashrcse respeta su

Aquí hay un ejemplo, puede ver que tengo una aplicación lslen mi ~/.bin/directorio a la que se puede acceder sudo -spero no con sudo -i. Tenga en cuenta también que la solicitud de Bash cambia como lo hará con sudo -ipero 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 -ses conveniente para darle el entorno con el que está familiarizado, recomiendo el usosudo -i por dos razones:

  1. El recordatorio visual de que estás en una sesión 'raíz'.
  2. Es mucho menos probable que el entorno raíz esté envenenado con malware, como una línea maliciosa .bashrc.
dotancohen
fuente
Noté que sudo -s no parece procesar / etc / profile, ni nada de lo que tengo en /etc/profile.d/ .. ¿alguna idea de por qué?
efecto
@dotancohen: ¿qué quiere decir con sudo -sun entorno con el que el usuario esté familiarizado?
Motivado el
@dotancohen: el comando sudo -s ya proporciona pistas visuales, así que tengo curiosidad de saber por qué sudo -i es una mejor opción.
Motivado el
9

su solicita la contraseña del usuario "root".

sudosolicita su propia contraseña (y también comprueba si tiene permiso para ejecutar comandos como root, que se configura a través de /etc/sudoers- de forma predeterminada, todas las cuentas de usuario que pertenecen a los grupos "admin" o "sudo" pueden usar sudo).

sudo -slanza un shell como root, pero no cambia su directorio de trabajo. sudo -isimula un inicio de sesión en la cuenta raíz: su directorio de trabajo será /root, y la raíz, .profileetc. se obtendrá como si estuviera en el inicio de sesión.

Marius Gedminas
fuente
1
para hacer la respuesta más completa: sudo -ses casi igual a su($ HOME es diferente) y sudo -ies igual asu -
DJCrashdummy
@DJCrashdummy - ¿Por qué dices casi igual a? ¿Que es diferente?
Motivado el
2

En Ubuntu o un sistema relacionado, no encuentro mucho uso suen el sentido tradicional de superusuario. sudomaneja ese caso mucho mejor. Sin embargo, sues excelente para convertirse en otro usuario en situaciones únicas en las que 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 chrooten el sistema. En tal caso, mi primer comando es generalmente:

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

De esa manera, no estoy operando como root, sino como mi usuario normal, y luego lo uso sudosegún corresponda.

Scott Cesantía
fuente
0
  • su Pide contraseña de root, se convierte en root, abre un shell interactivo sin inicio de sesión.
  • su - Pide contraseña de root, se convierte en root, abre un shell de inicio de sesión interactivo.

  • sudo -s Pide sus contraseñas, se convierte en root, abre un shell interactivo sin inicio de sesión.
  • sudo -i Pide sus contraseñas, se convierte en root, abre un shell de inicio de sesión interactivo.

La mejor práctica es usar estos dos.


  • sudo suPide su contraseña, se convierte en root por un segundo y se ejecuta sucomo root`.
  • sudo su -Pide su contraseña, se convierte en root por un segundo y se ejecuta su -como root.

Entonces, en este caso, está suutilizando sudoy no tiene que saber la contraseña real de root. Los resultados son los mismos que suy su -.

Ravexina
fuente
¿Cuál es la diferencia entre el shell de inicio de sesión y el de inicio de sesión?
Piloto 6
1
¿Otra pregunta?
Ravexina