[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Une histoire d'authentification à s'arracher les cheveux



	Bonjour à tous,

	J'observe depuis quelque temps un souci d'authentification sur mon
réseau qui m'échappe totalement. Il me semble déjà avoir posté ici même,
mais le problème semblait alors avoir disparu.

	Configuration :
- legendre, serveur NetBSD 9.2, un gros, servant de serveur de boot pour
toutes les autres machines qui sont diskless. Ce serveur comporte donc
tout ce qu'il faut (tftpd, dhcpd, nfs, nis...) et exporte les disques de
boot (/srv/xxx) ainsi qu'un gros volume /home. Il exporte aussi un
volume ccd de swap à chaque station diskless accessible en iSCSI.
- hilbert, workstation, linux debian/testing à jour (i9/64 Go)
- heisenberg, workstation, linux debian/stable à jour (i5/16 Go)
- pythagore, workstation, FreeBSD 13.0 à jour
- abel, thales, bernouilli, aristarque, schwarz, riemann, cauchy,
bolzano qui ne nous intéressent pas aujourd'hui mais qui sont des Unix
divers et variés (FreeBSD, Devuan, NetBSD principalement).

	Sur le NIS du serveur NetBSD, j'ai plusieurs comptes enregistrés et
exportés. Quel que soit le moment, un ypcat fonctionne depuis tous les
clients et indique l'ensemble des comptes exportés ainsi que les mots de
passe correspondant. Les mots de passe utilisent le chiffrement crypt
(commun à toutes les plate-formes). J'ai bricolé un peu le NIS côté
client pour que les bons champs soient accessible côté Linux :

legendre:[/var/yp] > diff -u Makefile.yp.orig Makefile.yp.linux
--- Makefile.yp.orig    2017-04-30 09:20:42.863902593 +0200
+++ Makefile.yp.linux   2017-04-30 09:30:46.028036799 +0200
@@ -82,14 +82,14 @@
        fi

 passwd.time: ${DIR}/master.passwd
-       -@if [ -f ${.ALLSRC} ]; then \
+       @if [ -f ${.ALLSRC} ]; then \
                umask 077 ; \
                if [ "${INSECURE}" != "yes" ]; then \
                        ${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 | \
                        ${AWK} -v minuid=${MINUID} \
                        'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
                        { if (minuid <= $$3) \
-                       print $$1, $$1":*:"$$3":"$$4":"$$5":"$$6":"$$7
}' -|\
+                       print $$1,
$$1":"$$2":"$$3":"$$4":"$$5":"$$6":"$$7 }' -|\
                        ${SORT} | ${MAKEDBM} - passwd.byname; \
                        ${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 |\
                        ${AWK} -v minuid=${MINUID} \
legendre:[/var/yp] >

	Ce patch fonctionne très bien, je l'ai utilisé depuis 2005 ou 2006 sans
aucun problème sur un tas d'installations lorsque j'ai un NetBSD en tant
que serveur NIS.

	La nuit dernière, la foudre est tombée dans le jardin et tout a sauté.
Heureusement, j'ai des protections un peu partout et il n'y a pas eu
trop de casse.

	J'ai donc pu rallumer le serveur (qui a un peu gueulé tout de même sur
les fsck, surtout sur le volume destiné à bacula, mais rien de grave),
ainsi que les clients.

	Quelle que soit la machine et quel que soit l'instant, je peux lancer :

hilbert:[~] > ypcat -x
Use "ethers"    for map "ethers.byname"
Use "aliases"   for map "mail.aliases"
Use "services"  for map "services.byname"
Use "protocols" for map "protocols.bynumber"
Use "hosts"     for map "hosts.byname"
Use "networks"  for map "networks.byaddr"
Use "group"     for map "group.byname"
Use "passwd"    for map "passwd.byname"
hilbert:[~] > ypcat passwd
avahi:*************:1005:1006:Avahi user:/nonexistent:/sbin/nologin
bacula-dir:*************:1011:1016:bacula bacula-dir
user:/nonexistent:/sbin/nologin
bacula-sd:*************:1025:1016:bacula bacula-sd
user:/nonexistent:/sbin/nologin
b2:fnKRoFWfQPVpw:1001:100::/home/benedicte:/bin/bash
b1:4Hg6h6IjTIfbs:1000:100::/home/bertrand:/bin/bash
...

	Sauf que... sauf que b1 et b2 peuvent se connecter immédiatement sur
pythagore (FreeBSD) ou heisenberg (Linux debian/stable). Sur hilbert, au
démarrage, seul b2 peut se connecter. b1 se prend un coup de pied dans
les fesses avec un erreur du type :

Jun 27 11:47:30 hilbert login[1621]: pam_unix(login:auth):
authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty2 ruser=
rhost=  user=b1
Jun 27 11:47:32 hilbert login[1621]: FAILED LOGIN (1) on '/dev/tty2' FOR
'b1', Authentication failure

	Cela échoue de la même manière sur la console, avec wdm ou en connexion
à distance sur ssh. Je comprendrai qu'il y ait un problème de
configuration nis, mais dans ce cas, il faudra m'expliquer pourquoi b2
peut se connecter sans problème. Il faudra aussi m'expliquer pourquoi
heisenberg (Debian/stable) ne pose aucun problème. Avant de poster ici,
j'ai naturellement rajouté les options de debug dans pam sans avoir de
remontée intéressante.

	Ce matin, je n'ai pas trouvé pourquoi, les deux comptes semblent être
identiques et je suis allé déjeuner. En revenant, sans rien faire
d'autre, j'ai pu me connecter avec le login b1 (ssh, login et wdm).

	Par acquis de conscience, je suis allé vérifié dans les fichiers
/etc/passwd et consorts s'il n'y aurait pas par hasard un compte local
correspondant à b2 ou a b1, rien.

	Et là, je sèche, je ne comprends pas. L'authentification doit être
reproductible. Je ne vois pas pourquoi b2 peut se connecter au démarrage
de la machine hilbert et pas b1. Et surtout, je ne comprends pas
pourquoi après un certain temps, tout semble redevenir normal sans que
rien d'explicite n'ait été fait sur le réseau, sur le client ou sur le
serveur.

	Je suis preneur de toute lumière.

	Bien cordialement,

	JKB


Reply to: