通过 PAM 过滤 LDAP 用户,使其看起来根本不存在

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" 用户消失。

rra*_*nza 2

这是我的最终解决方案,用 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)