Да, хотя это довольно редко, это определенно выполнимо.
Вместо того чтобы пытаться реализовать его самостоятельно, так как /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.
Вот некоторые технические и связанные с безопасностью последствия такой конфигурации:
- учетная запись пользователя, очевидно, будет более уязвимой для атак, хотя здесь важнее качество и защита паролей, а не их количество.
- большинство утилит предполагают, что у пользователя один пароль, поэтому не позволяют пользователю самостоятельно обновить один из паролей. Смена пароля, вероятно, приведет к единственному атрибуту пароля для пользователя.
- если цель состоит в том, чтобы позволить нескольким людям использовать одну и ту же учетную запись, используя для каждого свой собственный пароль, не существует механизма, позволяющего определить, кто на самом деле выполняет вход в систему на основе используемого пароля.
sudo
чтобы user1 мог запускать команды от имени user2. (sudo
не только для запуска команд от имени пользователя root; он может запускать команды от имени любого пользователя.)