¿Cómo se usa sudo para ejecutar un comando como usuario root real en Ubuntu? Originalmente pensé que este era el comportamiento predeterminado de sudo, hasta que ejecuté:
myuser@localhost:~$ sudo echo `whoami`
myuser
myuser@localhost:~$ sudo -u root echo `whoami`
myuser
Sin embargo, este es el tipo de comportamiento que quiero, pero solo en una sola línea:
myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root
whoami
? Solo di sudo whoami .. devuelve rootRespuestas:
De hecho, hace ejecutarlas como root. Pero, lo que te está sucediendo es que los ticks posteriores se evalúan antes de las
sudo
ejecuciones, ya que son necesarios para evaluar el comando. Más directamente, ¿por qué no solo esto?Sus
whoami
ticks en la parte posterior se evalúan realmente en una subshell como el usuario actual, por lo que ve lo que hace.fuente
0
(cero), que es exactamente lo que la gente llama "raíz". (Habría tenido razón sisudo
solo extendiera sus capacidades sin cambiar realmente el UID. Pero eso no es lo que hace.)sudo
hace. Pero al leer la respuesta xyr, este no parece haber sido el caso.El subshell (
whoami
) se ejecuta primero, como usted, y el resultado (myuser
) se coloca en elsudo
comando; lo quesudo
ve esecho myuser
. Piense en ello como un atajo para:fuente
Parece que hay algo de suposición aquí ...
Los backticks obviamente están haciendo lo que otros explicaron, expandiéndose
whoami
antes de invocar 'sudo', y dejando los backticks fuera de 'root', como se esperaba.Pero es útil comprender lo que realmente está sucediendo con sudo (8). ¡Así que realmente miré la página del manual!
"El uid y gid real y efectivo están configurados para que coincidan con los del usuario objetivo ..."
Por lo tanto, parece que el comportamiento observado no tiene nada que ver con la diferencia entre la identificación de usuario real y efectiva.
También es ilustrativo hacer "sudo printenv" y compararlo solo con "printenv", lo que realmente me sorprendió un poco. Muestra que [i] algunas [/ i] variables exportadas están disponibles y otras no: informa la INICIO, RUTA, PS1, SHELL, TERM y EDITOR del usuario que invoca, pero no otras como MANPATH, CVSROOT, LD_LIBRARY_PATH, o ENV. Eso parece un poco extraño, ya que podría hacer que los programas se comporten de manera diferente a como el usuario original o como root.
fuente
sudo le permite ejecutar cualquier comando con privilegios de root, pero no como usuario root. La razón por la que esto es útil es que con esta configuración, varias personas pueden tener derechos de root y todo el registro, etc., sigue indicando quién realizó los cambios.
Esta configuración es mejor que compartir contraseñas raíz. Como tal, ha reemplazado tener usuarios root en muchas distribuciones, incluida Ubuntu.
sudo su, por otro lado, lo convierte en el usuario root y, por lo tanto, realmente no debe usarse.
Esta diferencia también explica su comportamiento observado (correcto).
fuente
Sudo otorga temporalmente privilegios a quien sea que sea (dado que se le permite sudo en primer lugar) privilegios de nivel raíz.
Para ser root, deberías iniciar sesión como root que está bloqueado en Ubuntu de forma predeterminada.
Debe tener cuidado con esto, sudo no es root. Si desea mostrar que Fred está ejecutando algo como sudo, che3d las variables de entorno SUDO, SUDO_COMMAND podría ser la más útil.
fuente