Да, хотя довольно редкий, это определенно выполнимо.
Вместо того, чтобы пытаться реализовать его самостоятельно как значение по умолчанию /etc/password
/etc/shadow
основанный метод аутентификации не имеет никакого условия для такой конфигурации, более простой путь состоит в том, чтобы делегировать аутентификацию к бэкенду, который уже поддерживает несколько пароль для пользователя.
Известный является LDAP который userPassword
атрибут является многозначным согласно RFC4519:
Примером потребности в нескольких значениях в атрибуте 'userPassword' является среда, где каждый месяц пользователь, как ожидают, будет использовать другой пароль, сгенерированный некоторой автоматизированной системой. Во время переходных периодов, как прошлый и первый день периодов, может быть необходимо позволить двум паролям в течение двух периодов подряд быть допустимыми в системе.
Несмотря на этот RFC, необходимо будет, вероятно, изменить конфигурацию политики паролей на большинстве реализаций сервера каталогов для этой установки, которая будет на самом деле принята.
На стороне Linux ничто не запрещает, чтобы сделать это (здесь названная учетная запись testuser
был дан обоих pass1
и pass2
как userPassword
значения атрибута):
$ 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.
Вот некоторые технические и связанные с безопасностью последствия такой конфигурации: