From Jeznet

Wiki: PAMPersonalServer

Je vais détailler dans cet article un moyen de mettre en place un système d'ACL pour un petit serveur personnel. L'idée est de pouvoir centraliser un maximum l'authentification, et ce en utilisant le plus les mécanismes fournis par Linux, et plus particulièrement PAM.

De mon cahier des charges:

La solution technique choisie:

Mise en place des ACLs

Groupes

Création des groupes (/etc/groups):
pam_deny:x:5000: coco
pam_sshd:x:5001:jez
pam_samba:x:5002:jez,coco,chacha
pam_vpn:x:5003:jez
pam_sftp:x:5003:
pam_http_home:5010:jez,coco
pam_http_extra:5011:
pam_http_admin:5012:jez

J'identifie ici mes groupes de services, en suivant la convention que je me suis imposée: pam_<service>_<groupe>:

  1. pam: préfixe mot clé, juste pour dire que ces groupes seront utilisés par PAM. Ca évite de foutre le bordel partout.
  2. <service>: c'est le service qui utilisera ce groupe
  3. <groupe>: quand le service peut vérifier à quel groupe appartient l'utilisateur. ce n'st pas à proprement utiliser par PAM, mais plutot par le service qui demande l'authentification.

J'ai aussi crée un groupe 'pam_deny' qui permet de bloquer l'accès à tous les services à un utilisateur. Au cas où il aurait pas payé son hébergement :-°.

Configuration PAM: services

Au niveau de la conf PAM, il va falloire intervenir sur chaqu'un des services dont on veut gérer l'accès. Typqiement, on va utiliser les règles account, car selon le manuel:

account:
This module type performs non-authentication based account management. It is typically used to restrict/permit access to a service based on the time of day, currently available system resources (maximum number of users) or perhaps the location of the applicant user -- 'root' login only on the console.

Configuration PAM: ACL par services

On va donc placer la conf spécifique pour chacun de nos services /etc/pam.d/sshd, globalement, on placera toujours cette directive en haut de la pile de traitement, car on veut qu'elle soit traitée en premier. Si notre module n'est pas satisfait, ça sert à rien de continuer à traiter les autres modules:
account required        pam_access.so   accessfile=/etc/security/access-sshd.conf 
# OU
account required        pam_access.so   accessfile=/etc/security/access-sshd.conf debug
Concernant le fichier /etc/security/access-sshd.conf debug:
# SSH rules
-: (pam_deny) : ALL
+: root (pam_sshd) : ALL
-: ALL : ALL

L'ordre des directives importe, car c'est la première qui match qui est retournée. Pour expliquer ça:

  1. Si l'utilisateur appartient au groupe pam_deny, il est refusé
  2. Si l'utilisateur est root ou s'il appartient au groupe pam_sshd, il est accepté
  3. Dans tous les autres cas, il est refusé
Retrieved from http://jeznet.org/Wiki/PAMPersonalServer
Page last modified on November 30, 2013, at 08:17 PM EST