¿Por qué es sudo -s mejor que sudo su?

28

He visto muchos comentarios aquí en Ask Ubuntu con respecto a la preferencia en el uso en sudo -slugar de sudo su.

Para mí, esos dos comandos hacen exactamente lo mismo. Pero, ¿por qué se sudo -ssupone que es mejor?

fitojb
fuente
1
Creo sudo -io sudo sues mejor que sudo -spor las razones mencionadas aquí: ubuntuforums.org/showpost.php?p=6188826&postcount=4 También: este es un posible duplicado de superuser.com/questions/29/…
organice el
Creo que esta pregunta debe ser trasladado a unix.stackexchange.com
IGI

Respuestas:

26

Creo que sudo -sno es "mejor", es simplemente diferente.

sudo -s

mantiene su directorio $ HOME, por lo que cuando inicia programas, usarán sus archivos de configuración (y no la raíz), etc. Desventaja: también pueden cambiar la propiedad de sus archivos en el directorio $ HOME, un ejemplo típico es el .Xauthorityarchivo, pero yo Nunca he tenido un problema con eso.

sudo su o sudo -i

los programas usarán el directorio de inicio de la raíz y sus archivos de configuración. Esto puede ser más intuitivo, pero también significa que no usará ninguna configuración que haya establecido para usted (alias, historial de bash, ...).

organizar
fuente
1
Bien, ahora entiendo la diferencia. ¡Gracias!
fitojb
1
"sudo su" no es equivalente a "sudo -i". "sudo -i" es equivalente a "sudo su -" pero "sudo su -" mantiene el directorio de trabajo actual mientras que "sudo -i" lo traslada al inicio de la raíz
Gregory Pakosz
13

Porque sudo -sno cambiará las variables de su entorno, especialmente $HOME, lo que se mantendrá HOME=/home/USER. Si usa sudo suesto, cambiará a lo HOME=/rootque puede tener efectos secundarios negativos cuando los programas que comience intenten acceder al directorio de inicio de su usuario.

Entonces, básicamente es como sudovs gksudocuando se ejecutan programas gráficos.

htorque
fuente
5

Además de las diferencias ya mencionadas con las variables de entorno, me parece una sudo sutontería y un desperdicio porque le estás pidiendo sudoque se ejecute sucomo root y le pidas que ejecute un shell como root. ¿Por qué pedirle a un programa que le pida a un programa que le proporcione un shell raíz, cuando puede hacer que el primer programa le dé ese shell? ¿Importa eso en algún sentido práctico? No, solo soy pedante.

psusi
fuente
Tienes razón, es algo redundante.
fitojb
Bueno, no del todo: si estás acostumbrado sudo sua ser root, sí, solo ve sudo -i, por ejemplo. Pero ayuda cuando se quiere llegar a ser un usuario diferente: sudo su - myuser.
hggdh
2
Hay otra diferencia: sudo -icambiará al /rootdirectorio y sudo supermanecerá en el directorio en el que se encuentra.
Laurent
1
@hggdh, sudo -u myuser.
psusi
3

No estaría de acuerdo con otras respuestas al considerar los casos en que desea iniciar sesión como un usuario que no tiene un shell. Ese es un caso muy común con usuarios asignados a servicios.

El uso de "sudo su" iniciará el shell especificado por el usuario. Sin embargo, en el caso de un usuario asignado al proceso del servidor, el shell es / usr / bin / false y el registro fallará. En su lugar, debe ingresar como:

sudo -sHu <server-user>

eso lo conectará y cd a su ruta de inicio, incluso si el usuario no tiene un shell asignado

Frank sistemático
fuente