您可以给一个用户帐户多个密码吗?


21

我想为一个帐户分配2个密码。我想知道的是:1)这是否可能,以及2)这种做法的安全性是什么?

我要这样做的原因是因为我目前正在忙于一些本地测试,所以我认为在某些特定情况下会很方便。经过一番研究,我发现了一种叫做PAM的东西,但是我一直在努力寻找有关安装/配置工作方式的信息。

我正在运行Ubuntu 12.04。


1
我可能会设置sudo为允许user1以user2身份运行命令。(sudo不仅用于以root用户身份运行命令;它还可以以任何用户身份运行命令。)
cjm 2013年

Answers:


16

是的,尽管很少见,但这绝对是可行的。

无需尝试自己实现它,因为/etc/password /etc/shadow基于默认的身份验证方法没有提供这种配置,而是更简单的方法是将身份验证委托给已经支持用户多个密码的后端。

LDAPuserPassword是众所周知的一种,其属性根据RFC4519是多值的:

在“ userPassword”属性中需要多个值的一个示例是一个环境,在该环境中,每个月都希望用户使用某个自动化系统生成的不同密码。在过渡期间,例如期间的最后一天和第一天,可能需要允许两个连续期间的两个密码在系统中有效。

尽管有此RFC,您可能仍需要在大多数目录服务器实现上更改密码策略配置,才能实际接受此设置。

在Linux方面,没有什么可以禁止的(这里testuser既给了一个名为的帐户,又给了pass1pass2作为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.

这是这种配置与技术和安全性相关的一些含义:

  • 尽管真正重要的是密码的质量和保护,而不是密码的数量,但用户帐户显然更容易受到攻击。
  • 大多数实用程序都假定用户只有一个密码,因此不允许用户单独更新其中一个密码。这样,更改密码很可能会为用户带来一个单一的密码属性。
  • 如果目标是允许多个人使用各自的密码共享一个帐户,则没有机制可以根据所使用的密码来识别实际登录的人。

1
您能否详细说明为什么这对安全性没有影响?我的第一印象是,这将增加帐户被盗的机会,特别是如果一个密码比另一个密码明显弱的话。
Joseph R.

1
@JosephR。你是对的。在实施我的建议并体验到它之后,我才更新了我的回复。
jlliagre 2013年

出色的答案,现在就像魅力一样。谢谢:)
aggregate116​​6877

7

我只是尝试为该/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它,部分原因是sudo存在。

您可以将此条目添加到sudoers文件(/etc/sudoers),该文件将允许用户joe权限在您执行任何操作时:

joe ALL=(yourusername) ALL

我实际上忘记了sudo可以做到的。.+1
aggregate116​​6877

4

如果可以这样做,您可能不应该这样做。

PAM配置有些复杂,并且关于身份验证机制有一种说法:有限的一组正确配置,但是无限的一组不安全配置。这几乎可以肯定,如果您尝试更改事物并且不确切地知道自己在做什么,那么您会把事情搞砸了。

如果在安全性和“在某些特定情况下很方便”之间进行选择,则选择前者。


+1代表“安全性高于便利性”(我完全同意),但我是那种即使只是出于体验也要测试所有内容的人,所以我并不是要寻找答案的100%。
aggregate116​​6877

2

您可以为同一帐户设置两个不同的用户名,每个用户名都使用其密码。运行vipw/etc/passwd手动进行编辑,复制您感兴趣的帐户的现有行并更改用户名(如果您喜欢Gecos字段,主目录和shell)。在中运行vipw -s并复制该用户的行/etc/shadow。使用新用户名登录并运行passwd以更改新用户名的密码。现在,对于同一帐户,您有两个不同的用户名和不同的密码(用户ID是确定该帐户的原因)。

这可能不是一个好主意。根据您要执行的操作,其他方法可能更合适:

  • 通过提交并从版本控制中签出来创建另一个帐户并共享文件。
  • 创建另一个帐户,创建两个用户帐户都属于的组,并为组提供对要共享的文件的写访问权限。
  • 创建另一个帐户,并授予第一个帐户使用sudo作为该帐户运行命令的权限:

    user1 ALL = (user2) ALL
    
  • 仅允许运行一个特定命令的帐户创建一个SSH密钥。

您介意将此复制到此处http://askubuntu.com/questions/567139/2-password-1-account-login吗?
Rinzwind 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.