Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad

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 ? hmm


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 wink 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 ! cool


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 tongue


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... sad

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

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 wink

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