El programa sudo (de las siglas en inglés superuser -o substitute userdo) es una utilidad de los sistemas operativos tipo Unix (*nix), que permite a los usuarios ejecutar programas con los privilegios de seguridad de otro usuario (generalmente el usuario root) de manera segura, y llevar una bitácora de la actividad del usuario.

Los usuarios deben confirmar su identidad al ejecutar sudo dando su propia contraseña antes de ejecutar el programa requerido. Una vez que se ha autenticado el usuario, y si el archivo de configuración /etc/sudoers autoriza el acceso al comando requerido, el sistema lo ejecuta y lo registra.

Este archivo, especifica qué usuarios pueden ejecutar qué comandos en nombre de otros usuarios. Como sudo es muy estricto con el formato de este archivo, y cualquier error podría causar problemas serios, existe la utilidad visudo, que permite al administrador editar el archivo y verificar la sintaxis antes de guardarlo; simplemente ejecutaremos:

[root@ragnarok ~]# visudo

Iniciaremos la configuración, con la información de identificación del equipo:

## Host alias specification
Host_Alias    SERVER=10.98.201.145

Aquí se especifica el nombre y la IP del equipo, cabe mencionar que cualquier cambio en el host o en la IP del sistema, debe verse reflejada aquí también.

A continuación se indican las opciones para que sean registrados los eventos ejecutados mediante sudo, así como indicar el registro del año (log_year), ya que sudo no lo hace por default, y la ubicación del archivo de bitácora:

## Defaults specification
Defaults        syslog=auth
Defaults@SERVER    log_year, logfile=/var/log/sudo.log

NOTA: En algunos sistemas operativos, como AIX, es necesario crear manualmente el archivo de bitácora y agregarlo en el archivo de configuración de syslog (/etc/syslog.conf), en el común de los demás sistemas, no es necesario crear el archivo de log, ya que sudo lo crea automáticamente, lo que siempre debe de existir es el directorio /var/log.

En esta sección, también, el que siempre nos pida la contraseña, esto es, que no se guarde en cache:

Defaults@SERVER    timestamp_timeout=0

Así como los insultos cuando nos equivoquemos en la contraseña de usuario:

Defaults@SERVER    !lecture,tty_tickets,!fqdn,insults

NOTA: Para que esto funcione es necesario haber compilado sudo con la bandera:

[root@ragnarok ~]# ./configure –with-all-insults

Creamos alias para nuestros usuarios que tienen tareas comunes, así como alias para las tareas que permitiremos que desempeñen como root:

## User alias specification
User_Alias        ADMGRP=javerito,trick,larita,axl

## Cmnd alias specification
Cmnd_Alias        CMD=/usr/bin/su –

E indicamos el método para la ejecución de dichas tareas:

## User privilege specification
ADMGRP    SERVER=PASSWD:CMD

Aquí se indican las opciones para que los usuarios puedan utilizar este comando.

Se puede leer como:

El usuario ADMGRP, en el equipo SERVER, puede ejecutar el comando CMD solamente mediante el registro exitoso de su contraseña de acceso al sistema.

Como una recomendación, debemos borrar las líneas de ejemplo que contiene el archivo de configuración:

# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL) ALL

# Same thing without a password
# %wheel        ALL=(ALL) NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now

Si no marca errores de sintaxis, probamos la configuración con algún usuario:

[axl@ragnarok ~]$ sudo -l
Password:
Matching Defaults entries for axl on this host:
syslog=auth, log_year, logfile=/var/log/sudo.log, !lecture, tty_tickets,
!fqdn, insults, timestamp_timeout=0

User axl may run the following commands on this host:
(root) PASSWD: /usr/bin/su –

[axl@ragnarok ~]$ sudo su –
Password:
[root@ragnarok ~]# id
uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp)
[root@ragnarok ~]# exit
[axl@ragnarok ~]$

Verificamos la bitácora de sudo para comprobar que este logeando:

[root@ragnarok ~]#  tail /var/log/sudo.log
Sep 14 12:56:10 2009 : axl : TTY=pts/1 ; PWD=/home/axl ;
USER=root ; COMMAND=list
Sep 14 12:56:20 2009 : axl : TTY=pts/1 ; PWD=/home/axl ;
USER=root ; COMMAND=/usr/bin/su –
[root@ragnarok ~]#

Con esto, tendríamos nuestro sudo trabajando correctamente.

[ root@server ] # ./configure –with-all-insults