GNU/Linux >> Tutoriales Linux >  >> Linux

Comprender la diferencia entre los comandos sudo y su en Linux

En uno de nuestros artículos anteriores, discutimos el comando 'sudo' en detalle. Hacia el final de ese tutorial, se mencionó otro comando similar 'su' en una pequeña nota. Bueno, en este artículo, discutiremos en detalle el comando 'su' y cómo se diferencia del comando 'sudo'.

Pero antes de hacerlo, tenga en cuenta que todas las instrucciones y ejemplos mencionados en este tutorial se han probado en Ubuntu 18.04 LTS y Debian 10.

El comando su en Linux

El trabajo principal del comando su es permitirle cambiar a otro usuario durante una sesión de inicio de sesión. En otras palabras, la herramienta le permite asumir la identidad de otro usuario sin tener que cerrar sesión y luego iniciar sesión (como ese usuario).

El comando su se usa principalmente para cambiar a la cuenta de superusuario/raíz (ya que los privilegios de raíz se requieren con frecuencia mientras se trabaja en la línea de comando), pero, como ya se mencionó, puede usarlo para cambiar a cualquier otro usuario que no sea raíz como bien.

Así es como puede usar este comando para cambiar al usuario raíz:

La contraseña que requiere este comando también es del usuario root. Entonces, en general, el comando su requiere que ingrese la contraseña del usuario objetivo. Después de ingresar la contraseña correcta, la herramienta inicia una subsesión dentro de la sesión existente en el terminal.

su -

Hay otra forma de cambiar al usuario raíz:ejecute el comando 'su -':

Ahora, ¿cuál es la diferencia entre 'su' y 'su -'? Bueno, el primero mantiene el entorno del usuario antiguo/original incluso después de que se haya realizado el cambio a root, mientras que el último crea un nuevo entorno (según lo dictado por ~/.bashrc del usuario root), similar al caso cuando inicia sesión explícitamente como usuario root desde la pantalla de inicio de sesión.

IMPORTANTE para usuarios de Debian 10. La variable PATH del usuario raíz difiere en Debian 10 cuando se usa 'su' frente a 'su -', faltan directorios como /sbin cuando solo se usa 'su', lo que significa que es posible que obtenga errores de comando no encontrado incluso para la administración básica del sistema comandos Así que siempre use 'su -' en Debian 10 para convertirse en usuario root.

La página de manual de 'su' también deja claro:

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Entonces, estará de acuerdo en que iniciar sesión con 'su -' tiene más sentido. Pero como también existe el comando 'su', uno podría preguntarse cuándo es útil. El siguiente extracto, tomado del sitio web wiki de ArchLinux , brinda una buena idea sobre los beneficios y las desventajas del comando 'su':

  • A veces puede resultar ventajoso para un administrador del sistema utilizar la cuenta shell de un usuario normal en lugar de la suya propia. En particular, ocasionalmente la forma más eficiente de resolver el problema de un usuario es iniciar sesión en la cuenta de ese usuario para reproducir o depurar el problema.
  • Sin embargo, en muchas situaciones no es deseable, o incluso puede ser peligroso, que el usuario raíz opere desde la cuenta shell de un usuario común y con las variables ambientales de esa cuenta en lugar de hacerlo desde la suya propia. Al usar sin darse cuenta la cuenta de shell de un usuario común, root podría instalar un programa o realizar otros cambios en el sistema que no tendrían el mismo resultado que si se hubieran realizado mientras usa la cuenta de root. Por ejemplo, se podría instalar un programa que podría dar al usuario común el poder de dañar accidentalmente el sistema u obtener acceso no autorizado a ciertos datos.

Nota:En caso de que desee pasar más argumentos después de - en 'su -', debe usar la opción de línea de comando -l que ofrece el comando (en lugar de -). Aquí está la definición de - y la opción de línea de comando -l:

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.

When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su -c

Hay otra opción del comando 'su' que vale la pena mencionar:-c. Le permite proporcionar un comando que desea ejecutar después de cambiar al usuario de destino.

La página man de 'su' lo explica como:

-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

Considere la siguiente plantilla de ejemplo:

su [target-user] -c [command-to-run]

Entonces, en este caso, el 'comando de ejecución' se ejecutará como:

[shell] -c [command-to-run]

Donde 'shell' sería reemplazado por 'target-user' shell definido en /etc/passwd archivo.

Sudo vs Su

Ahora que también hemos discutido los conceptos básicos del comando 'su', es hora de que discutamos las diferencias entre los comandos 'sudo' y 'su'.

Contraseña

La principal diferencia entre los dos es la contraseña que requieren:mientras que 'sudo' requiere la contraseña del usuario actual, 'su' requiere que ingrese la contraseña del usuario root.

Claramente, 'sudo' es una mejor alternativa entre los dos en lo que respecta a la seguridad. Por ejemplo, considere el caso de una computadora utilizada por varios usuarios que también requieren acceso de raíz. Usar 'su' en tal escenario significa compartir la contraseña de root con todos ellos, lo cual no es una buena práctica en general.

Además, en caso de que desee revocar el acceso de superusuario/root de un usuario en particular, la única forma es cambiar la contraseña de root y luego redistribuir la nueva contraseña de root entre todos los demás usuarios.

Con Sudo, por otro lado, puedes manejar ambos escenarios sin esfuerzo. Dado que 'sudo' requiere que los usuarios ingresen su propia contraseña, no es necesario que comparta la contraseña de root con todos los usuarios en primer lugar. Y para evitar que un usuario en particular acceda a los privilegios de raíz, todo lo que tiene que hacer es modificar la entrada correspondiente en el archivo 'sudoers'.

Comportamiento predeterminado

La otra diferencia entre los dos comandos está en su comportamiento predeterminado. Mientras que 'sudo' solo le permite ejecutar un solo comando con privilegios elevados, el comando 'su' inicia un nuevo shell, lo que le permite ejecutar tantos comandos como desee con privilegios de root hasta que salga explícitamente de esa venta.

Por lo tanto, el comportamiento predeterminado del comando 'su' es potencialmente peligroso dada la posibilidad de que el usuario pueda olvidar el hecho de que está trabajando como root y podría inadvertidamente realizar algunos cambios irrecuperables (como ejecutar el comando 'rm -rf' en forma incorrecta). directorio). Para obtener una discusión detallada sobre por qué no se recomienda trabajar siempre como root, diríjase aquí.

Registro

Aunque los comandos que se ejecutan a través de 'sudo' se ejecutan como el usuario de destino (que es 'root' de forma predeterminada), se etiquetan con el nombre de usuario de sudoer. Pero en el caso de 'su', no es posible rastrear directamente lo que hizo un usuario después de ingresar a la cuenta raíz.

Flexibilidad

El comando 'sudo' es mucho más flexible, ya que incluso puede limitar los comandos a los que desea que tengan acceso los sudo-ers. En otras palabras, los usuarios con acceso a 'sudo' solo pueden tener acceso a los comandos necesarios para su trabajo. Sin embargo, con 'su' eso no es posible:o tienes el privilegio de hacer todo o nada.

Sudo su

Presumiblemente, debido a los riesgos potenciales que implica el uso de 'su' o el inicio de sesión directamente como raíz, algunas distribuciones de Linux, como Ubuntu, desactivan la cuenta de usuario raíz de forma predeterminada. Se anima a los usuarios a usar 'sudo' siempre que necesiten privilegios de root.

Sin embargo, aún puede hacer 'su' con éxito, es decir, sin ingresar la contraseña de root. Todo lo que necesita hacer es ejecutar el siguiente comando:

sudo su

Dado que está ejecutando el comando con 'sudo', solo se le pedirá que ingrese su contraseña. Entonces, una vez hecho esto, el comando 'su' se ejecutará como root, lo que significa que no solicitará ninguna contraseña.

PD :En caso de que desee habilitar la cuenta raíz en su sistema (aunque se desaconseja enfáticamente porque siempre puede usar 'sudo' o 'sudo su'), tendrá que configurar la contraseña raíz manualmente, lo cual puede hacer usando el siguiente comando:

sudo passwd root

Conclusión

Tanto este como nuestro tutorial anterior (que se enfoca en 'sudo') deberían darle una buena idea sobre las herramientas disponibles que le permiten realizar tareas que requieren privilegios escalados (o un conjunto completamente diferente de privilegios). En caso de que tenga algo que compartir sobre 'su' o 'sudo', o quiera compartir su propia experiencia, puede hacerlo en los comentarios a continuación.


Linux
  1. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  2. ¿La diferencia entre usuario y cuenta de servicio?

  3. Linux:¿diferencia entre el espacio del usuario y el espacio del kernel?

  4. ¿Diferencia entre el usuario de Sudo y el usuario raíz?

  5. ¿Cuál es la diferencia entre localizar y encontrar el comando en Linux?

La diferencia entre sudo y su explicada

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre el comando apt y apt-get?

Entendiendo el comando time en Linux

¿Cuál es la diferencia entre 'localizar' y 'buscar' en Linux?

¿Cuál es la diferencia entre &> y >&en bash?