Restriction des connexions de compte à l'aide de LDAP et PAM

14

J'espérais que certains gourous PAM / LDAP pourraient m'aider ici. J'ai récemment mis en place un annuaire LDAP sur Ubuntu Server pour détenir des comptes à la fois pour mes clients (à utiliser avec les systèmes basés sur le Web) et le personnel (qui devra se connecter via SSH.)

L'authentification LDAP fonctionne parfaitement. Cependant , je ne peux pas les restrictions de compte de travail: les comptes du personnel auront ID entre 2001et 2999et sera membre du ssh-usersgroupe pour leur permettre de connexion aux serveurs.

Les restrictions en question sont /etc/ldap.conf, et sont pam_min_uid, pam_max_uidet pam_groupdn.

pam_groupdncontient le DN complet de mon ssh-usersgroupe. pam_min_uid= 2000et pam_max_uid= 2999.

Maintenant, j'ai réussi à les faire fonctionner en ajoutant:

account [success=1 default=ignore] pam_ldap.so

au-dessus de la pam_unix.soligne /etc/pam.d/common-account. Cependant, les comptes Unix locaux ne peuvent alors PAS se connecter: le serveur SSH tue la connexion dès qu'ils essaient.

J'ai défini le pam_ldap.somodule sufficientdans le fichier ci-dessus, mais les utilisateurs non valides reçoivent un message disant qu'ils ne peuvent pas se connecter, mais il les connecte quand même.

Alors, comment puis-je définir ces restrictions de compte pour les utilisateurs LDAP, tout en permettant aux utilisateurs UNIX de se connecter?

Comme vous pouvez probablement le deviner, je suis un débutant dans PAM, même si j'ai réussi à faire fonctionner le module "créer automatiquement des répertoires personnels" :-)

Merci beaucoup, Andy

Andy Shellam
la source

Réponses:

11

PAM a la capacité de restreindre l'accès sur la base d'une liste de contrôle d'accès (au moins sur Ubuntu) qui, comme la réponse de kubanskamac (+1), considère les groupes comme des groupes posix, qu'ils soient stockés dans LDAP /etc/groupou NIS.

/etc/security/access.confest le fichier de la liste d'accès. Dans mon dossier, je mets à la fin:

-:ALL EXCEPT root sysadmin (ssh-users):ALL

Cela refuse tout le monde sauf root, sysadmin et dans le groupe ssh-users (qui est en LDAP) où qu'ils se connectent (le second ALL).

Ensuite, dans mon fichier de compte PAM (c'est un module de compte), j'ajoute à la fin:

account required pam_access.so

qui indique à PAM d'utiliser ce fichier. Ça marche un régal :-)

Andy Shellam
la source
Il convient de noter que vous devrez peut-être mettre pam_access.so au tout début de votre fichier de compte PAM pour qu'il prenne effet.
crb
5

J'utiliserais simplement

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail

pour autoriser uniquement des groupes spécifiques (à la fois pour les groupes locaux et LDAP). De cette façon, vous n'avez rien à spécifier ldap.conf.

Si vous souhaitez conserver l'autorisation à votre façon, vous ne devez pas filtrer les utilisateurs lors de la passe "compte". Je crois que vous devriez plutôt le faire sur le pass "auth". Deuxièmement, comme vous pouvez le constater vous-même, pam_unix traite à la fois les comptes locaux et LDAP (au moins lors de la passe "account"), il semble donc qu'il n'y ait aucun besoin de pam_ldap.

EDIT: Troisièmement, si vous insistez pour avoir des choses sur le pass "account" (ce qui pourrait avoir des effets secondaires étranges), votre séquence devrait se terminer par: ..., "suffisamment pam_ldap", "required pam_localuser", "required pam_unix" . Je veux dire, si vous avez d'autres modules, déplacez-les avant pam_ldap - sinon ils seraient ignorés pour les comptes LDAP en raison de la clause "suffisante".

kubanczyk
la source
Je pense que pam_unix utilise les appels getent pour récupérer les informations de compte - qui utilise LDAP comme dans /etc/nsswitch.conf. Ces lignes ont été ajoutées aux fichiers de configuration PAM par le programme d'installation du package libpam-ldap. L'action par défaut de pam_groupdn ne faisait rien, et lors de la recherche de réponses, quelqu'un a dit qu'elle ne prendrait effet que si le module pam_ldap.so était utilisé lors de la passe "account". Si possible, je préfère conserver les paramètres dans ldap.conf car il est spécifiquement lié à LDAP.
Andy Shellam
(1) Vous avez raison sur pam_unix. (2) Je mets à jour ma réponse avec les conseils de pam_localuser.
kubanczyk
Tout ce que j'ai lu sur PAM indique que le compte est la bonne section pour cela. auth - Identifie l'utilisateur et authentifie le compte du compte - Vérifie les caractéristiques du compte d'utilisateur, telles que le vieillissement du mot de passe, les restrictions de temps de connexion et les restrictions de connexion à distance Ce n'est pas un problème d'authentification - car le nom d'utilisateur / mot de passe est correct et l'utilisateur peut être identifié. C'est une restriction de compte car je ne veux pas que certains comptes puissent se connecter.
Andy Shellam
0

Juste pour ajouter à @ andy-shellam, voici mon common-accountfichier:

account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore]            pam_ldap.so
account requisite                     pam_deny.so
account required                      pam_access.so
account required                      pam_permit.so
Hank
la source