Sudo/es

La orden sudo ofrece una forma sencilla y segura de configurar el escalado de privilegios, esto es, permitir a los usuarios normales correr algunas (o todas) las órdenes que se deseen como root o como otro usuario, posiblemente sin tener que suministrar una contraseña.

Cuando quiera que varias personas realicen ciertas tareas administrativas en su sistema sin que tenga que concederles un acceso total como root, el uso de sudo es la mejor opción. Con sudo puede controlar quién puede hacer según qué. Esta guía le ofrece una pequeña introducción a esta maravillosa herramienta.

This article is meant as a quick introduction. The package is a lot more powerful than what is described in this guide. It has special features for editing files as a different user (sudoedit), running from within a script (so it can background, read the password from standard in instead of the keyboard, ...), etc.

Please read the sudo and sudoers manual pages for more information.

Logging activity
One additional advantage of sudo is that it can log any attempt (successful or not) to run an application. This is very useful if you want to track who made that one fatal mistake that took you 10 hours to fix :)

Granting permissions
The package allows the system administrator to grant permission to other users to execute one or more applications they would normally have no right to. Unlike using the  bit on these applications sudo gives a more fine-grained control on who can execute a certain command and when.

Con sudo puede hacer una lista completa de "quién" puede ejecutar una aplicación determinada. Si estableciera el bit setuid, cualquier usuario podría ejecutar la aplicación (o cualquier usuario de un grupo en concreto, dependiendo de los permisos empleados). Puede (e incluso debería) exigir al usuario que proporcione una contraseña cuando éste quiera ejecutar la aplicación.

La configuración de sudo se gestiona mediante el fichero. Este fichero no se debe editar con nano /etc/sudoers</tt> o vim /etc/sudoers</tt> o cualquier otro editor. Cuando quiera modificar este fichero, tendrá que utilizar visudo</tt>.

Esta herramienta se asegura que no haya dos administradores del sistema editando el fichero al mismo tiempo, conserva sus permisos y realiza una comprobación de la sintaxis para cerciorarse de que no se cometan errores fatales en el fichero.

Sintaxis básica
La parte más difícil de sudo</tt> es la sintaxis de. La sintaxis básica es la siguiente:

Esta sintaxis le indica a sudo</tt> que el usuario, identificado como  y conectado al sistema , puede ejecutar cualquiera de las órdenes listados en   como usuario root. Un ejemplo más real podría ser más clarificador: permitir al usuario swift ejecutar emerge</tt> si está conectado al equipo localhost.

El nombre de usuario también se puede sustituir por un nombre de grupo. En este caso, debería anteponer el signo  al nombre del grupo. Por ejemplo, para permitir que cualquier usuario del grupo wheel</tt> pueda correr emerge</tt>:

Puede ampliar la línea para permitir varias órdenes (en lugar de escribir una línea para cada orden). Por ejemplo, para permitir al mismo usuario no sol correr emerge</tt> como root sino también ebuild</tt> y emerge-webrsync</tt>:

Puede incluso especificar una orden preciso y no solo la propia herramienta en sí. Esto es útil para restringir el uso de cierta herramienta a un grupo específico de argumentos. La herramienta sudo</tt> permite el uso de caracteres comodín del estilo del intérprete de órdenes (también conocidos como metacaracteres o caracteres "glob") en nombres de ruta así como en argumentos de la línea de órdenes dentro del fichero sudoers. Observe que estos "no" son expresiones regulares.

Pongamos todo esto a prueba:

La contraseña solicitada por sudo</tt> es la del propio usuario. Esto es para asegurarse de que ninguna terminal abierta accidentalmente a otros por error sea utilizada con fines dañinos.

Debería saber que sudo</tt> no cambia la variable : cualquier orden situada después de sudo</tt> se trata desde "su" entorno. Si desea que el usuario corra una herramienta ubicada en, por ejemplo, éste debería proporcionar a sudo</tt> la ruta completa, algo como:

Sintaxis básica con LDAP
El siguiente ajuste USE es necesario para ofrecer soporte LDAP.

Cuando se utiliza sudo con LDAP, sudo también leerá la configuración del servidor LDAP, por lo que necesitará editar estos dos ficheros.

También necesitará añadir la siguiente entrada LDAP para sudo.

Las configuraciones del sudoer en LDAP son similares a los ficheros con algunas diferencias. Por favor, lea más sobre sudo con LDAP en el enlace de abajo página del manual de Sudoers LDAP

(para distinguir correctamente entre lo que son y no son alias, se recomienda utilizar mayúsculas para los alias). Como indudablemente habrá deducido, el alias  sirve para todas los valores posibles.

Un ejemplo de uso del alias  para permitir a "cualquier" usuario lanzar la orden <tt>shutdown</tt> si ha accedido al sistema local es:

Otro ejemplo es permitir al usuario <tt>swift</tt> lanzar la orden <tt>emerge</tt> como root, independientemente del equipo donde haya iniciado sesión:

Más interesante es definir un conjunto de usuarios que puedan correr aplicaciones de software administrativo (como por ejemplo <tt>emerge</tt> y <tt>ebuild</tt>) en el sistema y un grupo de administradores que puedan cambiar la contraseña de cualquier usuario, excepto la de root:

Non-root execution
It is also possible to have a user run an application as a different, non-root user. This can be very interesting if you run applications as a different user (for instance <tt>apache</tt> for the web server) and want to allow certain users to perform administrative steps as that user (like killing zombie processes).

Inside you list the user(s) in between   and   before the command listing:

For instance, to allow <tt>larry</tt> to run the <tt>kill</tt> tool as the <tt>apache</tt> or <tt>gorg</tt> user:

With this set, the user can run <tt>sudo -u</tt> to select the user he wants to run the application as:

You can set an alias for the user to run an application as using the  directive. Its use is identical to the other  directives we have seen before.

Passwords and default settings
By default, <tt>sudo</tt> asks the user to identify himself using his own password. Once a password is entered, <tt>sudo</tt> remembers it for 5 minutes, allowing the user to focus on his tasks and not repeatedly re-entering his password.

Of course, this behavior can be changed: you can set the  directive in  to change the default behavior for a user.

For instance, to change the default 5 minutes to 0 (never remember):

A setting of  would remember the password indefinitely (until the system reboots).

A different setting would be to require the password of the user that the command should be run as and not the users' personal password. This is accomplished using. In the following example we also set the number of retries (how many times the user can re-enter a password before <tt>sudo</tt> fails) to  instead of the default 3:

Another interesting feature is to keep the  variable set so that you can execute graphical tools:

You can change dozens of default settings using the  directive. Fire up the <tt>sudoers</tt> manual page and search for.

If you however want to allow a user to run a certain set of commands without providing any password whatsoever, you need to start the commands with, like so:

Bash completion
Users that want bash completion with sudo need to run this once.

Zshell completion
Users that want zsh completion for sudo can set the following in and  respectively

With the above change, all commands in the, and  locations will be available to the shell for completion when the command is prefaced with 'sudo'.

Listar Privilegios
Ejecute <tt>sudo -l</tt> para informarse de cuáles son sus capacidades:

Si tiene cualquier orden en que no le pida que introduzca una contraseña, tampoco se le pedirá una contraseña para listar las entradas. De no ser así, se le podría pedir su contraseña si no se recuerda.

Prolongar la Caducidad de la Contraseña
Por defecto, si un usuario introdujo su contraseña para autenticarse ante <tt>sudo</tt>, ésta se recuerda durante cinco minutos. Si el usuario quiere prolongar este periodo, puede ejecutar <tt>sudo -v</tt> para reiniciar la marca de tiempo de modo que pasen otros cinco minutos antes de que <tt>sudo</tt> pregunte de nuevo por la contraseña.

Lo contrario es quitar la marca de tiempo con <tt>sudo -k</tt>.