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/.bashrc
y/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 su
sugerencias 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 -i
es equivalente sudo su -
y sudo -s
es igual a sudo su
.
Las únicas diferencias parecen ser (comparando sudo -i
a la izquierda y sudo su -
a la derecha):
Y comparando sudo -s
(izquierda) y sudo su
(derecha):
Las principales diferencias (ignorando las SUDO_foo
variables y LS_COLORS
) parecen ser las XDG_foo
variables del sistema en las sudo su
versiones.
¿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 su
o me falta algo?
fuente
ubuntu
que impiden que los usuarios sean estándarsu -
. Crearon el problema y ahora hay discusiones interminables sobre cómo resolverlo.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?su -
? Sí, uno tendría que establecer una contraseña de root, pero eso es trivial.Respuestas:
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
,.profile
y.bashrc
se ejecutan y se encontrará en el directorio inicial de la raíz con el medio ambiente de la raíz.sudo -i
es casi lo mismo quesudo su -
La-i
opció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
,.bashrc
o.login
serán leídos y ejecutados por el shell.sudo su
vs.sudo -s
sudo su
llamasudo
con el comandosu
. Bash se llama como shell interactivo sin inicio de sesión. Entoncesbash
solo se ejecuta.bashrc
. Puede ver que después de cambiar a root todavía está en el mismo directorio:sudo -s
lee la$SHELL
variable y ejecuta el contenido. Si$SHELL
contiene/bin/bash
invocasudo /bin/bash
, lo que significa que/bin/bash
se inicia como un shell sin inicio de sesión, por lo que todos los archivos de puntos no se ejecutan, sino quebash
se lee.bashrc
del 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
-i
bandera fue agregadasudo
en 2004 , para proporcionar una función similar asudo su -
, asísudo su -
fue la plantilla parasudo -i
y 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
sudo
fue 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,sudo
se amplió con tales mecanismos, porque la gente estaba molesta por qué usarsudo
frente a cada comando.Entonces el significado de
sudo
fue abusado.sudo
estaba destinado a alentar al usuario a minimizar el uso de privilegios de root.Lo que tenemos ahora es
sudo
cada vez más popular. Está integrado en casi todas las distribuciones de Linux conocidas. La herramienta original para cambiar a otra cuenta de usuario essu
. Para un veterano de la vieja escuela * nix, tal cosasudo
podrí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
sudo
siempre fue una espina en mi costado, desde el momento en que se presentó y siempre trabajé en torno al uso desudo
, si fuera posible. Soy muy reacio a usarsudo
. En todos mis sistemas, la cuenta raíz está habilitada. Pero las cosas cambian, tal vez llegará el momento, cuandosu
será obsoleto y sesudo
reemplazará porsu
completo.Por lo tanto, creo que será mejor utilizar
sudo
los mecanismos internos (-s
,-i
) en lugar de depender de una herramienta antigua comosu
.fuente
sudo su
entonces? 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.sudo -i
osudo -s
antes: he estado ejecutando UNIX de varios tipos desde 1991 y para mísudo su -
es solo un hábito arraigado en este momento.sudo -s
lo mismo quesudo $SHELL
entonces?sudo su -
son 1) que funciona y sabes exactamente lo que hace, y 2) que no tienes que recordar otra opciónsudo
(cuando ya lo sabessu -
) y 3) no lo haces ' No tengo que recordar con qué versiónsudo
estás trabajando en este momento. ¿Por qué recordar una pieza más de trivia cuando lo que ya tienes funciona bien? ¿Hay algo quesu -i
funcione mejor que evitar una entrada de registro? No uso losudo su -
suficiente como para preocuparme por eso.sudo
y estoy muy acostumbradosu
. Es la combinación de los dos lo que me molesta.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-s
bandera para sudo, y generalmente cambian después de que lo señale.Sin embargo, a su lista de
sudo -s
ysudo -i
, me gustaría agregar una opción mássudo -sE
, que es una especie de reemplazo parasu -m
.sudo -sE
preserva 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.bashrc
archivo raíz . Mi.bashrc
contiene muchas especializaciones para root, por lo que no obtengo exactamente el mismo entorno que root, pero al menos obtengo exactamente el entorno que quiero.fuente
$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.sudo -sE
y luegoecho $HOME
da/root
en CentOS 7, bash 4.2.-sE
no parece preservar el directorio de inicio como usted indicó.