Oui, bien que ce soit assez rare, c'est certainement faisable.
Au lieu d'essayer de l'implémenter vous-même, car la /etc/password
/etc/shadow
méthode d'authentification basée par défaut ne prévoit pas une telle configuration, la manière la plus simple consiste à déléguer l'authentification à un serveur principal qui prend déjà en charge plusieurs mots de passe pour un utilisateur.
A est une bien connue LDAP qui userPassword
attribut est multivalent selon la RFC4519 :
Un exemple de besoin de plusieurs valeurs dans l'attribut 'userPassword' est un environnement dans lequel chaque mois, l'utilisateur est censé utiliser un mot de passe différent généré par un système automatisé. Pendant les périodes de transition, comme le dernier et le premier jour des périodes, il peut être nécessaire d'autoriser deux mots de passe pour les deux périodes consécutives pour être valides dans le système.
Malgré cette RFC, vous devrez probablement modifier la configuration de la politique de mot de passe sur la plupart des implémentations de serveur d'annuaire pour que ce paramètre soit réellement accepté.
Côté Linux, rien n'interdit de le faire (ici un compte nommé a testuser
été donné à la fois pass1
et pass2
comme userPassword
valeurs d'attribut):
$ uname -a
Linux lx-vb 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ grep VERSION /etc/os-release
VERSION="13.04, Raring Ringtail"
$ grep "^passwd" /etc/nsswitch.conf
passwd: files ldap
$ ldapsearch -LLL -h localhost -p 1389 -D "cn=directory manager" -w xxxxxxxx "uid=testuser" userPassword
dn: uid=testuser,ou=People,dc=example,dc=com
userPassword:: e1NTSEF9b2JWYXFDcjhNQmNJVXZXVHMzbE40SFlReStldC9XNFZ0NU4yRmc9PQ==
userPassword:: e1NTSEF9eDlnRGZ5b0NhKzNROTIzOTFha1NiR2VTMFJabjNKSWYyNkN3cUE9PQ==
$ grep testuser /etc/passwd
$ getent passwd testuser
testuser:*:12345:12345:ldap test user:/home/testuser:/bin/sh
$ sshpass -p pass1 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass2 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass3 ssh testuser@localhost id
Permission denied, please try again.
Voici quelques implications techniques et liées à la sécurité de ce type de configuration:
- le compte utilisateur sera évidemment plus vulnérable aux attaques bien que ce qui compte vraiment ici soit la qualité et la protection des mots de passe plus que leur nombre.
- la plupart des utilitaires supposent que l'utilisateur a un seul mot de passe et ne permettra donc pas à un utilisateur de mettre à jour individuellement l'un des mots de passe. Le changement de mot de passe entraînera alors probablement un seul attribut de mot de passe pour l'utilisateur.
- si l'objectif est de permettre à plusieurs personnes de partager le même compte en utilisant chacune leur propre mot de passe, il n'y a pas de mécanisme pour identifier qui se connecte réellement en fonction du mot de passe utilisé.
sudo
pour permettre à user1 d'exécuter des commandes en tant qu'utilisateur2. (sudo
n'est pas seulement pour exécuter des commandes en tant que root; il peut exécuter des commandes comme n'importe quel utilisateur.)