rra*_*nza 5 ldap pam sssd ansible centos7
很久以前,在我们的公司环境中,一些奇才决定将用户“ mysql”放入 LDAP。
该帐户被禁用:
$ sudo su - mysql
This account is currently not available.
Run Code Online (Sandbox Code Playgroud)
...但它的 id 仍然存在:
$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)
Run Code Online (Sandbox Code Playgroud)
这使得在 CentOS7 上安装 mariadb 失败,因为它/var/run/mariadb是由 tmpfile 规则创建的,该规则试图将目录分配给 mysql。但是 mysql 在 LDAP/网络启动并运行之前不存在,并且 mariadb 安装不会创建mysql用户,因为该用户已存在于 ldap 中。
有没有办法在本地强制 PAM(或其他什么?)忽略 LDAP 中的用户 mysql?或者将 ldapmysql用户重命名为mysql_ldap?
是我手动添加条目的唯一解决方法/etc/passwd吗?(或更改 mariadb 配置以使用不同的用户名。)我宁愿对来自 rpm 的配置和 systemd 文件进行最少的更改。
(而且我对mysql从 LDAP中删除没有寄予厚望,因为这可能会破坏许多遗留基础设施。)
顺便说一句,我将使用 ansible 来实现更改。
额外的:
我已经更改了问题的标题:
我发现,如果我确实添加了本地“ mysql”用户,它就可以正常工作,除非我拥有 LDAP“ mysql” 用户的用户ID 所拥有的文件。如果我是ls -la这些文件,它会污染 nscd(或 sssd)缓存,并且“ mysql”再次解析为 LDAP 用户。看来我真正想要的是以某种方式为帐户构造一个 PAM 过滤器,以使这个 LDAP " mysql" 用户消失。
这是我的最终解决方案,用 ansible 编码:
- name: Disable ldap users
ini_file: dest=/etc/sssd/sssd.conf section='nss'
option=filter_users value={{ filter_ldap_users | join(",") }}
register: sssd_conf_users
- name: Disable ldap groups
ini_file: dest=/etc/sssd/sssd.conf section='nss'
option=filter_groups value={{ filter_ldap_groups | join(",") }}
register: sssd_conf_groups
- name: Restart SSSD
when: sssd_conf_users.changed or sssd_conf_groups.changed
service: name=sssd state=restarted
- name: Flush NSCD cache
when: sssd_conf_users.changed or sssd_conf_groups.changed
shell: "for db in /var/db/nscd/*; do nscd -i $(basename $db); done"
- name: Flush SSSD cache
when: sssd_conf_users.changed or sssd_conf_groups.changed
command: /usr/sbin/sss_cache -E
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |