#1 Le 18/03/2008, à 10:04
- dismantr
[PAM] Problème de configuration PAM avec empreinte digitale
Bonjour,
J'ai installé, à l'aide des paquets debian proposé par madman2k sur son site, les librairies fprint. Elles permettent le support de mon lecteur d'empreintes digitales incorporé à mon ordinateur portable.
ça marche nickel.
Seulement, je n'arrive pas à configurer pam pour que l'identification se fasse correctement : juste avec l'empreinte digitale, mais si pas d'empreinte ou fausse empreinte, demander le mot de passe.
L'équipe de fprint préconise cette syntaxe dans /etc/pam.d/system-auth (ce fichier n'existant pas sur Debian (dev Gentoo), j'ai entré ces lignes dans /etc/pam.d/common-auth ; cette procédure à aussi été conseillée sur un fil de discussion que j'ai croisé sur le net pour une ubuntu...) :
auth required pam_env.so
auth sufficient pam_fprint.so
auth sufficient pam_unix.so try_first_pass likeauth nullok
auth required pam_deny.so
L'auteur des paquets débian préconise seulement les lignes suivantes dans /etc/pam.d/common-auth :
auth sufficient pam_fprint.so
auth required pam_unix.so nullok_secure
Or, dans un cas comme dans l'autre, l'identification en console comme dans KDE (j'utilise KDE comme WM) me demande login, empreinte, puis mot de passe
Le login, quoi qu'il en soit, est nécessaire ;
Que l'empreinte soit bonne ou pas, l'accès, si le mot de passe est juste, est donné (j'ai vérifié, les librairies fprint permettent réellement de définir si l'empreinte est bonne ou pas).
Or, comme vous l'avez compris, je cherche à n'utiliser le mot de passe que si l'empreinte n'est pas disponible ou fausse...
Any idea ?
Dismantr
Gentoo, Ubuntu, & Debian
OpenPGP key: 0x041746FB
Hors ligne
#2 Le 18/03/2008, à 10:28
- nyquist
Re : [PAM] Problème de configuration PAM avec empreinte digitale
et si tu changes le "requiered" en "sufficient" ca marcherai pas mieux?
Inscrit sur http://parrains.linux.free.fr/
La liste des groupes d'utilisateur de linux : http://www.aful.org/gul/liste
mettez [Résolu] dans le titre lorsque votre problème est solutionné
membre de http://www.lilolipo.net
Hors ligne
#3 Le 18/03/2008, à 10:51
- dismantr
Re : [PAM] Problème de configuration PAM avec empreinte digitale
Ainsi, tu veux dire ?
auth sufficient pam_fprint.so
auth sufficient pam_unix.so nullok_secure
J'essaye et je poste le résultat je crois que j'ai déjà essayé, mais je ne me souviens plus du comportement constaté...
Dismantr
Gentoo, Ubuntu, & Debian
OpenPGP key: 0x041746FB
Hors ligne
#4 Le 18/03/2008, à 14:31
- dismantr
Re : [PAM] Problème de configuration PAM avec empreinte digitale
ça ne fonctionne pas ; l'authentification se comporte exactement comme si je mettais required (mais c'est logique, donc ça va ;-)) : login, empreinte, puis password ; que l'empreinte soit juste ou faux, ça ne change rien ; je vais changer le sufficient en required pour le fingerprint, histoire de vérifier que l'authentification est bien efficace avec l'empreinte.
Si vous avez d'autres idées, allez-y car moi, je sèche.
Je suis persuadé que tout tient dans les paramètres placés après pam_unix.so...
Si l'un d'entre vous connait un peu PAM et peut m'expliquer comment ça marche et comment cela se paramètre (je pense notamment à ceux qui ont configuré leur pam.d pour que la présence ou l'absence de leur téléphone bluetooth aux environs du portable verrouille/déverrouille leur session ou choses de ce genre...), je suis preneur !
Dismantr
Gentoo, Ubuntu, & Debian
OpenPGP key: 0x041746FB
Hors ligne
#5 Le 18/03/2008, à 18:01
- Link31
Re : [PAM] Problème de configuration PAM avec empreinte digitale
Ça ne marchera pas avec KDE, le support de PAM de KDE est bogué.
Dommage, parce que j'aimerais bien pouvoir utiliser mon lecteur d'empreintes digitales moi aussi.
Sous Gnome ça devrait passer.
Pour la configuration de PAM en lui-même (pour le mode console), essaie ça :
auth required pam_unix.so try_first_pass nullok_secure
Dernière modification par Link31 (Le 18/03/2008, à 18:04)
Hors ligne
#6 Le 19/03/2008, à 10:36
- dismantr
Re : [PAM] Problème de configuration PAM avec empreinte digitale
Je tente ça ce soir ;
sinon, j'ai essayé
auth sufficient pam_unix.so
auth sufficient pam_fprint.so
ça permet de taper le login, faire juste "entrée" pour le mot de passe, et authentifier par empreinte digitale... Mais bon, c'est pas la panacée...
Je vais tenter le conseil de Link, des fois que, et d'autres variantes pour arriver à login > fingerprint ok = authentification, fingerprint non ok, demande de mot de passe...
Si vous avez d'autres idées qui me permettrait d'y arriver, je vous écoute 8) !
Sinon, au niveau de KDE, quelqu'un a des précisions sur ce non respect exact de pam ? ça change dans la version 4 j'espère !?! Des infos ? Mieux : des solutions pour que cela fonctionne avec la version 3.x ? Des expériences ?
Dismantr
Gentoo, Ubuntu, & Debian
OpenPGP key: 0x041746FB
Hors ligne
#7 Le 19/03/2008, à 19:47
- Link31
Re : [PAM] Problème de configuration PAM avec empreinte digitale
https://bugs.kde.org/show_bug.cgi?id=116682
Par contre il y a tout en bas un message récent qui dit que ça pourrait fonctionner quand même avec fprint. Pourtant quand j'avais testé avec Thinkfinger ça ne passait pas (ou très mal).
Hors ligne
#8 Le 20/03/2008, à 14:28
- dismantr
Re : [PAM] Problème de configuration PAM avec empreinte digitale
Je viens de voir son message (grâce à toi) ; je vais essayer de le contacter et je poste l'avancement sur ce thread.
C'est quoi qui ne marchais pas pour toi ? le lecteur ou l'auth avec PAM ?
Si c'est PAM, ça pourrait largement nous aider de savoir comment il a configurer tout ça
Dismantr
Gentoo, Ubuntu, & Debian
OpenPGP key: 0x041746FB
Hors ligne
#9 Le 20/03/2008, à 21:16
- Link31
Re : [PAM] Problème de configuration PAM avec empreinte digitale
En fait avec Thinkfinger 0.3, ça ne marche qu'en pur mode texte (que ce soit avec kdesu ou dans une Konsole, on ne me propose même pas d'utiliser le lecteur).
Et avec Thinkfinger 0.22, ça fonctionne en mode texte et dans une Konsole (mais toujours pas dans KDM ou kdesu), seulement le driver présente un bug qui entraîne la surchauffe du lecteur, et par la même occasion une diminution de l'autonomie du portable.
Hors ligne
#10 Le 16/11/2008, à 19:23
- MisterT2
Re : [PAM] Problème de configuration PAM avec empreinte digitale
Est-ce que vous avez des nouvelles sur ce problème ?
Passé sous 8.10 récemment, je me suis enfin décidé à utiliser mon lecteur d'empreintes intégré (fprint + aes2501-wy). Ca marche nickel avec fprint-demo : il reconnait tous mes doigts.
Tout content, je suis allé configurer /etc/pam.d/common-auth avec la ligne qui va bien:
auth sufficient pam_fprint.so
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
La ligne ajoutée étant la première.
Et là : ca ne va pas...
Comportement de la bannière du screen-saver (par exemple):
- demande empreinte
-> saisie empreinte
-> appuyer sur Return
- erreur retournée
-> saisie empreinte
- Session déverrouillée (enfin !!!)
Pas du tout ce que je pensais. J'attendais :
- demande empreinte
-> saisie empreinte
- Session déverouillée
Je ne suis pas un expert PAM. J'ai dû rater un truc évident...
Vous avez une idée ?
Merci
Thierry
(Ubuntu user #11707)
Hors ligne
#11 Le 16/11/2008, à 20:04
- Link31
Re : [PAM] Problème de configuration PAM avec empreinte digitale
Personnellement :
- j'appuie sur entrée dans la zone du mot de passe
- une fenêtre apparaît
- je passe mon doigt sur le lecteur
- j'appuie sur entrée (ou je clique sur OK)
- ça se débloque si l'empreinte est correcte, sinon on revient à la première étape
Si l'empreinte est incorrecte mais que j'avais précédemment mis un mot de passe correct dans la zone de texte à l'étape 1, ça se débloque malgré tout (utile par exemple quand on a les doigts mouillés ou sales et que la reconnaissance se fait mal, mais il faut quand même passer le doigt sur le lecteur).
@MisterT2 : essaie ça pour avoir le même comportement :
auth required pam_env.so
auth sufficient pam_fprint.so
auth required pam_unix.so try_first_pass likeauth nullok
Je précise que j'utilise thinkfinger, mais ce comportement est le même que celui de fprint. Fprint fonctionne bien avec KDE mais reconnaît mal mes empreintes avec mon lecteur, tandis que thinkfinger reconnaît bien mieux les empreintes mais marche très mal avec KDE.
J'ai donc porté l'interface PAM de fprint sur thinkfinger. Je pense que les utilisateurs de KDE avec un lecteur upek devraient trouver ce patch utile
thinkfinger_kde.patch
diff -pru a/pam/pam_thinkfinger.c b/pam/pam_thinkfinger.c
--- a/pam/pam_thinkfinger.c 2007-03-29 17:00:45.000000000 +0200
+++ b/pam/pam_thinkfinger.c 2008-10-24 03:47:53.000000000 +0200
@@ -30,7 +30,6 @@
#include <stdarg.h>
#include <termios.h>
#include <unistd.h>
-#include <pthread.h>
#include <syslog.h>
#include <security/pam_modules.h>
#ifdef HAVE_OLD_PAM
@@ -136,58 +135,6 @@ out:
return tf_state;
}
-static void thinkfinger_thread (void *data)
-{
- int ret;
- pam_thinkfinger_s *pam_thinkfinger = data;
- libthinkfinger_state tf_state;
-
- pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE, "%s called.", __FUNCTION__);
-
- tf_state = pam_thinkfinger_verify (pam_thinkfinger);
- if (tf_state == TF_RESULT_VERIFY_SUCCESS) {
- pam_thinkfinger->swipe_retval = PAM_SUCCESS;
- pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
- "User '%s' authenticated (biometric identification record matched).", pam_thinkfinger->user);
- } else if (tf_state == TF_RESULT_VERIFY_FAILED) {
- pam_thinkfinger->swipe_retval = PAM_AUTH_ERR;
- pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
- "User '%s' verification failed (biometric identification record not matched).",
- pam_thinkfinger->user);
- } else {
- pam_thinkfinger->swipe_retval = PAM_AUTH_ERR;
- pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
- "User '%s' verification failed (0x%x).", pam_thinkfinger->user, tf_state);
- goto out;
- }
-
- ret = uinput_cr (&pam_thinkfinger->uinput_fd);
- if (ret != 0)
- pam_thinkfinger_log (pam_thinkfinger, LOG_ERR,
- "Could not send carriage return via uinput: %s.", strerror (ret));
-out:
- pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
- "%s returning '%d': %s.", __FUNCTION__, pam_thinkfinger->swipe_retval,
- pam_thinkfinger->swipe_retval ? pam_strerror (pam_thinkfinger->pamh, pam_thinkfinger->swipe_retval) : "success");
- pthread_exit (NULL);
-}
-
-static void pam_prompt_thread (void *data)
-{
- pam_thinkfinger_s *pam_thinkfinger = data;
- char *resp;
-
- /* always returning from pam_prompt due to the CR sent by the keyboard or by uinput */
- pam_prompt (pam_thinkfinger->pamh, PAM_PROMPT_ECHO_OFF, &resp, "Password or swipe finger: ");
- pam_set_item (pam_thinkfinger->pamh, PAM_AUTHTOK, resp);
-
- /* ThinkFinger thread will return once we call libthinkfinger_free */
- if (pam_thinkfinger->tf != NULL)
- libthinkfinger_free (pam_thinkfinger->tf);
-
- pthread_exit (NULL);
-}
-
static const char *handle_error (libthinkfinger_init_status init_status)
{
const char *msg;
@@ -213,18 +160,42 @@ static const char *handle_error (libthin
break;
default:
msg = "Unknown error.";
- }
+ }
return msg;
}
+static void do_auth(pam_handle_t *pamh, pam_thinkfinger_s *pam_thinkfinger)
+{
+ char* resp;
+ libthinkfinger_state tf_state;
+
+ pam_prompt(pamh, PAM_TEXT_INFO, &resp, "Please scan finger...");
+
+ tf_state = pam_thinkfinger_verify (pam_thinkfinger);
+ if (tf_state == TF_RESULT_VERIFY_SUCCESS) {
+ pam_thinkfinger->swipe_retval = PAM_SUCCESS;
+ pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
+ "User '%s' authenticated (biometric identification record matched).", pam_thinkfinger->user);
+ } else if (tf_state == TF_RESULT_VERIFY_FAILED) {
+ pam_prompt(pamh, PAM_ERROR_MSG, &resp, "Fingerprints don't match! This incident will be reported.");
+ pam_thinkfinger->swipe_retval = PAM_AUTH_ERR;
+ pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
+ "User '%s' verification failed (biometric identification record not matched).",
+ pam_thinkfinger->user);
+ } else {
+ pam_prompt(pamh, PAM_ERROR_MSG, &resp, "Verification error");
+ pam_thinkfinger->swipe_retval = PAM_AUTH_ERR;
+ pam_thinkfinger_log (pam_thinkfinger, LOG_NOTICE,
+ "User '%s' verification failed (0x%x).", pam_thinkfinger->user, tf_state);
+ }
+}
+
PAM_EXTERN
int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, const char **argv)
{
- int ret;
int retval = PAM_AUTH_ERR;
pam_thinkfinger_s pam_thinkfinger;
- struct termios term_attr;
libthinkfinger_init_status init_status;
pam_thinkfinger.swipe_retval = PAM_SERVICE_ERR;
@@ -233,10 +204,6 @@ int pam_sm_authenticate (pam_handle_t *p
pam_thinkfinger_options (&pam_thinkfinger, argc, argv);
pam_thinkfinger_log (&pam_thinkfinger, LOG_INFO, "%s called.", __FUNCTION__);
- pam_thinkfinger.isatty = isatty (STDIN_FILENO);
- if (pam_thinkfinger.isatty == 1)
- tcgetattr (STDIN_FILENO, &term_attr);
-
pam_get_user (pamh, &pam_thinkfinger.user, NULL);
if (pam_thinkfinger_user_sanity_check (&pam_thinkfinger) || pam_thinkfinger_user_bir_check (&pam_thinkfinger) < 0) {
pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "User '%s' is unknown.", pam_thinkfinger.user);
@@ -244,13 +211,6 @@ int pam_sm_authenticate (pam_handle_t *p
goto out;
}
- ret = uinput_open (&pam_thinkfinger.uinput_fd);
- if (ret != 0) {
- pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "Initializing uinput failed: %s.", strerror (ret));
- retval = PAM_AUTHINFO_UNAVAIL;
- goto out;
- }
-
pam_thinkfinger.tf = libthinkfinger_new (&init_status);
if (init_status != TF_INIT_SUCCESS) {
pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "Error: %s", handle_error (init_status));
@@ -258,32 +218,9 @@ int pam_sm_authenticate (pam_handle_t *p
goto out;
}
- ret = pthread_create (&pam_thinkfinger.t_pam_prompt, NULL, (void *) &pam_prompt_thread, &pam_thinkfinger);
- if (ret != 0) {
- pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "Error calling pthread_create (%s).", strerror (ret));
- goto out;
- }
- ret = pthread_create (&pam_thinkfinger.t_thinkfinger, NULL, (void *) &thinkfinger_thread, &pam_thinkfinger);
- if (ret != 0) {
- pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "Error calling pthread_create (%s).", strerror (ret));
- goto out;
- }
- ret = pthread_join (pam_thinkfinger.t_thinkfinger, NULL);
- if (ret != 0) {
- pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "Error calling pthread_join (%s).", strerror (ret));
- goto out;
- }
- ret = pthread_join (pam_thinkfinger.t_pam_prompt, NULL);
- if (ret != 0) {
- pam_thinkfinger_log (&pam_thinkfinger, LOG_ERR, "Error calling pthread_join (%s).", strerror (ret));
- goto out;
- }
-
- if (pam_thinkfinger.uinput_fd > 0)
- uinput_close (&pam_thinkfinger.uinput_fd);
- if (pam_thinkfinger.isatty == 1) {
- tcsetattr (STDIN_FILENO, TCSADRAIN, &term_attr);
- }
+ do_auth(pam_thinkfinger.pamh, &pam_thinkfinger);
+ if (pam_thinkfinger.tf != NULL)
+ libthinkfinger_free (pam_thinkfinger.tf);
if (pam_thinkfinger.swipe_retval == PAM_SUCCESS)
retval = PAM_SUCCESS;
Dernière modification par Link31 (Le 16/11/2008, à 20:06)
Hors ligne