Answers:
是的,尽管很少见,但这绝对是可行的。
无需尝试自己实现它,因为/etc/password
/etc/shadow
基于默认的身份验证方法没有提供这种配置,而是更简单的方法是将身份验证委托给已经支持用户多个密码的后端。
LDAPuserPassword
是众所周知的一种,其属性根据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.
这是这种配置与技术和安全性相关的一些含义:
我只是尝试为该/etc/shadow
文件中的用户创建2个条目,但它不起作用。最早输入的是使用的密码输入。
创建了一个测试用户。
$ useradd -d /home/newuser newuser
将密码设置为“ super123”:
$ passwd newuser
手动编辑/etc/shadow
文件并进行第二次输入:
newuser:$6$....password #1...:15963:0:99999:7:::
newuser:$6$....password #2...:15963:0:99999:7:::
然后尝试使用2个密码登录该帐户。
su - newuser
第一个条目/etc/shadow
是get的用法,第二个位置的条目永远行不通,如果您像这样翻转它们:
newuser:$6$....password #2...:15963:0:99999:7:::
newuser:$6$....password #1...:15963:0:99999:7:::
然后第二个密码有效,第一个无效。
这种方法是一种完全破解,我只是使用sudo
它,部分原因是sudo
存在。
您可以将此条目添加到sudoers文件(/etc/sudoers
),该文件将允许用户joe权限在您执行任何操作时:
joe ALL=(yourusername) ALL
sudo
可以做到的。.+1
如果可以这样做,您可能不应该这样做。
PAM配置有些复杂,并且关于身份验证机制有一种说法:有限的一组正确配置,但是无限的一组不安全配置。这几乎可以肯定,如果您尝试更改事物并且不确切地知道自己在做什么,那么您会把事情搞砸了。
如果在安全性和“在某些特定情况下很方便”之间进行选择,则选择前者。
您可以为同一帐户设置两个不同的用户名,每个用户名都使用其密码。运行vipw
以/etc/passwd
手动进行编辑,复制您感兴趣的帐户的现有行并更改用户名(如果您喜欢Gecos字段,主目录和shell)。在中运行vipw -s
并复制该用户的行/etc/shadow
。使用新用户名登录并运行passwd
以更改新用户名的密码。现在,对于同一帐户,您有两个不同的用户名和不同的密码(用户ID是确定该帐户的原因)。
这可能不是一个好主意。根据您要执行的操作,其他方法可能更合适:
创建另一个帐户,并授予第一个帐户使用sudo作为该帐户运行命令的权限:
user1 ALL = (user2) ALL
sudo
为允许user1以user2身份运行命令。(sudo
不仅用于以root用户身份运行命令;它还可以以任何用户身份运行命令。)