我尝试使用 PAM 为 sudo 使用与登录时不同的密码。
我最初是在这篇文章中工作的
不幸的是,每次我这样做时都会遇到身份验证错误,并且我不确定出了什么问题。也许我错误地散列了密码或错误地添加到数据库,但我不确定问题是什么。
sudo 读取的配置
session required pam_env.so readenv=1 user_readenv=0
session required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth required pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd.db
\#@include common-auth
@include common-account
@include common-session-noninteractive
我设置密码用于passwd -m des password
测试目的,然后使用db5.3创建数据库passwd.db
db5.3_load -h /var/local/sudopass -t hash -T passwd.db
我的用户名
73o8ECeyEW3Y2(密码哈希)
然后认证错误。请注意,当我将此数据库放在我的主目录中时,无论我如何设置权限,PAM 都找不到该数据库。)
当前 auth.log 转储
我在获取身份验证错误时遇到问题,但这是 auth.log
Oct 18 12:07:43 az-GlAdOS-mk11-m sudo: pam_userdb(sudo:auth): Verify user
az' 中当前存在的问题,其中包含密码
10 月 18 日 12:07:43 az-GlAdOS-mk11-m sudo: pam_userdb(sudo:auth): user_lookup: 无法打开数据库 `/var/local/sudopass/passwd.db': 没有这样的文件或目录
10 月 18 日 12:07:43 az-GlAdOS-mk11-m sudo:az:PAM 身份验证错误:服务模块中出现错误; TTY=pts/4 ; PWD=/home/az ;用户=根;命令=/bin/nano /etc/pam.d/sudo`
答案1
您可以使用targetpw
中的选项sudoers
,这将使 sudo 不询问您自己的密码,而是询问您要执行命令的用户的密码(在大多数情况下是root
)。然后,您可以为您自己的用户和root
用户帐户使用不同的密码。
在 sudoers 文件中使用以下代码片段全局启用此行为(使用 进行编辑visudo
):
Defaults targetpw
ALL ALL=(ALL) ALL
第二行意味着系统上的每个用户如果知道目标用户的密码,都可以使用 sudo。如果省略它,则需要配置组的成员身份和目标的密码。 (请注意,如果您有权访问 ,则可以规避组要求su
,因为它不支持此配置。)
您还可以使用以下两种变体之一,它们targetpw
分别仅将该指令应用于特定用户或组:
Defaults:username targetpw
username ALL=(ALL) ALL
Defaults:%groupname targetpw
%groupname ALL=(ALL) ALL
(做不是请指定ALL ALL=(ALL) ALL
您是否使用其中之一!)
答案2
您链接到的指南是 5 年前的。 PAM 不再使用 DES。尝试使用它来生成您的密码哈希:
echo pass|mkpasswd -s -m sha-512