AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 784720
Accepted
Z0OM
Z0OM
Asked: 2024-10-08 18:35:52 +0800 CST2024-10-08 18:35:52 +0800 CST 2024-10-08 18:35:52 +0800 CST

如何在 debian gnu/linux 中删除或停用主要组?

  • 772

我想删除我的 debian gnu/linux 系统中的某些组,但其中一些是主要组。

例如,如果我想news使用以下方法删除组/sbin/groupdel news

我收到消息了The primary group of the user "news" could not be removed。

  1. 我怎样才能使用 shell 命令删除它?

  2. 如果我手动删除文件中的特定组:

/etc/group

/etc/gshadow

/etc/passwd

/etc/security/group.conf

我是否还需要考虑或删除其他地方的内容?

  1. 如果我只是注释掉此文件中的行,这些组是否也会被删除/停用?

  2. 删除真正不需要的主要组的最佳方法是什么?

编辑:

我明白答案。不过,我还是想以删除游戏为例。

我现在已经检查过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 /

使用最后一个命令,我发现了很多东西,但是正如答案所说,它太混乱了。

谢谢您的回答!

bash
  • 3 3 个回答
  • 67 Views

3 个回答

  • Voted
  1. Best Answer
    user10489
    2024-10-08T19:24:11+08:002024-10-08T19:24:11+08:00

    对此的另一种观点是……

    您根本无法删除群组。群组只是一个数字,您无法删除一个数字并让它消失。它仍然存在。

    您在 /etc/group 中找到的不是一个组,而是一个组的标签。因此,如果您删除标签,但该组仍在使用中,那么您会遇到两个问题:

    • 该组将没有标签,并且在使用时,它将仅显示为具有神秘含义的数字。
    • 由于标签已被删除,系统将不知道组号已被使用,并且可能会尝试将该号码重新用于不同的组标签,这可能会导致一个组用于两个用途的安全问题。
    • 除了以上两个问题之外,如果该组由系统服务使用并且您删除了标签,则在服务配置文件中使用已删除的组标签可能会使配置文件无效并导致服务失败。

    删除用户主要组的组(标签)的最佳方法是删除该用户。

    对于“新闻”之类的服务帐户,不建议删除用户,除非您还删除使用该服务帐户的软件。

    在使用包管理器的 Linux 版本中,如果您使用包管理器删除软件,则用户(和相关组)可能会被自动删除。遗憾的是,用户和组的管理并不像软件包那样严格,因此没有简单的方法来跟踪哪些软件使用了特定的服务帐户。幸运的是,它们的命名方式通常很容易猜到。如果猜不出来,您可能会在配置文件的所有权中找到对服务帐户的引用,或者在 serivce 和 systemd 配置文件中找到对组和用户的提及,因此如果您猜不出来,可能需要进行一些挖掘。

    您无法完全停用用户。您可以使他们的密码无效,这样他们就无法登录,就是这样。您可以将他们的 shell 更改为无效的,这样他们就无法通过其他方法登录。(服务帐户可能已经是这种情况了!)但您通常不会登录组,因此对于组,您甚至无法做到这一点。密码文件和组文件都不支持注释掉组。因此,例如,如果您尝试用 注释掉新闻组,#那么您现在就会有一个被错误标记为 的组#news。由于注释不是这些文件的记录行为,即使某些工具支持它,其他工具也不会支持。正如其他答案中提到的,停用组的唯一方法是停止使用它,方法是删除配置文件、文件所有权、活动进程和软件可执行文件中可能的硬编码用途中的所有提及(可能还有一些我忘记的使用方法)。

    • 4
  2. Shadur-don't-feed-the-AI
    2024-10-08T18:51:18+08:002024-10-08T18:51:18+08:00

    简短回答:您不能删除主要组。

    稍微长一点的回答:理论上是可行的,但任何对 Unix 了解足够多的人都知道如何做到这一点,也知道不想这样做。这是“如果你不知道它是做什么的,就不要删除它”的事情之一。

    答案明显更长:Unix 标准规定每个用户都有一个用户 ID 和一个组 ID。该组 ID 是该用户的“主要组”的 ID;如果您熟悉数据库,它就是指向该组的外键。

    只要至少有一个用户将某个组作为其主要组,groupdel就不会允许您删除该组,因为这样做会导致密码和组文件不一致,并存在不可预测行为的风险(例如,如果您稍后创建一个新组,而该组原来是该主要组的 id,那么无论您是否愿意,“孤立”用户都会突然成为该组的一部分)。

    如果您确实希望news删除该组,则需要news先删除该用户,但我确实同意Panki 的观点:除了错误的整洁冲动之外,没有真正的理由将其删除,并且以后意外破坏假设该组存在的某些东西的风险虽然很小,但并非为零——并且如果确实以这种方式破坏了某些东西,您将浪费数周或数月的挫败感,然后才能意识到出了什么问题。

    附录:除非在极其危急的情况下,否则不要尝试 #2,除非您想看看不可逆转的系统是什么样子,并且喜欢从头开始重新安装系统。

    • 2
  3. David G.
    2024-10-08T19:10:33+08:002024-10-08T19:10:33+08:00

    简短的回答是:你不能。

    长答案:可以,但你必须先停止使用它。这不仅仅意味着 中的数据/etc,还意味着你所有文件系统中的文件所有权。如果在 中使用/dev,事情可能会变得棘手。这也可能意味着未来可能的安装,具体取决于你的发行版。(并且某些发行版可能会在你升级时恢复它们默认安装的内容。)

    至于注释:我不会依赖注释语法。(版本 7 没有注释语法。)您可能只是更改了名称。(不过我承认,“#”注释对我来说似乎很管用,即使使用 busybox 也是如此!)

    编辑:既然您标记了“debian”,我会告诉您该base-passwd软件包是恢复常规用户和组的软件包,尽管它似乎确实询问了。实际上,它似乎很少依赖于此软件包,因此您可能让它变得相当陈旧(尽管其他软件包可能需要用户/组)。

    • 2

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve