我一直在使用 Splunk 并遇到一些问题:
我已经使用它安装了
rpm -iv splunk-7.2.3-06d57c595b80-linux-2.6-x86_64.rpm
我接下来使用删除它
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
可能会失败。因此,管理员需要使用他用于用户管理的工具来删除用户。