很久以前,在我们的公司环境中,一些 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 编码:
在 PAM 级别:
您只需要忽略 LDAP 中的用户。因此,设置您正在使用的特定 LDAP 客户端,在 CentOS 中它将是 sssd,以使用将忽略“mysql”记录的自定义 LDAP UID/GID 查找文件过滤器。在现有系统上,您必须清理 sssd 缓存并重新启动它,用户就会消失。然后重新安装 mariadb 将创建一个本地 mysql 用户。
在包级别:
在网络上的某处设置自定义 Yum 存储库,其中将包含一个包含安装后脚本的包,修复 mysql 用户问题。您还必须将 mariadb 包放入该存储库中。然后,定义一个包含该包和 mariadb 的包组并安装它。
或者,您可以使用更新的、更智能的安装后脚本重建 mariaDB 包,该脚本将负责创建 mysql 用户。
我会选择 A - B 有点混淆:)
这是我目前正在使用的解决方法。在启用/设置 LDAP 之前,我已将此添加到我的 kickstart 文件中以运行
%post
:我打算通过阅读规范文件
useradd
手动运行:http: //pkgs.fedoraproject.org/cgit/mariadb.git/tree/mariadb.specmariadb-server
...但我更愿意直接从安装 rpm 中获取它。
我对此也并不完全满意,因为如果我碰巧找到了一个具有 ldap“mysql”用户 ID 的文件,那么对用户 ID 的反向查找会污染 nscd 或 sssd 并使用错误的“mysql”用户。
我实际上建议添加:
到
[nss]
sssd.conf 部分,而不是自定义 LDAP 过滤器。它应该做同样的事情,除了当你使用 LDAP 过滤方式时,搜索仍然命中 LDAP 服务器,只是不匹配。相反,
filter_users/filter_groups
将mysql用户输入到SSSD的负缓存中,这将直接从NSS响应者返回“未找到”,而无需进入sssd_be进程和LDAP服务器。如果您只想不解析 ldap 用户。编辑 /etc/nsswitch.conf 并为用户和组条目删除 sssd(或 ldap)条目。然后刷新 nscd 缓存