¿Alguna vez recibió un error de "Permiso denegado" mientras trabajaba en la línea de comandos de Linux? Lo más probable es que estaba tratando de realizar una operación que requiere permisos de root. Por ejemplo, la siguiente captura de pantalla muestra el error que se genera cuando intentaba copiar un archivo binario en uno de los directorios del sistema:
Entonces, ¿cuál es la solución a este problema? Simple, usa el sudo comando.
Al usuario que está ejecutando el comando se le pedirá su contraseña de inicio de sesión. Una vez ingresada la contraseña correcta, la operación se realizará con éxito.
Si bien sudo es sin duda un comando que debe conocer cualquier persona que trabaje en la línea de comandos en Linux, hay varios otros detalles relacionados (y detallados) que debe conocer para usar el comando de manera más responsable y efectiva. Y eso es exactamente lo que discutiremos aquí en este artículo.
But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu 14.04LTS with Bash shell version 4.3.11.
¿Qué es sudo?
El comando sudo, como la mayoría de ustedes ya sabrá, se usa para ejecutar un comando con privilegios elevados (generalmente como root). Un ejemplo de esto ya lo hemos discutido en la sección de introducción anterior. Sin embargo, si lo desea, puede usar sudo para ejecutar el comando como otro usuario (no root).
Esto se logra a través de -u opción de línea de comando que proporciona la herramienta. Por ejemplo, en el ejemplo que se muestra a continuación, yo (himanshu) intenté cambiar el nombre de un archivo en el directorio de inicio de otro usuario (howtoforge), pero obtuve un error de "permiso denegado". Y luego probé el mismo comando 'mv' con 'sudo -u howtoforge', el comando fue exitoso:
¿Cualquier usuario puede usar sudo?
No. Para que un usuario pueda usar sudo, una entrada correspondiente a ese usuario debe estar en /etc/sudoers expediente. El siguiente párrafo, tomado del sitio web de Ubuntu, debería dejarlo más claro:
The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).
Si está utilizando Ubuntu, es fácil asegurarse de que un usuario pueda ejecutar el comando sudo:todo lo que tiene que hacer es hacer que la cuenta de usuario escriba 'administrador'. Esto se puede hacer dirigiéndose a Configuración del sistema... -> Cuentas de usuario.
Desbloqueo de la ventana:
Luego seleccione el usuario cuyo tipo de cuenta desea cambiar y luego cambie el tipo a 'administrador'
Sin embargo, si no está en Ubuntu o su distribución no proporciona esta función, puede editar manualmente el /etc/sudoers archivo para realizar el cambio. Se le pedirá que agregue la siguiente línea en ese archivo:
[user] ALL=(ALL:ALL) ALL
No hace falta decir que [usuario] debe reemplazarse por el nombre de usuario de la cuenta a la que está otorgando el privilegio de sudo. Una cosa importante que vale la pena mencionar aquí es que el método sugerido oficialmente para editar este archivo es a través de visudo comando:todo lo que tiene que hacer es ejecutar el siguiente comando:
sudo visudo
Para darle una idea de por qué exactamente es ese el caso, aquí hay un extracto del manual de visudo:
visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.
Para obtener más información sobre visudo, diríjase aquí.
¿Qué es una sesión sudo?
Si usa el comando sudo con frecuencia, estoy seguro de que habrá observado que después de ingresar correctamente la contraseña una vez, puede ejecutar varios comandos sudo sin que se le solicite la contraseña. Pero después de un tiempo, el comando sudo vuelve a solicitar su contraseña.
Este comportamiento no tiene nada que ver con la cantidad de comandos potenciados por sudo que ejecuta, sino que depende del tiempo. Sí, de forma predeterminada, Sudo no solicitará la contraseña durante 15 minutos después de que el usuario la haya ingresado una vez. Publique estos 15 minutos, se le pedirá la contraseña nuevamente.
Sin embargo, si lo desea, puede cambiar este comportamiento. Para esto, abra el archivo /etc/sudoers usando el siguiente comando:
sudo visudo
Y luego ve a la línea que dice:
Defaults env_reset
y agregue la siguiente variable (resaltada en negrita a continuación) al final de la línea
Defaults env_reset,timestamp_timeout=[new-value]
El campo [nuevo valor] debe reemplazarse por la cantidad de minutos que desea que dure su sesión de Sudo. Por ejemplo, usé el valor 40.
En caso de que desee que se le solicite la contraseña cada vez que use el comando sudo, en ese caso puede asignar el valor '0' a esta variable. Y para aquellos de ustedes que desean que su sesión de Sudo nunca se agote, pueden asignar el valor '-1'.
Tenga en cuenta que se desaconseja encarecidamente el uso de timestamp_timeout con el valor '-1'.
La contraseña de sudo
Como habrás observado, cada vez que Sudo te solicita una contraseña y comienzas a ingresarla, no aparece nada, ni siquiera asteriscos, que suele ser la norma. Si bien eso no es un gran problema en general, algunos usuarios pueden querer que se muestren los asteriscos por cualquier motivo.
Lo bueno es que es posible y bastante fácil de hacer. Todo lo que tiene que hacer es cambiar la siguiente línea en el archivo /etc/sudoers:
Defaults env_reset
a
Defaults env_reset,pwfeedback
Y guarde el archivo.
Ahora, cada vez que escriba la contraseña de sudo, aparecerá un asterisco.
Algunas opciones importantes de la línea de comandos de sudo
Aparte de la opción de línea de comando -u (que ya hemos discutido al comienzo de este tutorial), hay algunas otras opciones importantes de línea de comando sudo que merecen una mención. En esta sección, discutiremos algunos de ellos.
La opción -k
Considere un caso en el que acaba de ejecutar un comando impulsado por sudo después de ingresar su contraseña. Ahora, como ya sabe, la sesión de sudo permanece activa durante 15 minutos de forma predeterminada. Suponga que durante esta sesión, tiene que darle a alguien acceso a su terminal, pero no quiere que pueda usar sudo. ¿Qué vas a hacer?
Afortunadamente, existe una opción de línea de comando -k que permite al usuario revocar el permiso sudo. Esto es lo que dice la página man de sudo sobre esta opción:
-k, --reset-timestamp
When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.
When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.
La opción -s
Puede haber ocasiones en las que su trabajo requiera que ejecute una gran cantidad de comandos que necesitan privilegios de root, y no desea ingresar la contraseña de sudo de vez en cuando. Además, no desea modificar el límite de tiempo de espera de la sesión sudo realizando cambios en el archivo /etc/sudoers.
En ese caso, es posible que desee utilizar -s opción de línea de comando del comando sudo. Así es como lo explica la página man de Sudo:
-s, --shell
Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.
Básicamente, lo que hace esta opción de línea de comando es:
- Lanza un nuevo shell; en cuanto al shell, se hace referencia a la variable de entorno SHELL. En caso de que $SHELL esté vacío, el shell definido en /etc/passwd se recoge el archivo.
- Si también está pasando un nombre de comando junto con la opción -s (por ejemplo:sudo -s whoami ), entonces el comando real que se ejecuta es: sudo /bin/bash -c whoami.
- Si no está intentando ejecutar ningún otro comando (es decir, solo está intentando ejecutar sudo -s ) entonces obtienes un shell interactivo con privilegios de root.
Lo que vale la pena tener en cuenta aquí es que la -s La opción de línea de comando le brinda un shell con privilegios de raíz, pero no obtiene el entorno raíz:es su .bashrc el que se obtiene. Esto significa que, por ejemplo, en el nuevo shell que sudo -s corre, ejecutando el whoami el comando aún devolverá su nombre de usuario, y no 'root'.
La opción -i
La opción -i es similar a la opción -s que acabamos de discutir. Sin embargo, hay algunas diferencias. Una de las diferencias clave es que -i también le brinda el entorno raíz, lo que significa que su .bashrc (del usuario) se ignora. Es como convertirse en root sin iniciar sesión explícitamente como root. Además, no tiene que ingresar la contraseña del usuario root también.
Importante :Tenga en cuenta que existe un su comando que también le permite cambiar de usuario (por defecto, le permite convertirse en root). Este comando requiere que ingrese la contraseña 'root'. Para evitar esto, también puedes ejecutarlo con sudo ('sudo su'); en ese caso, solo tendrá que ingresar su contraseña de inicio de sesión. Sin embargo, 'su' y 'sudo su' tienen algunas diferencias subyacentes. Para entenderlas y saber más sobre cómo 'sudo -i' se compara con ellas, dirígete aquí.
Conclusión
Espero que a estas alturas tenga al menos la idea básica detrás de sudo y cómo modificar su comportamiento predeterminado. Pruebe los ajustes de /etc/sudoers que hemos explicado aquí, también revise la discusión del foro (vinculada en el último párrafo) para obtener más información sobre el comando sudo.