Ja, auch wenn es recht ungewöhnlich ist, ist dies definitiv machbar.
Anstatt zu versuchen, es selbst als standardbasierte /etc/password
/etc/shadow
Authentifizierungsmethode zu implementieren , ist eine solche Konfiguration nicht vorgesehen. Die einfachere Möglichkeit besteht darin, die Authentifizierung an ein Back-End zu delegieren, das bereits mehrere Kennwörter für einen Benutzer unterstützt.
Ein bekanntes ist LDAP, dessen userPassword
Attribut gemäß RFC4519 mehrwertig ist :
Ein Beispiel für die Notwendigkeit mehrerer Werte im Attribut 'userPassword' ist eine Umgebung, in der der Benutzer jeden Monat ein anderes Kennwort verwenden muss, das von einem automatisierten System generiert wurde. Während Übergangszeiten, wie dem letzten und dem ersten Tag der Zeiträume, kann es erforderlich sein, zwei Kennwörter für die beiden aufeinander folgenden Zeiträume im System gültig zu machen.
Trotz dieses RFC müssen Sie wahrscheinlich die Konfiguration der Kennwortrichtlinie auf den meisten Directory Server-Implementierungen ändern, damit diese Einstellung tatsächlich akzeptiert wird.
Auf der Linux-Seite verbietet nichts, dies zu tun (hier wurde ein Konto mit dem Namen testuser
sowohl pass1
als auch pass2
als userPassword
Attributwerte angegeben):
$ 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.
Hier einige technische und sicherheitsrelevante Auswirkungen dieser Art von Konfiguration:
- Das Benutzerkonto ist offensichtlich anfälliger für Angriffe, obwohl hier die Qualität und der Schutz der Passwörter wichtiger sind als ihre Nummern.
- Bei den meisten Dienstprogrammen wird davon ausgegangen, dass der Benutzer ein einzelnes Kennwort hat, sodass er eines der Kennwörter nicht einzeln aktualisieren kann. Eine Kennwortänderung führt dann wahrscheinlich zu einem einzelnen Kennwortattribut für den Benutzer.
- Wenn das Ziel darin besteht, mehreren Personen zu ermöglichen, dasselbe Konto mit jeweils einem eigenen Kennwort zu verwenden, gibt es keinen Mechanismus, um anhand des verwendeten Kennworts zu identifizieren, wer sich tatsächlich anmeldet.
sudo
gründen, um user1 zu erlauben, Befehle als user2 laufen zu lassen. (sudo
Nicht nur zum Ausführen von Befehlen als root, sondern auch zum Ausführen von Befehlen als jeder Benutzer.)