在 /etc/passwd 文件中将邮件用户的 shell 设置为 /usr/bin/passwd 是否是一种允许他们通过简单的 ssh'ing 更改自己密码的安全方法?

Tur*_*lar 5 linux ssh shell passwords

我有一台主要用作邮件服务器的机器:

$ uname -a Linux myhost.com 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

我希望那些实际上没有登录机器(但使用它来验证和获取邮件)的用户能够更改自己的密码。如果我将 /usr/bin/passwd 放在 /etc/shells 中(所以 passwd 命令是一个有效的 shell),并为用户更改 shell 条目,如下所示:

someuser:x:557:557:Some User:/home/someuser:/usr/bin/passwd
Run Code Online (Sandbox Code Playgroud)

然后,如果他们通过 ssh 连接到主机,他们会得到如下信息:

$ ssh myhost.com
someuser@myhost.com 的密码:<输入他们当前的密码>
上次登录: 2013 年 9 月 25 日星期三 16:07:35 来自 some-ip
更改用户 someuser 的密码。
更改某个用户的密码。
(电流)的UNIX密码:<键入他们的电流再次密码>
新密码:<输入新密码>
重新输入新密码:<输入新密码再次>
-passwd:所有身份验证令牌成功更新。
与 myhost.com 的连接已关闭。

效果很好……但是它安全吗?他们是否有某种方法可以利用这一点并闯入真正的外壳?

谢谢。

PS 在我的环境中,假设用户已经拥有 ssh 是合理的——但是如果有一个简单的“更好”的密码更改替代方法,我想听听:)

bba*_*iee 3

允许众所周知的程序 (ssh) 远程访问 suid 程序原则上是不安全的。passwd 设置用户id,即提升权限。应谨慎使用 ssh,因为它还将防火墙管理委托给远程用户(端口转发等)。如果 sshd 是您唯一的远程访问选项,您只有一台服务器,并且您坚持使用该服务器作为更改密码和提供邮件服务的手段,那么限制 sshd 和邮件的所有选项,并通过删除来强化其余部分除了您需要的基本服务之外的一切:邮件和密码更改。

passwd 的源代码已经受到审查,但是您知道 Ken Thompson(unix 的创建者)在 C 编译器中所做的经典登录 hack 吗?阅读肯的《关于信任信任的反思》来决定信任谁。

  • 请尝试实际回答问题。 (4认同)