AWS EFS权限问题:所属群组过多的用户访问目录被拒绝
这是SSSD对接AD同步场景里挺常见的权限坑,核心问题大概率和Linux内核的NGROUPS_MAX参数有关——这个参数限制了单个用户能同时关联的附属群组数量,默认值通常是16。当用户的群组总数(含主组)超过这个阈值时,SSSD可能无法同步所有群组,或者在群组更新后,有权限的群组没被纳入系统识别的有效列表,最终导致用户无法访问EFS目录。
第一步:排查问题根源
检查系统的群组数量限制
运行以下命令查看当前系统的NGROUPS_MAX值:sysctl kernel.ngroups_max或者通过ulimit查看用户级别的限制:
ulimit -a | grep maxgroups如果输出是16,那基本可以锁定就是这个限制在搞鬼。
确认用户的实际群组数量
查看用户test的所有群组,统计总数:id test数一下输出里的群组条目,加上主组如果超过16,就完全符合我们的判断。
检查SSSD的群组同步配置
打开SSSD配置文件/etc/sssd/sssd.conf,找到对应AD域的配置段(比如[domain/your_ad_domain]),查看是否有ldap_group_member_limit或max_groups参数——如果这些参数设置得比用户实际群组数小,也会导致部分群组无法同步。
第二步:解决问题
调整内核的NGROUPS_MAX限制
- 临时生效(重启后失效):
sysctl -w kernel.ngroups_max=64 - 永久生效:
编辑/etc/sysctl.conf,添加或修改以下内容:
然后执行命令让配置立即生效:kernel.ngroups_max=64sysctl -p
- 临时生效(重启后失效):
调整SSSD的同步参数
在/etc/sssd/sssd.conf的AD域配置段中添加或修改:ldap_group_member_limit = 64 max_groups = 64保存后重启SSSD服务:
systemctl restart sssd刷新用户缓存并验证
清除用户test的SSSD缓存,确保新的群组信息被同步:sss_cache -u test然后让用户
test重新登录,或者执行id test确认testgroup已经出现在群组列表中,再尝试访问EFS目录。
额外排查点
如果上述步骤没解决问题,还可以检查:
- EFS目录的POSIX权限是否正确设置,
testgroup是否拥有对应的读/写权限; - AD中
testgroup的GID是否在CentOS系统中正确同步; - 查看SSSD的日志文件
/var/log/sssd/sssd_your_ad_domain.log,是否有群组同步相关的错误信息,比如超出限制的报错。
内容的提问来源于stack exchange,提问作者OrigamiEye

