rpm -e 软件包不会从 /etc/passwd 中删除条目

rpm -e 软件包不会从 /etc/passwd 中删除条目

我一直在使用 Splunk 并遇到一些问题:

  1. 我已经使用它安装了

    rpm -iv splunk-7.2.3-06d57c595b80-linux-2.6-x86_64.rpm

  2. 我接下来使用删除它

rpm -e splunk-7.2.3-06d57c595b80.x86_64

我的问题是,为什么不rpm从 /etc/passwd 中删除 Splunk 用户?另外我有点困惑为什么删除 viasplunk-7.2.3-06d57c595b80-linux-2.6-x86_64.rpm不起作用(但安装了)并且我必须rpm -qa | grep splunk先获取实际的包名称?

这与Splunk rpm封装有关还是与标准有关?

答案1

rpm 包由一堆文件和一组可选的脚本组成(pre/postinstall pre/postremove pre/postupgrade verify)

您可以使用 --list 选项来显示包中包含哪些文件。当您 --erase 软件包时,这些将被删除。

rpm -qipl package.rpm

您还可以包含 --scripts 来转储脚本的内容。关于安装/删除脚本如何工作,没有大量标准化模板或强制执行,因此这实际上取决于包维护者。但是您当然可以转储包的 --scripts 来准确发现 RPM 对您的系统做了什么,这样您就可以更好地编写自己的清理脚本。

rpm -qi --scripts package.rpm

如果您只需要 rpm 中的一些文件并且不希望或不信任维护者修改您的系统配置,您甚至可以考虑使用 --noscripts 进行安装。

答案2

不将用户与包一起删除是一个标准。

托马斯已经在评论中提供了很好的解释并链接了这个很好的文档https://ma.ttias.be/on-removing-users-with-postun-in-rpm-spec-files/

然而,还有另一个原因。许多管理员依靠 LDAP 或 NIS 向系统提供用户。甚至在安装创建新用户的包之前,他们也会首先将该用户添加到他们的 LDAP 中。这就是使用以下命令创建新用户的原因:

getent passwd USERNAME >/dev/null || \
    useradd -r -g GROUPNAME -d HOMEDIR -s /sbin/nologin ...

即在创建用户之前,包应始终检查用户是否已创建。

当然,您根本无法从客户端系统中删除 LDAP 用户。如此简单的做法userdel可能会失败。因此,管理员需要使用他用于用户管理的工具来删除用户。

相关内容