Ldap
通過 PAM 過濾 LDAP 使用者,使其看起來根本不存在
很久以前,在我們的公司環境中,一些 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 ?或者將 ldap
mysql
使用者重命名為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