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 sudirige 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. :)
sudoEs muy flexible. Puede limitar los comandos que puede ejecutar un determinado usuario o grupo de usuarios, por ejemplo. Con sutodo 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 dumpy 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 sudoprivilegios a alguien sin darles sudo -sni sudo bashhabilidades. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que con suel sistema completo. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decir sudo vi, por ejemplo, puede pagar viy 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, sudoaí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 sutenían que ser informados. sudopermite 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 sudopara 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 bashy sudo -ses que -ses 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-commandcuál corre some-commandbajo 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 sudollamada, evitando la necesidad de escribir sudorepetidamente.
Ambos comportamientos son opcionales. Mucho más comúnmente, das -ssolo, por lo que solo ejecuta el shell de tu usuario de forma interactiva. En ese modo, difiere de sudo bashque podría ejecutar un shell diferente al bash, ya que se ve primero en la SHELLvariable 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 -shereda 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 -iuna adición relativamente reciente a sudo. En términos generales, sudo -ies sudo -scomo 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 -imucho 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 PAGERsi dices man foomientras estás debajo sudo -s.
Podría decir: "Si pueden modificar PAGER, pueden modificar PATH, y luego pueden simplemente sustituir un sudoprograma maligno ", pero alguien lo suficientemente paranoico puede decir /usr/bin/sudo /bin/bashpara 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 -itambién cambia su directorio de trabajo al directorio de inicio de su usuario, es posible que aún desee utilizarlo sudo -spara aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en el que estaba cdcuando corrió sudo. Es todavía más seguro sudo -iy cdvolver 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.