我有一个 Linux 系统,用户名为service
.我正在使用该pam_succeed_if.so
模块来匹配该用户名。例如:
auth required pam_succeed_if.so user = service
但它不会匹配 的用户名service
,显然是因为它也是 接受的字段pam_succeed_if.so
。从手册页(为强调而编辑):
可用字段有 user、uid、gid、shell、home、ruser、rhost、tty 和服务
如何转义与字段名称匹配的值?
进一步故障排除:
我打开了debug
的选项pam_succeed_if.so
,它将用户名转换service
为login
:
login: pam_succeed_if(login:auth): 'user' resolves to 'login'
这恰好是用于登录的 PAM 配置/etc/pam.d/login
。
答案1
pam_succeed_if.so
如果该值存在,则将传入的值转换user
为值。field
例如,使用用户shell
:
login: pam_succeed_if(login:auth): 'user' resolves to '/bin/bash'
我不知道如何阻止它做出这种明显不受欢迎的决定。但有一种解决方法几乎适用于所有人。
只需检查解析值,而不是实际值。
例子
要匹配PAM 配置service
中的用户login
:
auth required pam_succeed_if.so user = login
要匹配PAM 配置service
中的用户sshd
:
auth required pam_succeed_if.so user = sshd
要匹配shell
用户,其配置的 shell 是/bin/bash
:
auth required pam_succeed_if.so user = /bin/bash