有“31”台服务器由相同的 RedOS 映像(基于 CentOS 7)配置。它们进入 LDAP samba 域,并配置为通过基于 ldap 用户组的 ssh 进行授权。为此目的,进行了以下更改:
以 root 身份创建
echo "Domain admins" > /etc/ssh/access_groups.conf && chmod 600 /etc/ssh/access_groups.conf
修改/etc/pam.d/sshd
____missed default____
account required pam_nologin.so
account sufficient pam_localuser.so
account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/ssh/access_groups.conf
account include password-auth
_______ missed default____
visudo /etc/sudoers.d/01-域-用户
#sudo admin users LDAP auth
"%mydomain.local\Domain admins" ALL=(ALL) NOPASSWD:ALL
systemctl 重新启动 sshd
此配置已成功应用于大约30台服务器并且正在运行。在服务器 31 上,该配置不起作用。尝试登录时,客户端显示连接已被服务器关闭。
debug3: failed to open file:C:/dev/tty error:3
debug1: read_passphrase: can't open /dev/tty: No such file or directory
t1_rushao@ruyansvap38's password:
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
Connection closed by 10.65.201.61 port 22
在服务器端
sshd[18238]: pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.65.90.176 user=t1_rushao
sshd[18238]: pam_listfile(sshd:account): Refused user t1_rushao for service sshd
sshd[18238]: Failed password for t1_rushao from 10.65.90.176 port 59786 ssh2
sshd[18238]: fatal: Access denied for user t1_rushao by PAM account configuration [preauth]
如果我评论掉“需要帐户 pam_listfile.so...”我可以作为域用户通过 ssh 连接,但 sudo 也不起作用。同时,
id t1_rushao
uid=1006007868(t1_rushao) gid=1006000513(domain users) groups=1006000513(domain users),1006000512(domain admins)
sssd 服务正在工作,服务器上域用户的授权似乎也正在工作,我尝试了 kinit、net ads join 几次。 /etc/security/access.conf 默认情况下被完全注释掉。
我已经不知道为什么这个配置在这台服务器上不起作用。我知道问题出在域组中的某个地方,系统无法将用户组与设置相匹配,但为什么呢?
答案1
可能的字符大小写问题:该id
命令将组报告为domain admins
全小写,但您/etc/ssh/access_groups.conf
和/etc/sudoers.d/01-domain-users
两者都将组指定为Domain admins
初始大写。
Unix/Linux 系统通常区分大小写,我没有理由相信这pam_listfile.so
是该规则的例外。我知道这sudo
肯定是区分大小写的。
尝试将 sudoers 配置中的组名称更改access_groups.conf
为全小写,以匹配id
.
sssd
(/etc/sssd/sssd.conf
以及任何文件)的配置/etc/sssd/conf.d/*.conf
可能在例如域的配置或设置方面有full_name_format
一些use_fully_qualified_names
差异case_sensitive
。
您的工作服务器显然必须有case_sensitive = false
,这似乎不是 sssd 的默认设置 - 也许非工作服务器缺少其中一些设置?
答案2
电信公司, 确切地!确实有效。在最后一台服务器上,sssd.conf
与其他服务器不同之处仅在于多了一行。
re_expression = (?P<name>[a-z0-9._-]+)
在其他服务器上没有这样的线路。并且在所有服务器上都有 sssd.conf 设置case_sensitive = False
我做了分析,这个文件是由join-to-domain
RedOS 开发团队的脚本包自动配置的,用于将服务器添加到 LDAP 域。就在几天前发布了一个新版本的脚本,在这台服务器(几天前创建的)上,sssd 的配置与其他服务器不同。
结果,两个条件同时满足:Domain admins
用空格分隔,并且 sssd 配置区分大小写。我已经在简单命名的组上进行了测试,并检查了小写配置的组名称并且它可以使用它。我禁用了所有内容re_expression
,并且所有内容都适用于Domain admins
组和任何不区分大小写的配置。有必要询问开发商为什么这样做。