PAM et verification d'existance d'un compte

PAM et verification d'existance d'un compte - Divers - Linux et OS Alternatifs

Marsh Posté le 29-12-2007 à 16:38:44    

Bonjour,
 
Sauriez vous comment je peux contrôler dans PAM qu'un compte utilisateur existe dans le système? La raison est simple : Je veux que les personnes ayant un compte utilisateur sur le serveur puissent se logger en utilisant un mot de passe extrait d'un annuaire LDAP. Le côté LDAP est prêt et marche bien, il me manque seulement le contrôle de l'existence du compte utilisateur sur le serveur.
J'ai cru comprendre que c'est NSS qui s'occupe de ce genre de tâches mais je comprend pas vraiment comment l'appeler depuis PAM
 
Merci d'avance


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 29-12-2007 à 16:38:44   

Reply

Marsh Posté le 29-12-2007 à 19:04:47    

Bonjour,
 
as tu installé libpam-ldap ?
as tu modifié /etc/nsswitch.conf /etc/libnss-ldsp.conf /etc/ldap/ldap.conf et /etc/pam.d/common-* ?

Reply

Marsh Posté le 30-12-2007 à 11:56:57    

Salut

 

J'ai installé pam-ldap. Je n'ai pas pu modifier nsswitch.conf car il n'existe pas (le serveur en question est un Xserve tournant sous Mac OS X leopard server).
J'ai installé NSS (grâce a Darwinport) mais ça m'a pas généré de nsswitch.conf ...
Je n'ai pas touché au ldap.conf .. Que vaudrait-il modifier?

 

Merci d'avance


Message édité par esox_ch le 30-12-2007 à 12:01:17
Reply

Marsh Posté le 30-12-2007 à 12:06:02    

NSS = Name Switch Services, cette partie permet "juste" de convertir un numéro (uid / gid) en nom, par exemple : 0 -> root ...
 
PAM = Pluggable Authentication Modules : cette partie gérer l'identification (validation d'un couple login/mot de passe)
 
Dans ton cas, certes tu auras besoin ensuite de NSS configuré pour LDAP mais dans un 1er temps (pour ton problème), ce n'est que PAM qui rentre en compte, et t'inquiètes pas que nativement, sans rien faire que de le configurer proprement pour qu'il sache communiquer avec ton serveur LDAP, PAM va d'office refuser un utilisateur dont le login n'est pas valide (s'il n'existe pas dans ta base LDAP par ex)
 
Donc, je ne connais pas Xserve mais sous Debian, PAM - LDAP le fichier de conf c'est /etc/pam_ldap.conf

Reply

Marsh Posté le 30-12-2007 à 12:19:39    

Salut,
 
Le truc est justement là, il y a seulement certains utilisateurs de la base LDAP qui doivent pouvoir être autorisés à entrer. Il faudrait donc que le compte existe sur le serveur ET sur LDAP.  
La raison pour laquelle je ne fais pas simplement un compte sur le serveur est le mot de passe : Les utilisateurs veulent pouvoir utiliser le même mot de passe de LDAP.

Reply

Marsh Posté le 30-12-2007 à 16:51:12    

y'a un truc que tu ne piges pas là
 
Il n'y AUCUN comptes sur ton serveur, TOUT est DANS ton LDAP ...
 
pour qu'ensuite sur ton serveur, en faisant un ls par exemple, ça t'affiche bien titi pour le propriétaire et non 10153, ça c'est NSS
 
Mais il ne faut SURTOUT PAS recréer tous les comptes sur le serveur !!!

Reply

Marsh Posté le 30-12-2007 à 17:17:38    

Bon, apparemment j'ai pas été clair :D
Ce que je tente désespérément de faire c'est implémenter la logique suivante pour les accès SSH sur ce serveur :
 
Certaines personnes (dont le choix n'a rien à voir avec des trucs trouvables sur LDAP) ayant un compte (et donc login/mdp) dans LDAP doivent pouvoir se logger en utilisant leur login/mdp LDAP.
Certaines personnes n'ayant pas un compte LDAP doivent pouvoir s'autentifier avec un login/mdp stocké quelque part (selon ce qui m'arrange).
 
En espérant que tu voies un peu mieux mon problème .. Merci

Reply

Marsh Posté le 31-12-2007 à 14:56:52    

oui je vois parfaitement :
 
je suis toto/titi
 
1- le compte toto/titi existe sur LDAP => j'ai le droit de me conecter à ton serveur via SSH
2 - le compte toto/titi existe en local sur le serveur => ok, je rentre
3 - le compte n'existe ni sur LDAP, ni sur le serveur => je rentre pas
 
c'est bien ça ?
 
si oui, alors c'est PAM qui s'occupe de tout ça en disant que l'auth LDAP est optionnelle, tout comme l'auth locale, et si les deux échouent alors tu as un gros "deny" obligatoire qui va faire planter l'identification
 
Donc tout ce que tu as à faire, c'est de configurer proprement l'identification PAM par LDAP

Reply

Marsh Posté le 31-12-2007 à 15:45:56    

Salut,
 
C'est presque ça : Il y a seulement un certain nombre de personnes du LDAP qui peuvent se connecter. Ca serai tdonc :
1- Le compte toto/titi existe sur LDAP, et est autorisé à se connecter . Le problème c'est que sais pas comment faire ce "Et est autorisé à se connecter"
 
Merci de prendre tout ce temps pour m'aider, j'apprecie vraiment


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2008 à 13:53:31    

dans ce cas là, tu sépares tes comptes autorisés à se connecter de ceux qui ne le sont pas (OU différentes) et tu configures PAM_LDAP pour qu'il n'aille taper que dans la bonne OU
 
du coup un utilisateur qui est dans l'OU "n'a pas le droit" ne sera jamais vu par PAM_LDAP et donc n'aura jamais accès à ton serveur

Reply

Marsh Posté le 03-01-2008 à 13:53:31   

Reply

Marsh Posté le 03-01-2008 à 20:00:51    

Je dois être vraiment bouché parce que je comprend pas comment je peux le faire :s T'arrives à m'expliquer un peu plus (vraiment désolé)
 
merci beaucoup

Reply

Marsh Posté le 04-01-2008 à 01:02:20    

Euh c'est un MacOSX... Ca fait longtemps que j'ai plus utilisé ca, mais tu as ps un outils de config qui parle d'annuaire ou qqch comme ca?

Reply

Marsh Posté le 06-01-2008 à 10:46:40    

Salut,
Si bien sur, LDAP est facilement configurable. Mon problème c'est que je cherche comment dire à PAM : "Controle si l'utilisateur X est présent sur le système" sans qu'il check le mot de passe..

Reply

Marsh Posté le 07-01-2008 à 01:08:47    

c'est nss qui fait ca, je pense


Message édité par Bigon le 07-01-2008 à 01:09:21
Reply

Marsh Posté le 07-01-2008 à 08:19:12    

Je dois pas être clair ...
 
PAM est incapable de faire ce genre de contrôle "si l'utilisateur X est présent alors vérifie le mot de passe sinon au revoir" comme tu le voudrais ...
 
Une des solutions (ça doit pas être la seule, mais c'est celle qui me vient à l'idée), c'est, comme je te l'ai dit, de créer deux OU (Organisation Unit, un espèce de dossier quoi) dans ton LDAP, pour obtenir un truc du genre :
 

Citation :


- racine de ton ldap
  - ...
  - ...
  - ton entreprise
     - ...
     - tes utilisateurs
        - ...
        - utilisateurs ayant accès à ton serveur
          - toto
          - titi
        - tata


 
Tu configures ensuite ton PAM_LDAP pour qu'il n'aille taper que dans l'OU "ton entreprise/tes utilisateurs/utilisateurs ayant accès à ton serveur", ainsi il ne trouvera jamais l'utilisateur "tata" qui ne pourra donc jamais accéder à ton serveur
 
 
 
Bigon >
NSS c'est encore autre chose. Name Switch Service, c'est ce qui permet de faire la convertion "id numérique" <-> "texte humainement compréhensible"
Tu fais un "ls", NSS rentre en jeu, tu fais un "ls -n", il n'intervient pas

Reply

Marsh Posté le 07-01-2008 à 10:15:05    

Salut,
Alors j'ai un problème, car comme je l'ai dit plus haut, je ne peux pas toucher au serveur LDAP. Je peux biensur re-créer un autre annuaire LDAP mais je ne peux pas inserer les mdp des utilisateurs dans ce meme annuaire..
C'est quand même bizard qu'on puisse pas demander à ce qu'un utilisateur puisse se logger, quelque soit le mot de passe qu'il insère...

Reply

Marsh Posté le 07-01-2008 à 13:50:51    

et est ce que tu peux synchroniser les mots de passes de tes utilisateurs entre leur compte LDAP et leur compte sur ton serveur ?

Reply

Marsh Posté le 08-01-2008 à 16:33:12    

Là est tout le problème, non je ne peux pas et là est tout le problème

Reply

Marsh Posté le 09-01-2008 à 08:35:15    

alors là je sèche ...

Reply

Marsh Posté le 09-01-2008 à 08:48:12    

D'accord ... Merci beaucoup d'avoir passé tout ce temps à m'aider!
C'est quand même bizard qu'il n'y ait aucun module permettant de faire une sorte de "Si le username fourni est dans cette liste, alors OK , quelque soit le mot de passe" ... Enfin je vais chercher à faire autrement..

Reply

Marsh Posté le 09-01-2008 à 09:02:38    

En reprenant les sources d'un modules PAM ca ne doit pas être trop compliqué à implémenter je pense :??:
Il suffirait de remplacer la partie concernant la vérification du mot de passe par la vérification du nom dans une liste [:spamafote]
http://www.kernel.org/pub/linux/li [...] -PAM-html/
http://www.kernel.org/pub/linux/li [...] M_MWG.html


Message édité par o'gure le 09-01-2008 à 09:05:02

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 09-01-2008 à 09:21:23    

Oui l'idée m'avais traversé l'esprit. Mais étant une bille en C, j'aurais préféré pas devoir écrire moi même une des pierres angulaires de l'authentification sur mon serveur :D Mais merci pour les links

Reply

Marsh Posté le 10-01-2008 à 08:19:48    

je pense que j'ai une solution pour toi, mais avant un coup de récap s'impose !!! ;)
 
Donc :
* tu as un serveur LDAP sur un serveur A avec comme utilisateurs toto, titi, tata, tutu (pour faire classique)
* les mots de passe des utilisateurs sont dans ce LDAP
* tu ne peux pas modifier la structure de ton LDAP
* tu ne peux pas synchroniser les mots de passe depuis ce LDAP
* tu as un serveur B sur lequel tu voudrais que les utilisateurs toto et tata accèdent mais pas titi et tutu
* et bien sur, pour que toto et tata accède à ton serveur B, il doivent s'identifier avec leur login/mot de passe qui sont stockés dans le LDAP du serveur A
* pour l'instant, pour chaque utilisateur LDAP qui doit pouvoir accéder à ton serveur B, tu crées sur le serveur B un compte utilisateur UNIX (passwd/shadow) "à la main" (ou par script, mais c'est toi qui indique quel compte créer, il n'y a pas une exportation automatique depuis LDAP)
 
Ton soucis n'est donc pas forcément de vérifier que l'utilisateur X a bien un compte sur ton serveur B pour le laisser se connecter sur B, mais plutôt de restreindre l'accès à ton serveur B à certains utilisateurs
 
J'ai bon ou pas ?

Reply

Marsh Posté le 10-01-2008 à 08:40:43    

Tout a fait

Reply

Marsh Posté le 10-01-2008 à 08:58:00    

ok ...
 
alors ma soluce :
Tu dois monter un identification via PAM sur ton LDAP de façon classique (cf tous les HOWTO que tu pourras trouver, et notamment l'excellent de dam1330 : http://forum.hardware.fr/forum2.ph [...] =0&nojs=0)
 
Tu configures donc pam_ldap et nss_ldap pour que les utilisateurs de ton LDAP puissent se logguer sur ton serveur, et qu'ils soient ensuite vus comme s'ils étaient des utilisateurs locaux de ton serveur.
 
Pour ensuite dire qu'un tel oui mais pas un tel, le module magique s'appelle : pam_listfile
 
syntaxe (dans /etc/pam.d/....) :

Code :
  1. auth       required     pam_listfile.so item=user sense=allow file=/etc/security/allowed_users onerr=fail


 
dans le fichier cité (/etc/security/allowed_users dans mon exemple, mais il n'est pas forcément là hein ;) ), tu listes, un par ligne, les utilisateurs que tu autorises sur ton serveur :
 

Code :
  1. toto
  2. tata


 
"toto" et "tata" étant les logins, tels que tu les retrouve dans ton LDAP
 
Et attention, pam_listfile est sensible à la casse : tata != Tata

Reply

Marsh Posté le 10-01-2008 à 09:08:43    

Bon ... Un applaudissement s'impose je crois :D
Dès que j'ai un moment je l'essaie, mais en tout cas, je te remercie beaucoup pour tout ton aide.. J'étais à 2 doights d'envoyer un mail au chef en disant "C'est impossible, les utilisateurs devront choisir eux même leur password sur notre serveur"...  :D

Reply

Marsh Posté le 10-01-2008 à 09:21:57    

arrête de lire de l'anglais ....
 
2 doigts, pas doights
 
 :whistle:  :D

Reply

Marsh Posté le 10-01-2008 à 09:32:47    

Arg ... à force de vivre dans un milieu de non francophones, je perd le peu de français qu'ils étaient arrivés à m'inculquer aux petites classes... C'est limite chiant :D Dans 5 ans on me sortira "Mais vous parlez pas trop mal français quand même... Vous avez fait un stage dans l'hexagone?"

Reply

Marsh Posté le 10-01-2008 à 09:35:08    

LOL

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed