Controlar el acceso de usuarios al equipo vía lightdm | Algo de Linux

miércoles, 29 de marzo de 2017

Controlar el acceso de usuarios al equipo vía lightdm

pam_access es el módulo pam que nos permite realizar un control de acceso al equipo. 

En este post nos vamos a centrar tan sólo en ver la configuración que debemos aplicar para controlar qué usuarios pueden hacer login vía lightdm. Para lograrlo, tan sólo vamos a tocar dos ficheros:
  • /etc/pam.d/lightdm (donde habilitaremos el uso del módulo pam_access desde lightdm)
  • /etc/security/access.conf (donde definiremos las reglas de acceso)
Como podéis comprobar, en el fichero /etc/pam.d/lightdm de nuestros clientes Ubuntu no se está utilizando el módulo pam_access:
# nano /etc/pam.d/lightdm
#%PAM-1.0
auth    requisite       pam_nologin.so
auth    sufficient      pam_succeed_if.so user ingroup nopasswdlogin
@include common-auth
auth    optional        pam_gnome_keyring.so
auth    optional        pam_kwallet.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
#session required        pam_loginuid.so
session required        pam_limits.so
@include common-session
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
session optional        pam_gnome_keyring.so auto_start
session optional        pam_kwallet.so auto_start
session required        pam_env.so readenv=1
session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale
@include common-password
Para habilitarlo, añadimos la siguiente línea al fichero de configuración /etc/pam.d/lighdm:
account  required       pam_access.so
Es importante destacar que debemos añadirla en el lugar que se muestra en el siguiente fichero:
# nano /etc/pam.d/lightdm
#%PAM-1.0
auth    requisite       pam_nologin.so
auth    sufficient      pam_succeed_if.so user ingroup nopasswdlogin
@include common-auth
auth    optional        pam_gnome_keyring.so
auth    optional        pam_kwallet.so
account  required       pam_access.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
#session required        pam_loginuid.so
session required        pam_limits.so
@include common-session
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
session optional        pam_gnome_keyring.so auto_start
session optional        pam_kwallet.so auto_start
session required        pam_env.so readenv=1
session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale
@include common-password
Una vez añadida, no tenemos más que editar el fichero /etc/security/access.conf para insertar las reglas de acceso que queramos.
No vamos a entrar en muchos detalles sobre cómo deben añadirse las reglas de accceso a este fichero, puesto que está bastante claro en los comentarios que vienen dentro del mismo, pero sí vamos a destacar lo más importante:
  • Cualquier línea que comience por el símbolo "#" se considera un comentario.
  • El orden en que definamos reglas de acceso es importante, puesto que se examinarán de arriba a abajo.
  • Cada regla se compone de tres campos separados por el símbolo ":"
    • permisos : usuarios : orígenes
  • El primer campo debería ser:
    • Un símbolo "+" para conceder acceso.
    • Un símbolo "-" para denegar acceso.
  • El segundo campo debe ser una lista de uno o más nombres de usuarios, de grupos o la palabra reservada ALL que representa a todos. Es posible indicar un patrón del tipo usuario@host para controlar el acceso de un usuario en concreto desde un determinado host.
  • El tercer campo debe ser una lista de uno o más nombres de terminal que indican un acceso local, nombres de hosts, nombres de dominio (comenzando por ".") direcciones de hosts, la palabra reservada ALL que representa a todos, la palabra reservada NONE que representa que no se está usando un terminal o el login no es de red o la palabra reservada LOCAL que representa cualuquier cadena que con contenga un carácter "."
  • Además podemos utilizar el operador EXCEPT para especificar excepciones en las reglas
Veamos unos ejemplos sencillos:

Supongamos que queremos denegar el acceso a todos los usuarios excepto a aquellos cuyo nombre sea teachers o pertenezcan al grupo teachers:
- : ALL EXCEPT teachers : ALL
Ahora bien, si lo que nos interesa es denegar el acceso a todos los usuarios excepto a aquellos que pertenezcan al grupo teachers, eliminando la posiblidad de que pueda hacer login un usuario con el nombre teachers, colocaremos el nombre entre paréntesis:
- : ALL EXCEPT (teachers) : ALL
Si queremos añadir  más usuarios y/o grupos a la regla, no tenemos más que separarlos por espacios. Por ejemplo, supongamos que nos interesa que el usuario root también pueda acceder al equipo:
- : ALL EXCEPT (teachers) root : ALL
Como ya comenté en el post anterior, utilizo un módulo puppet al que he llamado (linex-config-ldapclient) para gestionar los ficheros de configuración que establece el paquete linex-config-ldapclient. Podríamos usarlo también para gestionar los ficheros /etc/pam.d/lightdm y /etc/security/access.conf
Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: