在我们的企业环境中,很久以前,一些智者决定把用户“ 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