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

在我们的企业环境中,很久以前,一些智者决定把用户“ mysql ”放到LDAP中。

该帐户已被禁用:

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

…但它的身份证仍然存在:

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

这使得mariadb安装在CentOS7上失败,因为/var/run/mariadb是由一个tmpfile规则创build的,该规则尝试将该目录分配给mysql所拥有。 但是,在LDAP /networking启动并运行之前,mysql不存在,而mariadb安装不会创buildmysql用户,因为用户已经存在于LDAP中。

有没有办法在本地强制PAM(或其他?)在LDAP中忽略用户mysql? 或者将ldap mysql用户重命名为mysql_ldap

我唯一的解决方法是在/etc/passwd手动添加条目吗? (或者更改mariadbconfiguration以使用不同的用户名。)我宁愿对来自rpm的configuration文件和systemd文件做最小的更改。

(而且我不希望从LDAP中删除mysql ,因为这可能会破坏很多传统的基础设施。)

我会用顺从,顺便说一句,来实现这个变化。

额外:

我已经改变了问题的标题:

我发现,如果我添加本地“ mysql ”用户,它工作正常,除非我有LDAP“ mysql ”用户的用户ID所拥有的文件。 如果我使用这些文件,则会污染nscd(或sssd)caching,“ mysql ”会再次parsing为LDAP用户。 看来我真正想要的是以某种方式构build帐户的PAMfilter,以使此LDAP“ mysql ”用户消失。

这是我的最终解决scheme,编码为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 

在PAM级别上:
您所需要的只是忽略LDAP中的用户。 因此,设置您正在使用的特定LDAP客户端,在CentOS中,将使用自定义的LDAP UID / GID查找文件,这将忽略“mysql”logging。 在现有的系统上,您将不得不清除sssdcaching并重新启动,用户将不见了。 然后重新安装mariadb将创build一个本地的mysql用户。

在包级别上:
在networking上的某处设置一个自定义的Yum仓库,它将包含一个包含安装后脚本的软件包,修复了mysql用户的问题。 您还必须将mariadb软件包放入回购站。 然后,定义一个包含该包和mariadb的包组并安装它。
或者,您可以使用更新的,更智能的安装后脚本来重buildmariaDB软件包,该脚本将负责创buildmysql用户。

我会去与A – B有点混淆:)

这是我目前使用的解决方法。 我已经添加到我的kickstart文件运行在%post – 在启用/设置LDAP之前:

 # Install and de-install mariadb-server to create mysql # user before LDAP is enabled. yum -d1 -e1 -y install yum-plugin-remove-with-leaves mariadb-server yum -d1 -e1 -y erase mariadb-server --remove-leaves 

我打算从阅读mariadb-server spec文件手动运行useradd : http : mariadb-server

 %pre server /usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || : /usr/sbin/useradd -M -N -g mysql -o -r -d %{mysqluserhome} -s /sbin/nologin \ -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || : 

…但是我更愿意直接安装rpm。

我也不完全满意这个,因为如果我碰巧find一个带有ldap“mysql”用户标识的文件,用户标识的反向查找就会污染nscd或者sssd,并带有错误的“mysql”用户。

我实际上build议添加:

 filter_users = mysql filter_groups = mysql 

到sssd.conf的[nss]部分,而不是自定义LDAPfilter。 它应该做同样的事情,除了当你使用LDAPfilter的方式,search仍然击中LDAP服务器,只是不匹配。

相比之下, filter_users/filter_groups会将mysql用户input到SSSD的负caching中,直接从NSS响应方返回“Not found”,而无需转到sssd_be进程和LDAP服务器。

如果你想要做的就是不解决ldap用户。 编辑/etc/nsswitch.conf,并为用户和组条目删除sssd(或ldap)条目。 然后刷新nscdcaching