Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ecrire une application pam-ifiée

5 réponses
Avatar
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

5 réponses

Avatar
Benoit Izac
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"?

<https://atlee.ca/software/pam/module-pam.html> indique que si tu ne
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
Avatar
Kevin Denis
Le 09-06-2016, Benoit Izac a écrit :
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.
<https://atlee.ca/software/pam/module-pam.html> indique que si tu ne
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
Avatar
Benoit Izac
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 <https://pypi.python.org/pypi/python-pam/> (pip
install pam) ?
--
Benoit Izac
Avatar
Kevin Denis
Le 10-06-2016, Benoit Izac a écrit :
:/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 <https://pypi.python.org/pypi/python-pam/> (pip
install pam) ?

Pas mieux :(
--
Kevin
Avatar
Kevin Denis
Le 11-06-2016, Kevin Denis a écrit :
Essaye avec cette version <https://pypi.python.org/pypi/python-pam/> (pip
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..