Ecrire une application pam-ifiée

Le
Kevin Denis
Bonjour,

je souhaite faire des tests avec pam.

Je souhaite surtout mettre en place un petit environnement
de tests pour pam.
-Je voudrais donc écrire une application pam-ifiée
-Je voudrais une stack pam pour elle

Pour tester, j'ai pris le bout de code python disponible ici:
< http://stackoverflow.com/questions/5286321/pam-authentication-in-python-without-root-privileges >
Ca marche bien, je peux m'"authentifier" avec la configuration pam
par défaut.

Si je comprends bien, une application va lire son fichier
pam dans /etc/pam.d/, par exemple /etc/pam.d/login
ou /etc/pam.d/sshd, et /etc/pam.d/other par défaut.

Si j'écris mon application, quel sera son fichier de
configuration? Le nom de mon application? "python"?

Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #26401196
Bonjour,
Le 09/06/2016 à 22:00, Kevin Denis a écrit dans le message
je souhaite faire des tests avec pam.
Je souhaite surtout mettre en place un petit environnement
de tests pour pam.
-Je voudrais donc écrire une application pam-ifiée
-Je voudrais une stack pam pour elle
Pour tester, j'ai pris le bout de code python disponible ici:
<
http://stackoverflow.com/questions/5286321/pam-authentication-in-python-without-root-privileges

Ca marche bien, je peux m'"authentifier" avec la configuration pam
par défaut.

La seule partie intéressante dans tout ce code est :
import pam
if pam.authenticate('username', 'password'):
# auth ok
else:
# auth nok
La version dont je dispose (1.8.2) fonctionne légèrement différemment
mais permet d'avoir des informations sur l'échec :
import pam
p = pam.pam()
p.authenticate('', '', ''), p.code, p.reason



(False, 10, 'User not known to the underlying authentication module')
p.authenticate('benoit', '', ''), p.code, p.reason



(False, 7, 'Authentication failure')
p.authenticate('benoit', 'xxx', ''), p.code, p.reason



(True, 0, 'Success')
Si je comprends bien, une application va lire son fichier
pam dans /etc/pam.d/, par exemple /etc/pam.d/login
ou /etc/pam.d/sshd, et /etc/pam.d/other par défaut.
Si j'écris mon application, quel sera son fichier de
configuration? Le nom de mon application? "python"?

précises pas le nom du service, ce sera « login ». Tu peux utiliser ce
qu'il te chante du moment que l'identifiant est le même dans ton
application et dans pam.d/.
--
Benoit Izac
Kevin Denis
Le #26401249
Le 09-06-2016, Benoit Izac
La seule partie intéressante dans tout ce code est :
import pam
if pam.authenticate('username', 'password'):
# auth ok
else:
# auth nok

oui
La version dont je dispose (1.8.2) fonctionne légèrement différemment
mais permet d'avoir des informations sur l'échec :
import pam
p = pam.pam()
p.authenticate('', '', ''), p.code, p.reason



(False, 10, 'User not known to the underlying authentication module')
p.authenticate('benoit', '', ''), p.code, p.reason



(False, 7, 'Authentication failure')
p.authenticate('benoit', 'xxx', ''), p.code, p.reason



(True, 0, 'Success')

Ok, j'ai une version plus ancienne, mais j'ai compris le principe.
Si j'utilise import pam puis pam.authenticate('login','password') alors
ça renvoie bien les résultats attendus.
précises pas le nom du service, ce sera « login ». Tu peux utiliser ce
qu'il te chante du moment que l'identifiant est le même dans ton
application et dans pam.d/.

Ok
Bon, je dois avoir un second problème:
:/lib/x86_64-linux-gnu/security# cat /etc/pam.d/my_test
auth requisite pam_python.so pam_permit.py
:/lib/x86_64-linux-gnu/security#
Le fichier pam_permit.py est tiré de
/usr/share/doc/libpam-python-doc/examples/pam_permit.py
:/lib/x86_64-linux-gnu/security# ipython
In [1]: import pam
In [2]: pam.authenticate('toto','toto','my_test')
Erreur de segmentation
:/lib/x86_64-linux-gnu/security#
Je vais regarder du côté du segfault.
--
Kevin
Benoit Izac
Le #26401299
Bonjour,
Le 10/06/2016 à 15:41, Kevin Denis a écrit dans le message
Bon, je dois avoir un second problème:
:/lib/x86_64-linux-gnu/security# cat /etc/pam.d/my_test
auth requisite pam_python.so pam_permit.py
:/lib/x86_64-linux-gnu/security#
Le fichier pam_permit.py est tiré de
/usr/share/doc/libpam-python-doc/examples/pam_permit.py
:/lib/x86_64-linux-gnu/security# ipython
In [1]: import pam
In [2]: pam.authenticate('toto','toto','my_test')
Erreur de segmentation
:/lib/x86_64-linux-gnu/security#
Je vais regarder du côté du segfault.

Quelle sont les versions de python et python-pam (+l'auteur car il y en
plusieurs) ?
Essaye avec cette version install pam) ?
--
Benoit Izac
Kevin Denis
Le #26401370
Le 10-06-2016, Benoit Izac
:/lib/x86_64-linux-gnu/security# cat /etc/pam.d/my_test
auth requisite pam_python.so pam_permit.py
:/lib/x86_64-linux-gnu/security#
Le fichier pam_permit.py est tiré de
/usr/share/doc/libpam-python-doc/examples/pam_permit.py
:/lib/x86_64-linux-gnu/security# ipython
In [1]: import pam
In [2]: pam.authenticate('toto','toto','my_test')
Erreur de segmentation
:/lib/x86_64-linux-gnu/security#
Je vais regarder du côté du segfault.

Quelle sont les versions de python et python-pam (+l'auteur car il y en
plusieurs) ?

j'ai pris celle qui est tirée par apt-get (debian 8):
:~$ dpkg -l | grep python-pam
ii python-pam 0.4.2-13.1 amd64 Python interface to the PAM library
ii python-pampy 0.1.4-1 all Python module for simple PAM authentications
:~$
Essaye avec cette version install pam) ?

Pas mieux :(
--
Kevin
Kevin Denis
Le #26401702
Le 11-06-2016, Kevin Denis
Essaye avec cette version install pam) ?

Pas mieux :(

Finalement, j'ai fait le module pam en C et tout fonctionne bien.
--
Kevin, qu'aurait préféré python, mais bon..
Publicité
Poster une réponse
Anonyme