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

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

我如何给用户一个密码正常使用登录时,以及系统管理的另一个密码和sudo 访问? 我希望一个用户有两个密码。

答案1

有一种方法可以实现这一点,即覆盖 sudo 服务的 PAM(可插入式身份验证模块)设置。这样做会给您的机器带来很大的风险 - 除非您了解命令的作用,否则不要只是复制和粘贴,并且始终保持 root 终端打开 - 测试测试测试! - 在注销之前,以防您需要返回并修复某些问题。

我建议阅读一些有关 PAM 工作原理的信息,这样您就知道如果它出现故障该怎么办。我还建议大多数用户从不同的角度来解决这个问题(为管理创建一个单独的用户帐户),因为如果您没有正确设置权限,该解决方案可能会受到哈希表攻击,攻击您的密码。

如果您决定继续,则需要安装新的 PAM 模块。pam_pwdfile 使用旧式 /etc/passwd 类型的文件进行身份验证,这非常适合为不同的服务使用不同的密码。它不提供帐户识别 - 您可以为系统中不存在的用户创建用户名/密码对。由于我们将使用它来进行 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以 root 身份。

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

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

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

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

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

答案2

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

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

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

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

是的,这不是你但这就是你其实需要

相关内容