Permisos de superadministración a usuarios

Estas aquí:
<< Regresar

Si previamente había trabajado con ubuntu, seguramente conoce la existencia del comando sudo que nos permite ejecutar instrucciones en modo administrador/root sin tener necesariamente los permisos correspondientes para ello.

En ambientes donde varios usuarios usan uno o más sistemas GNU/Linux, es necesario otorgar distintos permisos o privilegios para que estos puedan hacer uso de las cualidades del usuario administrador/root. Para ello la forma más segura de hacerlo es por medio de sudo.

sudo permite implementar un control de acceso altamente granulado de que usuarios ejecutan que comandos. Si un usuario normal desea ejecutar un comando de root (o de cualquier otro usuario), sudo verifica en su lista de permisos y si está permitido la ejecución de ese comando para ese usuario, entonces sudo se encarga de ejecutarlo.

El comando sudo es un programa que basado en una lista de control (/etc/sudoers) permite (o no) la ejecución al usuario que lo invocó sobre un determinado programa propiedad de otro usuario, generalmente del administrador del sistema ‘root’.

sudo, para fines prácticos se puede dividir en tres partes:

  • sudo, el comando con permisos de SUID, que los usuarios usan para ejecutar otros comandos a los que se les permite usar.
  • visudo, el comando que permite al administrador modificar /etc/sudoers.
  • /etc/sudoers, el archivo de permisos que le indica a sudo que usuarios ejecutan cuáles comandos.

Sudo

sudo (SUperuser DO) requiere que los usuarios se autentifiquen a si mismos a través de su contraseña para permitirles la ejecución del comando. Por ejemplo:

sudo aptitude install apache2
Password: ...

sudo se antepone siempre a la instrucción que queremos ejecutar, seguido de eso nos preguntará la contraseña del usuario que lo ejecuta y se llevará acabo la acción.

Cuenta con un tiempo de 5 min. para emplearse de nuevo antes de que tenga que preguntar por la contraseña de nuevo. Si se quiere extender el tiempo por otros 5 minutos usa la opción sudo -v (validate). Por el contario, si ya terminaste lo que tenías que hacer, puedes usar sudo -k (kill) para terminar con el tiempo de gracia de validación. Las instrucciones que se pueden ejecutar con sudo se pueden mostrar con la opción -l es la indicada para eso:

sudo -l
Coincidiendo entradas por defecto para sergio en localhost:
    env_reset,
    mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

El usuario sergio puede ejecutar los siguientes comandos en localhost:
    (ALL : ALL) ALL
env_reset Es el reinicio de las variables de entorno.
mail_badpass Enviar correo si la autentificación de usuario falla.
secure_path Muestra las direcciones que guarda la variable PATH.
El primer y segundo ALL son los permisos para la suplantación de un usuario.
Y el tercero los comandos permitidos.

visudo

Permite la edición del archivo de configuración de sudo sudoers. Invoca al editor que se tenga por defecto que generalmente es vi. visudo cuando es usado, bloquea el archivo /etc/sudoers de tal manera que nadie más lo puede utilizar, esto por razones obvias de seguridad que evitarán que dos o más usuarios administradores modifiquen accidentalmente los cambios que el otro realizó.

Otra característica importante de visudo es que al cerrar el archivo, verifica que el archivo este bien configurado, es decir, detectará si hay errores de sintaxis principalmente en sus múltiples opciones o reglas de acceso que se tengan. Por esta razón no debe editarse /etc/sudoers directamente (perfectamente posible ya que es un archivo de texto como cualquier otro) sino siempre usar visudo.

Si al cerrar visudo detecta un error nos mostrará la línea donde se encuentra, y la pregunta «What now?»:

>>> sudoers file: syntax error, line 15 <<<
What now?

Se tienen tres opciones para esta pregunta:

  • e – edita de nuevo el archivo, colocando el cursor en la línea del error (si el editor soporta esta función.)
  • x – salir sin guardar los cambios.
  • Q – salir y guarda los cambios.

Por defecto el archivo de configuración es /etc/sudoers pero se pueden editar otros archivos que no sean ese y que se aplique la sintaxis de sudo, y esto se logra con la opción -f (visudo -f /otro/archivo).

Sudoers

Archivo de configuración de sudo, generalmente ubicado bajo /etc y se modifica a través del uso de visudo. En este archivo se establece quien (usuarios) puede ejecutar que (comandos) y de que modo (opciones), generando efectivamente una lista de control de acceso que puede ser tan detallada como se desee.

Es más fácil entender sudo si dividimos en tres partes su posible configuración, estás son:

  • Alias
  • Opciones (Defaults)
  • Reglas de acceso

Por extraño que parezca ninguna de las secciones es obligatoria, o tienen que estar en algún orden específico, pero la que al menos debe de existir es la tercera, que es la definción de los controles o reglas de acceso. Se detallará cada uno de estos en un momento. Para los que les gusta saber más la cuestión técnica es interesante saber que la construcción de un archivo sudoers esta basado en la forma BNF (Backus-Naur Form), concretamente en versión extendida (EBNF), si estudiaste algún curso de informática universitario seguramente sabes de lo que hablo. EBNF describe de una forma precisa y exacta la gramática de un lenguaje, esta se va creando a través de reglas de producción que a la vez son la base para ser referenciadas por otras reglas. Afortunadamente no necesitas saber nada de esto, solo entender como se aplican estas reglas.

Modificando el sudoers

Al escribir visudo como root, se tendrá un archivo muy semejante al siguiente

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Para agregar un usuario será debajo de las líneas

# User privilege specification
root ALL=(ALL:ALL) ALL

de la siguiente forma

user ALL=(ALL:ALL) ALL

Donde:

  • user : es el nombre del usuario que vamos a darle permiso para emplear la instrucción sudo
  • ALL= : es el host donde será válido para «user» ejecutar las instrucciones, en caso de que el archivo se vaya a compartir entra varias computadoras se recomienda el uso de ALL
  • (ALL:ALL) : especifica que puede ejecutar instrucciones como todos los usuarios:grupos
  • ALL : las instrucciones que se le permiten ejecutar, se puede cambiar por un path separado por comas en caso de ser más donde se indica las instrucciones que puede ejecutar.

La configuración descrita es muy semejante a ejecutar instrucciones como si fuera root, en caso de que se quisiera ejecutarlas pero si pedir una confirmación de password se puede anteponer antes del último ALL la palabra NOPASSWD quedando de la siguiente manera NOPASSWD:ALL.

Última actualización: septiembre 21, 2018

Deja un comentario