我想删除我的 debian gnu/linux 系统中的某些组,但其中一些是主要组。
例如,如果我想news
使用以下方法删除组/sbin/groupdel news
我收到消息了The primary group of the user "news" could not be removed
。
我怎样才能使用 shell 命令删除它?
如果我手动删除文件中的特定组:
/etc/group
/etc/gshadow
/etc/passwd
/etc/security/group.conf
我是否还需要考虑或删除其他地方的内容?
如果我只是注释掉此文件中的行,这些组是否也会被删除/停用?
删除真正不需要的主要组的最佳方法是什么?
编辑:
我明白答案。不过,我还是想以删除游戏为例。
我现在已经检查过find / -group games 2>/dev/null
哪些find / -user games 2>/dev/null
文件使用用户或组或拥有游戏权限。
我找到了 4 个用于 dialout 的文件find / -group dialout 2>/dev/null
,但没有找到用于游戏的文件。
我删除了用户和组游戏,但重新启动后,该条目再次出现在/etc/group
。
我还应该在哪里寻找该条目被重新生成的原因?
我需要查找对应的包裹才能删除号码和标签吗?
如何找到与团体游戏相关的所有条目、包和文件?
因此,除了硬编码之外,这是不可能的。
我从所有答案中理解得正确吗?
如果我删除创建该用户的特定包,则该组将被删除,否则,我必须搜索整个系统,这可能会破坏我的系统。
如果能知道其他群组条目出现在何处就更好了。
我现在已经尝试了以下方法(即使并非所有方法都有意义):
检查群组数据
getent group games
搜索群组文件
find / -group games 2>/dev/null
搜索用户的文件
find / -user games 2>/dev/null
列出已安装的软件包
dpkg -l | grep games
检查包的依赖关系
apt-cache rdepends games
检查流程
ps aux | grep games
搜索系统日志
grep games /var/log/syslog
检查服务
systemctl list-units --type=service | grep games
检查配置文件
grep -r games /etc/
检查 / 中的所有文件
grep -r games /
使用最后一个命令,我发现了很多东西,但是正如答案所说,它太混乱了。
谢谢您的回答!
对此的另一种观点是……
您根本无法删除群组。群组只是一个数字,您无法删除一个数字并让它消失。它仍然存在。
您在 /etc/group 中找到的不是一个组,而是一个组的标签。因此,如果您删除标签,但该组仍在使用中,那么您会遇到两个问题:
删除用户主要组的组(标签)的最佳方法是删除该用户。
对于“新闻”之类的服务帐户,不建议删除用户,除非您还删除使用该服务帐户的软件。
在使用包管理器的 Linux 版本中,如果您使用包管理器删除软件,则用户(和相关组)可能会被自动删除。遗憾的是,用户和组的管理并不像软件包那样严格,因此没有简单的方法来跟踪哪些软件使用了特定的服务帐户。幸运的是,它们的命名方式通常很容易猜到。如果猜不出来,您可能会在配置文件的所有权中找到对服务帐户的引用,或者在 serivce 和 systemd 配置文件中找到对组和用户的提及,因此如果您猜不出来,可能需要进行一些挖掘。
您无法完全停用用户。您可以使他们的密码无效,这样他们就无法登录,就是这样。您可以将他们的 shell 更改为无效的,这样他们就无法通过其他方法登录。(服务帐户可能已经是这种情况了!)但您通常不会登录组,因此对于组,您甚至无法做到这一点。密码文件和组文件都不支持注释掉组。因此,例如,如果您尝试用 注释掉新闻组,
#
那么您现在就会有一个被错误标记为 的组#news
。由于注释不是这些文件的记录行为,即使某些工具支持它,其他工具也不会支持。正如其他答案中提到的,停用组的唯一方法是停止使用它,方法是删除配置文件、文件所有权、活动进程和软件可执行文件中可能的硬编码用途中的所有提及(可能还有一些我忘记的使用方法)。简短回答:您不能删除主要组。
稍微长一点的回答:理论上是可行的,但任何对 Unix 了解足够多的人都知道如何做到这一点,也知道不想这样做。这是“如果你不知道它是做什么的,就不要删除它”的事情之一。
答案明显更长:Unix 标准规定每个用户都有一个用户 ID 和一个组 ID。该组 ID 是该用户的“主要组”的 ID;如果您熟悉数据库,它就是指向该组的外键。
只要至少有一个用户将某个组作为其主要组,
groupdel
就不会允许您删除该组,因为这样做会导致密码和组文件不一致,并存在不可预测行为的风险(例如,如果您稍后创建一个新组,而该组原来是该主要组的 id,那么无论您是否愿意,“孤立”用户都会突然成为该组的一部分)。如果您确实希望
news
删除该组,则需要news
先删除该用户,但我确实同意Panki 的观点:除了错误的整洁冲动之外,没有真正的理由将其删除,并且以后意外破坏假设该组存在的某些东西的风险虽然很小,但并非为零——并且如果确实以这种方式破坏了某些东西,您将浪费数周或数月的挫败感,然后才能意识到出了什么问题。附录:除非在极其危急的情况下,否则不要尝试 #2,除非您想看看不可逆转的系统是什么样子,并且喜欢从头开始重新安装系统。
简短的回答是:你不能。
长答案:可以,但你必须先停止使用它。这不仅仅意味着 中的数据
/etc
,还意味着你所有文件系统中的文件所有权。如果在 中使用/dev
,事情可能会变得棘手。这也可能意味着未来可能的安装,具体取决于你的发行版。(并且某些发行版可能会在你升级时恢复它们默认安装的内容。)至于注释:我不会依赖注释语法。(版本 7 没有注释语法。)您可能只是更改了名称。(不过我承认,“#”注释对我来说似乎很管用,即使使用 busybox 也是如此!)
编辑:既然您标记了“debian”,我会告诉您该
base-passwd
软件包是恢复常规用户和组的软件包,尽管它似乎确实询问了。实际上,它似乎很少依赖于此软件包,因此您可能让它变得相当陈旧(尽管其他软件包可能需要用户/组)。