我有一个用户无法使用来自 LDAP 服务器的公钥登录到我们的一个 Centos7 机器。
sshd 记录的错误消息(DEBUG 模式开启)是error: AuthroizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper userx failed, status 255
。
以 root 身份运行ssh-ldap-wrapper userx
我可以确认它确实连接到 LDAP 服务器并为该用户打印出正确的公钥。
包装器的权限为 755。我们有另一个 Centos7 盒子,用户可以毫无问题地登录。唉,我找不到有什么不同。
配置sshd_config
为:
AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
AuthorizedKeysCommandUser root
PubkeyAuthentication yes
AllowGroups groupA groupB
并且userx
已经被分配groupB
给我们的 LDAP 服务器。
Google 仅提供了与某些错误相关的搜索结果,但我发现没有一个能起到帮助作用 - 或者至少目前还无法弄清楚有什么作用。
我缺少什么设置才能让用户使用存储在我们的 LDAP 服务器中的公钥登录?
编辑:附加信息
# ls -Z /usr/libexec/openssh/ssh-ldap-wrapper
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/libexec/openssh/ssh-ldap-wrapper
# cat /usr/libexec/openssh/ssh-ldap-wrapper
#!/bin/sh
exec /usr/libexec/openssh/ssh-ldap-helper -s "$1"
该选项-s
需要用户名来检查 LDAP 服务器的凭证。
ldap-helper 的配置似乎在 内/etc/ssh/ldap.conf
。其中包含以下两行
openssh_ldap_loglevel debug
openssh_ldap_logfile /var/log/openssh-ldap.log
但该日志文件尚未创建。
答案1
在 CentOS 7 中,此脚本应默认以用户“nobody”身份运行。
我怀疑您已将其更改为以 root 身份运行,并且 SELinux 已因权限增加而参与其中。
对于未来的读者来说,我在 /etc/openldap/cacert.pem 上的权限为 600
我通过运行以下命令识别了这一点:
su nobody -s /bin/bash -c "strace /usr/libexec/openssh/ssh-ldap-helper -s root -v "
输出中隐藏的内容为:
open("/etc/openldap/cacert.pem", O_RDONLY) = -1 EACCES (Permission denied)
解决办法是sudo chmod 644 /etc/openldap/cacert.pem