Ldap

通過 PAM 過濾 LDAP 使用者,使其看起來根本不存在

  • October 2, 2015

很久以前,在我們的公司環境中,一些 wiz 決定將使用者 " mysql" 放入 LDAP。

帳戶被禁用:

$ sudo su - mysql
This account is currently not available.

…但它的 id 仍然存在:

$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)

這使得 mariadb 在 CentOS7 上的安裝失敗,因為/var/run/mariadb它是由 tmpfile 規則創建的,該規則試圖將目錄分配給 mysql。但是 mysql 在 LDAP/networking 啟動並執行之前不存在,並且 mariadb 安裝不會創建mysql使用者,因為使用者已經存在於 ldap 中。

有沒有辦法在本地強制 PAM(或其他東西?)忽略 LDAP 中的使用者 mysql ?或者將 ldapmysql使用者重命名為mysql_ldap?

手動添加條目是我唯一的解決方法/etc/passwd嗎?(或更改 mariadb 配置以使用不同的使用者名。)我寧願對來自 rpm 的配置和 systemd 文件進行最小的更改。

(而且我不希望mysql從 LDAP 中移除,因為這可能會破壞許多遺留基礎設施。)

順便說一句,我將使用 ansible 來實現更改。

額外的:

我更改了問題的標題:

我發現如果我確實添加了本地“ mysql”使用者,它可以正常工作,除非我有 LDAP“”使用者的使用者 ID 擁有的文件mysql。如果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        

引用自:https://serverfault.com/questions/725594