我有一个应用程序,使用 PAM 作为身份验证源,提示输入登录用户的密码。该应用程序的当前 PAM 配置如下:
@include common-auth
@include common-account
我希望此应用程序使用我定义并硬编码的自定义密码,而不是登录用户的密码。我该如何实现?
答案1
不要导入系统的身份验证机制,而是配置pam_userdb或者自己编写一个简单的自定义 PAM 模块。将其作为堆栈中唯一的模块加载:
auth requisite pam_userdb.so db=/etc/security/myapp.passwd.db
@include common-account
答案2
一个(可能稍微简单一点的)替代方法是使用pam_pwd文件. 它本质上允许针对用户指定的文件进行身份验证,格式类似于默认/etc/passwd
文件。
pam_pwdfile 似乎尚未开发,但它可能已经可以工作,不需要新功能。Debian 档案中也有它,这为其提供了安全支持(如果需要的话)。
要使用它,请安装它(例如libpam-pwdfile
在 Debian 上)并在你的 pam 配置中添加如下一行:
auth required pam_pwdfile.so pwdfile=/path/to/passwd_file
查看自述了解详情。
该/path/to/passwd
文件应包含用户名和哈希密码列表,以冒号分隔,每行一个用户。哈希密码可以从您的/etc/shadow
文件中获取,也可以使用mkpasswd
或生成openssl
。例如,要获取 SHA-512 哈希密码,请使用以下任一命令:
$ mkpasswd -m SHA-512
$ openssl passwd -6
示例passwd
文件如下所示。这显示了 SHA-512 和解密散列密码:
user1:$6$usgsi1RNu7wI$4rly97OA5ot5nsVSusW1jmwdjpHY7qbzGOX.E/TPfJqDuFnmMoCGVd1p1U/ew7e599QQLPnfkW0yLyuyaoAPl0
user2:NxR.0DdgI2Jnc
类似的替代 pam-module 是pam_fshadow,但这个模块似乎没有被 Debian 打包,所以我没有进一步调查它。