su vs sudo -s vs sudo -i vs sudo bash

Pregunta:

¿Cuál es la diferencia entre los siguientes comandos?

su
sudo -s
sudo -i
sudo bash

Sé que para su necesito saber la contraseña de root, y para sudo tengo que estar en el archivo sudoers , pero una vez ejecutado, ¿cuál es la diferencia?

Sé que hay una diferencia entre su y sudo -s porque mi directorio de inicio es /root después de ejecutar su , pero mi directorio de inicio sigue siendo /home/myname después de sudo -s . Pero sospecho que esto es solo un síntoma de una diferencia subyacente que me falta.

Respuesta:

Con su , te conviertes en otro usuario, root por defecto, pero potencialmente en otro usuario. Si dice su - , su entorno también se reemplaza con el entorno de inicio de sesión de ese usuario, por lo que lo que ve es indistinguible de iniciar sesión como ese usuario. No hay manera de que el sistema puede decir lo que hacer, mientras que su d' a otro usuario de las acciones de ese usuario cuando se inicia la sesión.

Las cosas son muy diferentes con sudo :

  • Los comandos que ejecuta a través de sudo ejecutan como usuario de destino (root de forma predeterminada, pero se puede cambiar con -u , pero registra los comandos que ejecuta a través de él, etiquetándolos con su nombre de usuario para que se pueda asignar la culpa después. 🙂

  • sudo es muy flexible. Puede limitar los comandos que un determinado usuario o grupo de usuarios puede ejecutar, por ejemplo. Con su , es todo o nada.

    Esta característica se usa normalmente para definir roles. Por ejemplo, puede definir un grupo de "copias de seguridad" al que se le permita ejecutar dump y tar , cada uno de los cuales necesita acceso de root para realizar una copia de seguridad adecuada del disco del sistema.

    Menciono esto aquí porque significa que puedes darle privilegios de sudo alguien sin darle habilidades sudo -s o sudo bash . Solo tienen los permisos que necesitan para hacer su trabajo, mientras que con su han ejecutado todo el sistema. Sin embargo, debe tener cuidado con esto: si le da a alguien la capacidad de decir sudo vi , por ejemplo, puede salir de 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 varios sudoers.

    Esto resuelve un problema administrativo con su , que es que cuando cambia la contraseña de root, todos los que tenían que saberlo para usar su tenían que ser avisados. sudo permite que las contraseñas de los sudoers cambien de forma independiente. De hecho, es común bloquear con contraseña la cuenta del usuario raíz en un sistema con sudo para forzar que todas las tareas del administrador del sistema se realicen a través de sudo . En una organización grande con muchos sudoers confiables, esto significa que cuando uno de los administradores de sistemas 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 corto y le permite pasar comandos para ejecutar en el shell predeterminado de su usuario de un par de formas:

  1. Puede decir sudo -s some-command que ejecuta some-command en su shell. Básicamente es una abreviatura de sudo $SHELL -c some-command .

  2. 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 llamada sudo , evitando la necesidad de escribir sudo repetidamente.

Ambos comportamientos son opcionales. Con mucha más frecuencia, da -s solo, por lo que solo ejecuta el shell de su usuario de forma interactiva. En ese modo, se diferencia de sudo bash en que puede ejecutar un shell diferente al de bash , ya que busca primero en la variable de entorno SHELL , y luego, si no está configurado, en la configuración del shell de inicio de sesión del usuario, normalmente en /etc/passwd .

El shell ejecutado por sudo -s hereda su entorno de usuario actual. Si lo que realmente desea es un entorno limpio, como el que obtiene justo después de iniciar sesión, lo que desea 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 regreso al directorio de inicio de su usuario. Si no le da también comandos para que se ejecute en ese shell a través de la entrada estándar o sudo -i some-command , ejecutará ese shell como un shell de inicio de sesión interactivo, por lo que los scripts de inicio de shell de su usuario (por ejemplo, .bash_profile ) se ejecutarán nuevamente .

Todo esto hace que sudo -i considerablemente más seguro que sudo -s . ¿Por qué? Porque si alguien puede modificar su entorno antes de sudo -s , podría hacer que se ejecuten comandos no deseados. El caso más obvio es modificar SHELL , pero también puede suceder de forma menos directa, como a través de PAGER si dice man foo mientras está bajo sudo -s .

Podría decir, "Si pueden modificar PAGER , pueden modificar PATH , y luego pueden simplemente sustituir un programa sudo malvado", pero alguien suficientemente paranoico puede decir /usr/bin/sudo /bin/bash para evitar esa trampa. Sin embargo, probablemente no sea tan paranoico como para evitar las trampas en todas las demás variables ambientales 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 usar sudo -s para aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en el que estaba cd cuando ejecutó sudo . Sin embargo, aún es más seguro sudo -i y cd regreso a donde estaba.

Otra variante de todo esto que ves a veces es sudo su , que es aproximadamente equivalente a sudo -s . Asimismo, sudo su - está funcionalmente bastante cerca de sudo -i . Dado que sudo y su son comandos que compiten, es un poco extraño emparejarlos así, así que te recomiendo que uses las banderas sudo lugar.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım