¿Alguna vez hay una buena razón para ejecutar sudo su?


78

Para iniciar un shell raíz en máquinas donde la cuenta raíz está deshabilitada, puede ejecutar uno de:

  • sudo -i: ejecuta un shell de inicio de sesión interactivo (lee /root/.bashrcy /root/.profile)
  • sudo -s: ejecutar un shell interactivo sin inicio de sesión (lecturas /root/.bashrc)

En el mundo de Ubuntu, a menudo veo sudo susugerencias como una forma de obtener un shell raíz. ¿Por qué ejecutar dos comandos separados cuando uno lo hará? Por lo que puedo decir, sudo -ies equivalente sudo su -y sudo -ses igual a sudo su.

Las únicas diferencias parecen ser (comparando sudo -ia la izquierda y sudo su -a la derecha):

captura de pantalla de meld comparando 'sudo -i' y 'sudo su -'

Y comparando sudo -s(izquierda) y sudo su(derecha):

captura de pantalla de meld comparando 'sudo -s' y 'sudo su'

Las principales diferencias (ignorando las SUDO_foovariables y LS_COLORS) parecen ser las XDG_foovariables del sistema en las sudo suversiones.

¿Hay algún caso en el que esa diferencia justifique el uso de algo poco elegante sudo su? ¿Puedo decirle con seguridad a la gente (como a menudo lo hago) que nunca tiene sentido correr sudo suo me falta algo?


8
Nunca he entendido esos sistemas sofisticados como los ubuntuque impiden que los usuarios sean estándar su -. Crearon el problema y ahora hay discusiones interminables sobre cómo resolverlo.
jimmij

16
@jimmij ¿No necesitas saber la contraseña de root con su -? ¿No crees que eso plantea un agujero de seguridad en entornos de múltiples usuarios, donde más de una persona necesita tener acceso de root?
Erathiel

44
@Christopher El problema no es uno de los usuarios que tienen el privilegio sudo o la contraseña de root para hackear el sistema. El problema es sobre la seguridad de la contraseña. Cuando cambia la contraseña de root, debe informar a todos los usuarios que la necesitan, lo que puede ser difícil. Con sudo, no tienes esta dificultad.
Huygens

44
¿Qué es la herramienta diff?
Josh The Geek

55
@jimmij ¿Cómo evita Ubuntu el uso de su -? Sí, uno tendría que establecer una contraseña de root, pero eso es trivial.
Phises

Respuestas:


62

Como dijo en su pregunta, la principal diferencia es el medio ambiente.

sudo su - vs. sudo -i

En caso de sudo su -que es un shell de entrada, por lo que /etc/profile, .profiley .bashrcse ejecutan y se encontrará en el directorio inicial de la raíz con el medio ambiente de la raíz.

sudo -ies casi lo mismo que sudo su -La -iopción (simular inicio de sesión inicial) ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario objetivo como un shell de inicio de sesión. Esto significa que los archivos de recursos específicos de inicio de sesión como .profile, .bashrco .loginserán leídos y ejecutados por el shell.

sudo su vs. sudo -s

sudo sullama sudocon el comando su. Bash se llama como shell interactivo sin inicio de sesión. Entonces bashsolo se ejecuta .bashrc. Puede ver que después de cambiar a root todavía está en el mismo directorio:

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

sudo -slee la $SHELLvariable y ejecuta el contenido. Si $SHELLcontiene /bin/bashinvoca sudo /bin/bash, lo que significa que /bin/bashse inicia como un shell sin inicio de sesión, por lo que todos los archivos de puntos no se ejecutan, sino que bashse lee. bashrcdel usuario llamante. Tu entorno permanece igual. Su hogar no será el hogar de la raíz. Entonces eres root, pero en el entorno del usuario que llama.

Conclusión

La -ibandera fue agregada sudoen 2004 , para proporcionar una función similar a sudo su -, así sudo su -fue la plantilla para sudo -iy tenía la intención de funcionar así. Creo que realmente no importa cuál uses, a menos que el entorno no sea importante.

Adición

Un punto básico que debe mencionarse aquí es que sudofue diseñado para ejecutar un solo comando con mayores privilegios y luego soltar esos privilegios a los originales. Nunca tuvo la intención de cambiar realmente al usuario y dejar abierto un shell raíz. Con el tiempo, sudose amplió con tales mecanismos, porque la gente estaba molesta por qué usar sudofrente a cada comando.

Entonces el significado de sudofue abusado. sudoestaba destinado a alentar al usuario a minimizar el uso de privilegios de root.

Lo que tenemos ahora es sudocada vez más popular. Está integrado en casi todas las distribuciones de Linux conocidas. La herramienta original para cambiar a otra cuenta de usuario es su. Para un veterano de la vieja escuela * nix, tal cosa sudopodría parecer innecesaria. Agrega complejidad y se comporta más probablemente a los mecanismos que conocemos de Microsofts os-family, y por lo tanto es contrario a la filosofía de simplicidad de los sistemas * nix.

Realmente no soy un veterano, pero también en mi opinión sudosiempre fue una espina en mi costado, desde el momento en que se presentó y siempre trabajé en torno al uso de sudo, si fuera posible. Soy muy reacio a usar sudo. En todos mis sistemas, la cuenta raíz está habilitada. Pero las cosas cambian, tal vez llegará el momento, cuando suserá obsoleto y se sudoreemplazará por sucompleto.

Por lo tanto, creo que será mejor utilizar sudolos mecanismos internos ( -s, -i) en lugar de depender de una herramienta antigua como su.


44
Ah, ¿entonces antes de 2004 había una razón para correr sudo suentonces? En ese momento estaba usando distribuciones sin sudo y cuentas raíz activas, así que no lo sé. Eso podría explicar la prevalencia del sudo su meme en el mundo de Ubuntu.
terdon

8
Nunca supe sobre sudo -io sudo -santes: he estado ejecutando UNIX de varios tipos desde 1991 y para mí sudo su -es solo un hábito arraigado en este momento.
esponjoso

2
¿Es sudo -slo mismo que sudo $SHELLentonces?
Samuel Edwin Ward

3
(De acuerdo con @chaos) Las razones para usar sudo su -son 1) que funciona y sabes exactamente lo que hace, y 2) que no tienes que recordar otra opción sudo(cuando ya lo sabes su -) y 3) no lo haces ' No tengo que recordar con qué versión sudoestás trabajando en este momento. ¿Por qué recordar una pieza más de trivia cuando lo que ya tienes funciona bien? ¿Hay algo que su -ifuncione mejor que evitar una entrada de registro? No uso lo sudo su -suficiente como para preocuparme por eso.
jrw32982

3
Acabo de ver la actualización, muy agradable! Para el registro, permítanme decir que yo también me corté los dientes * nix en sistemas sin sudoy estoy muy acostumbrado su. Es la combinación de los dos lo que me molesta.
terdon

16

Para responder a su pregunta directamente: no, no hay una buena razón para hacerlo. Además, sudo su produce dos entradas de registro cuando una sería suficiente.

He visto a muchas personas hacer esto, y cuando les pregunto por qué no solo corren sudo -s, la respuesta es que no saben sobre la -sbandera para sudo, y generalmente cambian después de que lo señale.

Sin embargo, a su lista de sudo -sy sudo -i, me gustaría agregar una opción más sudo -sE, que es una especie de reemplazo para su -m. sudo -sEpreserva su entorno, incluido el directorio de inicio. Esto tiene riesgos si su directorio de inicio es inseguro (en NFS). Pero en un entorno donde muchas personas usan root, le evita tener que ponerse de acuerdo sobre el contenido del .bashrcarchivo raíz . Mi .bashrccontiene muchas especializaciones para root, por lo que no obtengo exactamente el mismo entorno que root, pero al menos obtengo exactamente el entorno que quiero.


44
Si conserva su entorno, incluido $HOME, eso significa que todos los archivos nuevos creados en la carpeta de inicio son propiedad de root, no de usted. He tenido esta causa de muchos errores de permisos difíciles de diagnosticar.
Eris

sudo -sEy luego echo $HOMEda /rooten CentOS 7, bash 4.2. -sEno parece preservar el directorio de inicio como usted indicó.
jeremysprofile
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.