4.4. Controles administrativos

Cuando se está administrando una máquina del hogar, el usuario tiene que llevar a cabo algunas tareas como usuario root o adquiriendo privilegios de root a través del programa setuid, tal como sudo o su. Un programa setuid es aquel que opera con el ID (UID) del usuario del dueño del programa en vez del usuario que esté operando el programa. Tales programas son denotados con una s en minúscula en la sección del dueño de un listado de formato largo.

-rwsr-xr-x    1 root     root        47324 May  1 08:09 /bin/su

Sin embargo, los administradores de sistemas de una organización deben decidir cuánto acceso administrativo se le otorga a los usuarios dentro de la organización a sus máquinas. A través de un módulo PAM llamado pam_console.so, se permiten algunas actividades normalmente reservadas para usuarios root, tales como reinicio o el montaje de media removible, al primer usuario que se conecte en la consola física (consulte el capítulo llamado Pluggable Authentication Modules (PAM) en el Manual de referencia de Red Hat Enterprise Linux para más detalles sobre el módulo pam_console.so). Sin embargo, otras tareas importantes de administración de sistemas tales como la modificación de las configuraciones de la red, configurar un nuevo ratón o montar dispositivos de red, son imposibles sin acceso administrativo. En consecuencia, los administradores deben decidir cuanto acceso administrativo deberían recibir los usuarios en la red.

4.4.1. Permitir el acceso como root

Si los usuarios dentro de la organización son de confianza e interesados en la computación, entonces darles acceso root quizás no sea una mala idea. Permitir el acceso root a los usuarios significa que los pequeños problemas tales como añadir dispositivos o configurar interfaces de red, pueden ser manejados por los usuarios individuales, dejando a los administradores de sistemas libres para manejar la seguridad de la red u otras cosas de mayor importancia.

Por otro lado, dar acceso root a usuarios individuales puede conllevar a los siguientes problemas (para nombrar algunos):

4.4.2. Desactivación del acceso root

Si un administrador no está cómodo con permitir a los usuarios tener acceso como root por estas u otras razones, entonces la contraseña de root debería mantenerse en secreto y deshabilitar el acceso a nivel uno o en modo monousuario a través de la protección con contraseñas del gestor de arranque (consulte la Sección 4.2.2 para más detalles sobre este tema).

La Tabla 4-1 muestra las formas en que un administrador puede asegurar aún más que las conexiones como root esten prohibidas.

MétodoDescripciónEfectosNo afecta
Cambiar el shell de root.Modifique el archivo /etc/passwd y cambie el shell de /bin/bash a /sbin/nologin.

Impide el acceso al shell de root y registra el intento.
A los programas siguientes se les impide el acceso a la cuenta root:
· login
· gdm
· kdm
· xdm
· su
· ssh
· scp
· sftp

Programas que no requieren un shell, tales como clientes FTP, clientes de correo y muchos programas de setuid.
A los programas siguientes no se les prohibe acceder a la cuenta de root:
· sudo
· clientes FTP
· clientes de correo

Deshabilitar el acceso root a través de cualquier dispositivo de consola (tty).Un archivo /etc/securetty previene la conexión como root en cualquier dispositivo conectado a la computadora.

Previene el acceso a la cuenta root a través de la consola o la red. A los programas siguientes se les impide acceder a la cuenta root:
· login
· gdm
· kdm
· xdm
· otros servicios de la red que abren un tty

Programas que no se conectan como root, pero que realizan tareas administrativas a través de setuid u otros mecanismos.
A los siguientes programas no se les limita de acceder a la cuenta root:
· su
· sudo
· ssh
· scp
· sftp

Deshabilitar conexiones root SSH.Modifique el archivo /etc/ssh/sshd_config y configure el parámetro PermitRootLogin a no.

Previene el acceso root a través del conjunto de herramientas OpenSSH. A los programas siguientes se les prohibe el acceso de la cuenta root:
· ssh
· scp
· sftp

Esto sólo previene el acceso root a la suite de herramientas OpenSSH

Utilizar PAM para limitar el acceso a servicios desde root.Modifique el archivo para el servicio objetivo en el directorio /etc/pam.d/. Asegúrese de que se requiera pam_listfile.so para la autenticación. Consulte la Sección 4.4.2.4 para más detalles.

Previene el acceso root a los servicios de red que sean tipo PAM.
A los servicios siguientes se les impide acceder a la cuenta root:
· clientes FTP
· clientes de correo
· login
· gdm
· kdm
· xdm
· ssh
· scp
· sftp
· cualquier servicio que sea tipo PAM

Programas y servicios que no son tipo PAM.

Tabla 4-1. Métodos para deshabilitar la cuenta root

4.4.2.1. Deshabilitar el shell de root

Para prevenir a los usuarios de conectarse directamente como root, el administrador del sistema puede configurar el shell de la cuenta root a /sbin/nologin en el archivo /etc/passwd. Esto impedirá el acceso a la cuenta root a través de comandos que requieren un shell, tal como los comandos su y ssh.

ImportanteImportante
 

Los programas que no requieren acceso al shell, tales como los clientes de correo electrónico o el comando sudo, aún pueden tener acceso a la cuenta root.

4.4.2.2. Deshabilitar las conexiones root

Para limitar aún más el acceso a la cuenta root, los administradores pueden desactivar las conexiones root en la consola, editando el archivo /etc/securetty. Este archivo lista todos los dispositivos a los cuales el usuario root puede conectarse. Si el archivo no existe, el usuario puede conectarse a través de cualquier dispositivo de comunicación en el sistema, bien sea a través de la consola o una interfaz de red bruta. Esto es peligroso porque un usuario puede hacer Telnet en su máquina como root, enviando su contraseña sobre la red en texto plano. Por defecto, el archivo de Red Hat Enterprise Linux, /etc/securetty, sólo permite que el usuario root se conecte en la consola conectada físicamente a la máquina. Para prevenir que el usuario root se conecte, elimine los contenidos de este archivo escribiendo el comando siguiente:

echo > /etc/securetty

AvisoAviso
 

Un archivo /etc/securetty en blanco no previene al usuario root conectarse remotamente usando las herramientas OpenSSH puesto que la consola no se abre sino hasta después que se obtenga la autenticación.

4.4.2.3. Deshabilitar conexiones root SSH

Para prevenir las conexiones de root a través del protocolo SSH, modifique el archivo de configuración del demonio SSH (/etc/ssh/sshd_config). Cambie la línea que dice:

# PermitRootLogin yes

Para que diga lo siguiente:

 
PermitRootLogin no

4.4.2.4. Deshabilitar root utilizando PAM

PAM, a través del módulo /lib/security/pam_listfile.so, otorga gran flexibilidad en negar cuentas específicas. Esto permite al administrador apuntar el módulo a una lista de usuarios que no tienen derecho a conectarse. Abajo se muestra un ejemplo de cómo el módulo es usado por el servidor FTP vsftpd en el archivo de configuración PAM /etc/pam.d/vsftpd (el caracter \ al final de la primera línea en el ejemplo siguiente no es necesario si la directiva esta en una sola línea):

auth   required   /lib/security/pam_listfile.so   item=user \
sense=deny file=/etc/vsftpd.ftpusers onerr=succeed

Esto le dice a PAM que consulte el archivo /etc/vsftpd.ftpusers y que niegue el acceso al servicio a cualquier usuario que esté listado allí. El administrador tiene la libertad de cambiar el nombre de este archivo y de mantener una lista separada para cada servicio o de usar una lista central para negar el acceso a múltiples servicios.

Si el administrador desea negar el acceso a múltiples servicios, se puede añadir una línea similar a los servicios de configuración PAM, tales como /etc/pam.d/pop y /etc/pam.d/imap para los clientes de correo o /etc/pam.d/ssh para los clientes SSH.

Para más información sobre PAM, consulte el capítulo llamado Pluggable Authentication Modules (PAM) en el Manual de referencia de Red Hat Enterprise Linux.

4.4.3. Limitar el acceso root

En vez de negar completamente el acceso al usuario root, el administrador puede desear permitir el acceso solamente a través de programas setuid, tales como su o sudo.

4.4.3.1. El comando su

Después de escribir el comando su, se le solicita al usuario la contraseña de root y, luego de la autenticación, se le presenta un indicador de comandos del shell.

Una vez conectado a través de su, el usuario se convierte en el usuario root y tiene acceso administrativo absoluto al sistema. Además, una vez que el usuario obtiene acceso root, es posible, en algunos casos, usar el comando su para cambiarse a cualquier otro usuario en el sistema sin que se le solicite una contraseña.

Debido a que este programa es tan poderoso, los administradores dentro de la organización pueden desear limitar el acceso a este comando.

Una de las formas más fáciles de hacer esto es añadir usuarios al grupo administrativo especial llamado wheel. Para hacer esto escriba el siguiente comando como root:

usermod -G wheel <username>

En el comando anterior, reemplace <username> con el nombre del usuario que está siendo añadido al grupo wheel.

Para utilizar el Administrador de usuarios para este fin, vaya al Menú principal (en el Panel) => Configuración del sistema => Usuarios y grupos o escriba el comando redhat-config-users en el prompt del shell. Seleccione la pestaña Usuarios, seleccione el usuario desde la lista y haga clic en Propiedades desde el botón del menú (o seleccione Fichero => Propiedades desde el menú desplegable).

Luego seleccione la pestaña Grupos y haga clic en el grupo wheel, como se muestra en la Figura 4-2.

Figura 4-2. El panel Grupo

Luego, abra el archivo de configuración PAM para su, /etc/pam.d/su, en un editor de texto y elimine el caracter de comentario [#] desde la línea siguiente:

auth  required /lib/security/pam_wheel.so use_uid

Al hacer esto sólo permitirá a los usuarios miembros del grupo administrativo wheel utilizar el programa.

NotaNota
 

El usuario root es parte del grupo wheel por defecto.

4.4.3.2. El comando sudo

El comando sudo ofrece otra solución para otorgar acceso administrativo a los usuarios. Cuando un usuario de confianza antecede un comando administrativo con sudo, se le pide su contraseña. Luego, una vez autenticado y asumiendo que el comando es permitido, el comando administrativo es ejecutado como que si se tratase del usuario root.

El formato básico del comando sudo es como sigue:

sudo <command>

En el ejemplo de arriba, <command> sería reemplazado por un comando normalmente reservado para el usuario root, tal como mount.

ImportanteImportante
 

Los usuarios del comando sudo deberían tener extra cuidado de desconectarse antes de abandonar sus máquinas puesto que otros pueden utilizar el comando nuevamente sin que se les solicite contraseña alguna por un período de hasta cinco minutos. Esta configuración puede ser alterada a través del archivo de configuración, /etc/sudoers.

El comando sudo permite un gran nivel de flexibilidad. Por ejemplo, solo los usuarios listados en el archivo de configuración /etc/sudoers tienen permitido utilizar el comando sudo y el comando es ejecutado en el shell del usuario, no en el shell de root. Esto significa que el shell de root podría ser desactivado completamente, como se muestra en la Sección 4.4.2.1.

El comando sudo también proporciona un rastro completo para auditoría. Cada autenticación exitosa es registrada al archivo /var/log/messages y el comando emitido junto con el nombre del usuario se registran al archivo /var/log/secure.

Otra ventaja del comando sudo es que un administrador puede permitir a usuarios diferentes acceso a comandos específicos basado en sus necesidades.

Los administradores que deseen modificar el archivo de configuración de sudo, /etc/sudoers, deberían usar el comando visudo.

Para otorgarle a un usuario privilegios administrativos completos, escriba visudo y añada una línea similar a la siguiente en la sección de especificación de privilegios del usuario:

juan ALL=(ALL) ALL

Este ejemplo establece que el usuario, juan, puede utilizar sudo desde cualquier máquina y ejecutar cualquier comando.

El ejemplo de abajo ilustra la posible granularidad cuando se configura sudo:

%users  localhost=/sbin/shutdown -h now

Este ejemplo establece que cualquier usuario puede emitir el comando /sbin/shutdown -h now siempre y cuando sea emitido desde la consola.

La página del manual para sudoers tiene un listado detallado de las opciones para este archivo.