使用一个密码进行管理,另一个用于系统登录

如何在登录时为用户提供一个正常使用密码,为系统管理和sudo访问提供另一个密码? 我希望一个用户拥有两个密码。

有一种方法可以通过覆盖sudo服务的PAM(可插入身份validation模块)设置来实现此目的。 这样做会给您的机器带来极大的风险 – 除非您了解命令的作用,否则不要只是复制和粘贴,并始终保持根终端打开 – 测试测试! – 在登出之前,如果你需要回去修理一些东西。

我建议您阅读有关PAM如何工作的一些信息,以便您知道如果它发生故障该怎么办。 我还建议大多数用户从不同的角度处理此问题(为管理创建单独的用户帐户),因为如果您未正确设置权限,解决方案可能容易受到密码表攻击。

如果您决定继续,则需要安装新的PAM模块。 pam_pwdfile使用旧式/ etc / passwd类型文件进行身份validation,这对于为不同服务使用不同的密码非常有用。 它不提供帐户识别 – 您可以为系统上不存在的用户创建用户名/密码对。 因为我们将它用于sudo,所以没关系,因为我们只是让sudo以通常的方式检查帐户是否存在。

 sudo apt-get install libpam-pwdfile 

我还建议抓一个方便的htpasswd文件编辑器。 Benjamin Schweizer在python中创建了一个方便的编辑器,效果很好。 从http://benjamin-schweizer.de/htpasswd_editor.html获取并安装其依赖项:

 sudo apt-get install python-newt 

使用该工具生成htpasswd格式文件 – sudo python htpasswd_editor sudo.passwd 。 使用与sudo 相同的用户名输入用户名和密码 – 每个用户将使用一个用户名和密码。 将它复制到安全的地方(测试时我将它放在/etc/sudo.passwd中)并使其对普通用户不可读: chmod 660 /etc/sudo.passwd as root。

确保该文件由root拥有,并且对其他用户不可读。 这是一个漏洞,因为该文件包含散列密码,如果其他用户可读或可写,则会严重破坏您的安全性。 出于这个原因,我不建议在必须保持安全的机器上使用此方法。

最后,编辑/etc/pam.d/sudo文件。 在其他@include ...行上方添加以下行:

 auth required pam_pwdfile.so pwdfile /etc/sudo.passwd 

显然,用生成的htpasswd文件的路径替换最后一个参数。 注释掉下一行: #@include common-auth以确保它使用新的身份validation方法。

注意事项 – 您需要从根终端编辑/etc/pam.d/sudo文件。 不测试就不要关闭它! 如果这样做,您可能无法重新登录(如果您有任何损坏),并且必须从恢复磁盘启动以修复您的系统。 通过打开新终端并尝试使用sudo进行注销之前进行测试。 您应该会发现它不再适用于您的常规登录密码,而是需要您在生成passwd文件时使用的新密码。 要更新文件,请再次使用有用的工具。

对原始问题有一个更简单的解决方案,就是我运行的方式:

  • 创建一个非管理员用户
  • 创建管理员用户

始终以非管理员用户身份登录,每当非管理员用户需要执行“adminy”操作时,只需:

 fab-user@fab-ux:/media/Data/Temp $ su - fab-root Password: fab-root@fab-ux:~ $ sudo smartctl --all /dev/sdc 

是的,这不是你想要的,但它是你真正需要的