Translation(s): العربية - English - Español - Français - Italiano - Русский

(!) ?Discussion


Root > sudo


Sudo es un programa diseñado para facilitar a los administradores del sistema permitir a algunos usuarios ejecutar órdenes como root (u otro usuario). La filosofía básica es permitir a las personas realizar su trabajo otorgándoles los mínimos privilegios posibles. Sudo también es una vía efectiva para registrar quien ejecutó tal orden y cuando.

¿Porque sudo?

Usar sudo es más seguro que abrir una sesión de root por varias razones, algunas son:

Por estas razones, escalar a root usando sudo -i o sudo su debería caer en desuso porque cancela lo anteriormente indicado.

Usuarios y sudo

La configuración por omisión de Debian permite a los usuarios del grupo sudo ejecutar cualquier orden mediante el prefijo sudo.

Verificar la pertenencia a sudo

Un usuario puede comprobar si pertenece o no a un grupo sudo usando las órdenes id o groups. Por ej., el usuario pepe debería ver una respuesta a

como

Si sudo no consta en la respuesta es que no es miembro del grupo. Análogamente, la orden id debería producir una respuesta más completa y variable con esta pinta:

Agregar un usuario existente al grupo mediante la línea de órdenes

Para agregar al usuario existente pepe al gruposudo:

Alternativamente se puede escalar primero a root (Por ej.: sudo su -) y a continuación ejecutar las órdenes sin el prefijo sudo:

El sistema lee los grupos de cada usuario al ingresar por lo que tras añadirle a un grupo el usuario tiene que salir y reingresar para hacer efectiva su nueva membresía. Es frecuente que la gente se añada a si misma a un grupo y experimente problemas porque se le olvida reingresar y el sistema no se entera. Compruebe si su membresía es efectiva.

Crear usuarios con sudo

También se pueden crear usuarios a la vez que se les agrega al grupo sudo:

Crear un usuario nuevo al instalar el sistema operativo

En Debian Squeeze, si se le da a root una contraseña vacía durante su instalación, se instalará sudo y el primer usuario podrá emplearlo para escalar a permisos de root (se le añade al grupo sudo). El sistema configurará también gksu y aptitude para emplear sudo. Aún así compruebe si su membresía es efectiva tras ingresar con el usuario creado durante la instalación.

Crear un usuario nuevo desde la línea de órdenes

Un usuario del grupo sudo puede crear otro (por ejemplo otrousuario) e ingresarle al mismo tiempo en el grupo sudo desde la línea de órdenes:

(o escalar primero a root como en la sección anterior). A continuación ingrese con el usuario nuevo y compruebe si su membresía es efectiva.

Resumen de configuración

Si desea permitir a ciertos usuarios ejecutar determinados programas, este es un ejemplo rápido (para mas información lea el estupendo manual).

# /etc/sudoers
#
# Este archivo TIENE que editarse como 'root' mediante la orden 'visudo'.
#
# Lea la página man para más detalles sobre cómo redactar un archivo 'sudoers'.
#

Defaults        env_reset

# Especificación del alias del host
User_Alias      MYADMINS = jdoe

# Especificación del alias del usuario

# Especificación del alias de Cmnd
Cmnd_Alias      SHUTDOWN = /sbin/reboot, /sbin/poweroff
Cmnd_Alias      PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude

# Especificación de los privilegios del usuario

# Los usuarios listados arriba (MYADMINS) pueden ejecutar el administrador de paquetes y reiniciar el sistema.
MYADMINS ALL = PKGMGMT, SHUTDOWN

# Los usuarios del grupo wheel pueden ejecutar cualquier orden suplantando a cualquier usuario.
#%wheel ALL= ALL

# Regla por omisión para 'root'.
root    ALL=(ALL) ALL

Problemas y consejos

PATH no establecido

Un error típico al instalar un paquete podría mostrar:

dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.

El archivo /etc/sudoers empaquetado contiene esta linea:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Las versiones anteriores no incluyeron esa linea. Si la máquina tenía un /etc/sudoers modificado localmente (como la mayoría) y luego se actualizó el sistema manteniéndolo, esta nueva línea necesaria faltará. La línea hace que al emplear sudo no se cambie el PATH y con toda probabilidad el PATH no se establezca adecuadamente y le falten los directorios del sistema. La solución es combinar nuestros cambios locales con el nuevo archivo /etc/sudoers del paquete. O mejor llevar tus cambio locales al nuevo /etc/sudoers.d/ con un nombre único como /etc/sudoers.d/sudoers-locales. Ver 639841 para más detalles.

Lo sentimos, el usuario jdoe no tiene permitido ejecutar...

Una sesión típica es similar a esta:

El mensaje significa lo que dice: el usuario no tiene permitido ejecutar esa orden en esa máquina. Una razón para la confusión sobre esto es que el administrador acaba de añadir al usuario jdoe a un grupo privilegiado, pero el usuario continúa usando una sesión vieja, que no tiene la nueva información de los grupos, y por supuesto no tiene los derechos de sudo. Se suele recomendar a la gente que salga y vuelva a entrar al sistema, aunque a veces suele bastar con un reinicio de sesión in situ mediante su - $USER.

La directiva include

El archivo estándar /etc/sudoers en Squeeze finaliza con la línea:

Esto hace posible a otros paquetes proveer fragmentos en /etc/sudoers.d/<nombre_del_paquete> que modifican la configuración de sudo. Puede parecer que se deba eliminar el signo ("almohadilla" o "hashtag"), pero ¡no, el '#' es parte de la directiva!

El archivo sudoers está protegido contra escritura

Sí, el archivo /etc/sudoers esta protegido contra escritura intencionadamente, ¡incluso para root!

La explicación habitual es que se configuró así para asegurar que los administradores sólo lo editen mediante la orden visudo. Sin embargo esta teoría no se sostiene. Tener el modo 0440 no hace nada por impedir sudo nano /etc/sudoers - la mayoría de los editores de texto te permitirán editar el archivo sin quejarse del bit de protección contra escritura. Además, si te lo cargas, arreglarlo sería algo tán simple como su -c visudo, que es nada comparado con el tipo de procedimiento de recuperación por el que habría que pasar si se rompiera algo como /etc/inittab (mode 0644). Así que si hay alguna buena razón para los permisos heterodoxos, es un misterio - se aceptan explicaciones.

Comportamiento de HOME (y ajustes del perfil) incorrecto

Si al hacer sudo surgen problemas y $HOME(y los ajustes del perfil) no funciona como se espera porque el nuevo HOME es /root, sepa que la configuración de sudo en Squeeze restablece todas las variables de entorno. Para restablecer el comportamiento anterior de mantener la variable de entorno $HOME del usuario se puede añadir esto al archivo de configuración /etc/sudoers:

Defaults env_keep += HOME

Exigir la contraseña de root

Si se quiere exigir la contraseña de root para emplear sudo en vez de la del usuario se puede añadir la linea:

Defaults   rootpw

No pedir contraseña

Si se quiere permitir a los miembros del grupo sudo ejecutar órdenes sin que se les pida contraseña se puede añadir la linea:

%sudo ALL=(ALL) NOPASSWD: ALL

Para más información lea el registro de cambio en origen para la versión 1.7.4.

Personalizar el tiempo de validez de las credenciales

Por omisión, tras pedir la contraseña sudo recuerda las credenciales durante 15 minutos. Se puede alterar este comportamiento empleando la orden visudo y personalizando el tiempo de validez para un usuario:

Defaults:usuario timestamp_timeout=30

Ver también