Ejecutar un comando como si fueras otro usuario: sudo

Esta receta explica cómo ejecutar comandos del sistema con los permisos de otro usuario.

Introducción

El principal objetivo de sudo es reemplazar al comando su. En algunas situaciones puede reemplazar al SUID. La principal ventaja de utilizar sudo es que no es necesario conocer la password de otro usuario para ejecutar comandos con permisos “especiales”.

Configuración

Lo primero será editar el fichero /etc/sudoers. Existe un comando llamado visudo que directamente edita el fichero con vi. Pero si alguno no sabe utilizar vi, puede utilizar cualquier otro editor. El fichero tiene el formato siguiente:

# Host alias specification
 
# User alias specification
 
# Cmnd alias specification
 
# User privilege specification
root    ALL=(ALL) ALL
fulanito  ALL=(ALL) ALL

En el podemos ver como el usuario root tiene permiso de todo al igual que el usuario fulanito. Muchos administradores opinan que hacer esto es “peligroso” si los usuarios son noveles, pero ese no es mi caso Sticking out tongue.

El fichero se divide en tres secciones:

  • Definiciones de alias
  • Ajuste de opciones por defecto
  • Reglas de acceso

La sección más importante son las reglas de acceso, que tienen esta forma:

usuario host = (usuario_privilegiado) comando

En el ejemplo de antes se ha utilizado un alias especial ALL que engloba a todos los comandos, usuarios y demás historias. Para hacer una configuración más afinada lo mejor es que cada uno se cree sus propios alias y configuraciones. El nombre de usuario privilegiado que se pone entre paréntesis es opcional, si no se pone es root por defecto.

Otro punto a comentar es que cuando se ejecuta cualquier comando con sudo, al usuario se le pide su propia password. Esto impide que si un usuario deja una consola abierta otra persona puede realizar operaciones privilegiadas utilizando su sesión. Puedes evitar la comprobación de clave si escribes la palabra NOPASSWD antes del comando.

Por ejemplo, la siguiente línea permite al usuario webmaster parar y reiniciar el servidor web sin tener que poner su clave:

webmaster ALL= (root) NOPASSWD: /etc/init.d/apache2  

Para evitar esto lo mejor es añadir al usuario en cuestión al grupo sudo. Eso se puede conseguir editando el fichero /etc/group

sudo:x:27:fulanito

O ejecutando:

# addgroup fulanito sudo

Referencias