在一个不寻常的场景中,我必须删除 openSUSE 系统上一个名为“lp”(行打印守护进程)的特定系统用户帐户。
我可以注释掉该帐户的行/etc/passwd
而不会遇到不一致的系统状态吗?
背景: 该帐户的用户名与我希望在 SAMBA 中使用的帐户名冲突。我并不真正需要行打印功能,因为我不知道该帐户是否被其他重要进程使用。
有其他人有删除系统帐户的经验吗?
答案1
find
我会先在系统上快速运行一下,看看是否有该用户拥有的任何文件lp
。
$ find -user lp
如果返回任何文件,您可以使用 OpenSUSE 的包管理器回溯这些文件。我相信它使用 RPM,所以这样的命令可以工作:
$ rpm -qf /path/to/file/find/found
这将使您有机会决定是否可以删除这些包。删除这些包很可能会lp
在卸载过程中删除用户帐户。
如果没有找到包,则可以从/etc/passwd
, /etc/shadow
, &中删除该帐户/etc/group
。您确实检查过该帐户是否有任何关联的组,不是吗?
像这样的命令将告诉您哪些组与该用户关联:
$ id lp
uid=4(lp) gid=7(lp) groups=7(lp)
删除用户的一种更简单的方法是使用内置命令之一。它们通常是这样的命令:userdel <username>
。
例如:
$ sudo userdel lp
前进的道路
OP (@MasterofCelebration) 的评论如下:
好吧,我发现了一些属于基本功能的包(例如 Ghostscript、文件系统),我不一定喜欢删除它们。所以我考虑更改帐户名称并为所需用户添加一个新帐户(将系统帐户的 UID 保留为它的新名称,例如“lprint”)。现在棘手的部分是,我不知道“打印应用程序”或其他常用的东西使用的新用户的主目录实际上会发生什么,尽管我根本不需要它(我什至不需要主目录)新用户的目录,仅用于 SAMBA 目的)。
我会保留所有被识别为与用户相关的包lp
。
棘手的部分是,lp
除了可能拥有磁盘上的文件之外,用户名很可能由一两个配置文件调用。
这就是我要做的:
- 我会保留旧的 UID
lp
。将其名称从 更改lp
为lpold
。 - 使用新的 UID 创建您的新帐户并继续调用它
lp
。 lp
在目录中搜索/etc
并查看是否可以识别任何明确调用 的配置文件lp
,如果找到它们,请将其更改为lpold
.
通过这种方式,您不必接触磁盘上的文件,它们会自动显示为lpold
.它还允许您将磁盘上的文件lpold
和新的lp
.
您现在必须满足的唯一风险是,可能有一项服务以 user 身份启动lp
,该服务现在将是您的新服务lp
,而不是旧服务。通过搜索/etc
应该可以根除这些问题。
答案2
/etc/passwd
有效地注释掉and /etc/shadow
will中的帐户删除用户。对于/etc/group
和 也是如此/etc/gshadow
。
请注意,如果用户是文件的所有者,则这些文件将被分配给未分配的 UID,这本身并没有什么坏处,但很丑陋并且可能是不可取的(即,该 UID 可以稍后重用,并且这些文件将属于新用户)。最好首先使用find
查找并删除该用户拥有的文件。
反正,我不会这样做。如果有一天您需要安装 CUPS 怎么办?您会让您的用户 CUPS 成为管理员吗?还想一下,包中的分发脚本可能会使用以下lp
名称进行操作:即服务可能允许lp
有权读/写某些文件(为什么?我不知道,但可能会发生)。
简而言之,您可以,但总的来说,抓住 Linux 发行版的系统用户并给他们提供与设计时不同的用途并不是一个好主意。
答案3
我不会,尤其是对于像lp
.如果您想要添加打印机支持(例如 CUPS),您会遇到麻烦...并且请记住,CUPS 很可能是您将来安装的软件包的依赖项。即使您没有安装 CUPS 之类的东西,lp
几十年来一直是标准用户(在 Unix 系统中),因此软件包可能依赖于它,并且系统的某些部分可能会使用它。用户/组也lp
可以默认属于组,和/或拥有文件、目录和设备。
您最好为要创建的任何用户找到另一个名称。
答案4
我想你可以备份/etc/passwd
并/etc/shadow
运行 userdel...我不知道 SUSE(我自己使用 Ubuntu 和 Debian),但我认为你不会遇到问题。
顺便说一句,你不能使用pdbedit
或smbpasswd
给你的 samba 另一个用户 lp 吗?系统真的有冲突吗?