Con su
, te conviertes en otro usuario: root de forma predeterminada, pero potencialmente otro usuario. Si dice su -
, su entorno también se reemplaza con el entorno de inicio de sesión de ese usuario, de modo que lo que ve es indistinguible de iniciar sesión como ese usuario. No hay forma de que el sistema pueda decir lo que usted hace mientras se su
dirige a otro usuario de las acciones de ese usuario cuando inician sesión.
Las cosas son muy diferentes con sudo
:
Los comandos que ejecuta se sudo
ejecutan como el usuario objetivo (raíz de forma predeterminada, pero se puede cambiar con) -u
, pero registra los comandos que ejecuta a través de ellos, etiquetándolos con su nombre de usuario para que luego se pueda asignar la culpa. :)
sudo
Es muy flexible. Puede limitar los comandos que puede ejecutar un determinado usuario o grupo de usuarios, por ejemplo. Con su
todo o nada.
Esta característica se usa generalmente para definir roles. Por ejemplo, podría definir un grupo de "copias de seguridad" que se permita ejecutar dump
y tar
, cada uno de los cuales necesita acceso raíz para realizar una copia de seguridad adecuada del disco del sistema.
Menciono esto aquí porque significa que puedes otorgarle sudo
privilegios a alguien sin darles sudo -s
ni sudo bash
habilidades. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que con su
el sistema completo. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decir sudo vi
, por ejemplo, puede pagar vi
y tener efectivamente el mismo poder que con sudo -s
.
Debido a que toma la contraseña del sudoer en lugar de la contraseña de root, sudo
aísla el permiso entre múltiples sudoers.
Esto resuelve un problema administrativo con su
, que es que cuando la contraseña de root cambia, todos los que tenían que saber usarla su
tenían que ser informados. sudo
permite que las contraseñas de los sudoers cambien independientemente. De hecho, es común bloquear con contraseña la cuenta del usuario root en un sistema sudo
para forzar que todas las tareas de sysadmin se realicen a través de sudo
. En una organización grande con muchos sudoers de confianza, esto significa que cuando uno de los administradores del sistema se va, no tiene que cambiar la contraseña de root y distribuirla a los administradores que permanecen.
La principal diferencia entre sudo bash
y sudo -s
es que -s
es más corta y le permite pasar comandos para ejecutar en el shell predeterminado de su usuario de dos maneras:
Puedes decir sudo -s some-command
cuál corre some-command
bajo tu caparazón. Básicamente es una forma abreviada de sudo $SHELL -c some-command
.
En su lugar, puede pasar los comandos a la entrada estándar del shell, como sudo -s < my-shell-script
. Puede usar esto con un heredoc para enviar varios comandos a una sola sudo
llamada, evitando la necesidad de escribir sudo
repetidamente.
Ambos comportamientos son opcionales. Mucho más comúnmente, das -s
solo, por lo que solo ejecuta el shell de tu usuario de forma interactiva. En ese modo, difiere de sudo bash
que podría ejecutar un shell diferente al bash
, ya que se ve primero en la SHELL
variable de entorno y luego, si no está configurado, en la configuración del shell de inicio de sesión de su usuario, generalmente en /etc/passwd
.
El shell ejecutado por sudo -s
hereda su entorno de usuario actual. Si lo que realmente quieres es un entorno limpio, como el que obtienes justo después de iniciar sesión, lo que quieres es sudo -i
una adición relativamente reciente a sudo
. En términos generales, sudo -i
es sudo -s
como su -
es su
: restablece todas las variables de entorno clave, excepto algunas, y lo envía de vuelta al directorio de inicio de su usuario. Si no le da comandos para que se ejecute bajo ese shell a través de una entrada estándar o sudo -i some-command
, ejecutará ese shell como un shell de inicio de sesión interactivo, de modo que los scripts de inicio del shell de su usuario (por ejemplo .bash_profile
) se ejecuten nuevamente.
Todo esto hace que sea sudo -i
mucho más seguro que sudo -s
. ¿Por qué? Porque si alguien puede modificar su entorno antes sudo -s
, podría provocar que se ejecuten comandos no deseados. El caso más obvio es la modificación SHELL
, pero también puede ocurrir de manera menos directa, como a través de PAGER
si dices man foo
mientras estás debajo sudo -s
.
Podría decir: "Si pueden modificar PAGER
, pueden modificar PATH
, y luego pueden simplemente sustituir un sudo
programa maligno ", pero alguien lo suficientemente paranoico puede decir /usr/bin/sudo /bin/bash
para evitar esa trampa. Sin embargo, probablemente no seas tan paranoico como para evitar las trampas en todas las demás variables de entorno susceptibles. ¿También recordó verificar EDITOR
, por ejemplo, antes de ejecutar cualquier comando VCS ? Por lo tanto sudo -i
.
Debido a que sudo -i
también cambia su directorio de trabajo al directorio de inicio de su usuario, es posible que aún desee utilizarlo sudo -s
para aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en el que estaba cd
cuando corrió sudo
. Es todavía más seguro sudo -i
y cd
volver a donde estaba, sin embargo.
sudo su -
esta manera, no necesita la contraseña de root, y-
se asegura de que el directorio de inicio esté configurado correctamente.