将所有组重置为默认值

将所有组重置为默认值

我最近在我的计算机上设置了一些组和用户,现在我想删除所有这些用户和所有这些组。有点愚蠢的是,我在 Ubuntu 论坛或类似的地方读到可以只编辑包含所有组信息的文本文件。但现在,每当我启动终端时,我都会得到

groups: cannot find name for group ID 1002

这显然不是正确的事情。

那么,如何删除几个月前创建的所有组和用户呢?

答案1

您可以手动编辑/etc/passwd和朋友(/etc/group/etc/shadow/etc/gshadow),但与使用高级工具相比,犯错误(例如删除无意的行)的风险更大。

使用vigr而不是直接调用编辑器/etc/group( vigr -sfor /etc/gshadow, vipw( -s) for /etc/passwd( /etc/shadow))。这有两个好处。首先,这些实用程序会锁定文件,以确保某人或某些其他工具不会同时编辑它们。其次,他们创建备份(/etc/group-,...)。

检查您是否有/etc/group-或来自其他工具的备份(例如/etc/group.bak)。它可能有点过时,但仍然比从头开始要好。

如果您没有修改过/etc/gshadow,您可以找到缺失组的名称,但看不到数字。如果您删除的条目数量低于 100,则在给定版本的 Ubuntu 的所有安装中,它们的名称和编号都是相同的(您仍然需要根据需要将本地用户添加到系统组)。 101 到 999 之间的条目是在安装软件包时分配的,我想不出一种简单的方法来重建这些条目。 1000 以上的条目是您创建的任何条目。

我建议为/etc.如果您这样做了,您可以从工作版本恢复。看有可以安装的系统日志吗?。简而言之:

apt-get install etckeeper
etckeeper init

您的更改将每天保存(“提交”)一次,在安装软件包之前和之后,或者每当您bzr commit/etc.要查看您所做的更改,请运行bzr diff.要恢复最新提交的版本,请bzr revert group从运行/etc

答案2

确实,您可以只编辑文本文件/etc/group。听起来您要么删除了太多内容,要么使文件处于损坏状态。每行需要一个条目,格式如下:

group_name:x:###:

对于“空”组,或

group_name:x:###:username

对于只有一名成员的团体,或

group_name:x:###:username2,username2

对于具有多个成员的团体。我将“空”放在引号中,因为如果将某个组设置为您的主要组,您也可以成为该组的成员/etc/passwd- 这是那里的第四个字段。

(“x”实际上可以是密码哈希,但现在很少使用。几乎可以肯定,您的系统上都是“x”。)

如果你有无关的空行,或者格式错误的空行,那可能会把事情搞砸。

该文件还需要具有全局可读权限。

理想情况下,您有几个月前的文件备份。但是,我了解现实世界。 :)


还有一个文件/etc/gshadow。如果你使用组密码(就像我说的,几乎没有人这样做),它们的哈希值应该保存在这里而不是/etc/group,因为这个文件应该只能由 root 读取。该文件还可用于指定组管理员,他们能够使用某些命令行工具添加成员。 (我也不知道有人使用此功能。)

这个文件应该与 保持同步/etc/group。使用命令行或 GUI 工具来管理组将自动执行此操作,这是考虑使用这些工具而不仅仅是编辑文件的另一个原因。然而,在实际操作中,这个文件可能完全不同步,甚至完全混乱,而您的系统通常会正常工作。它不会导致您看到的错误。


吉尔斯在下面的评论中补充说,您可以在/etc/gshadow文件中查找有关事情如何进行的信息应该是。这不会包含所有重要信息(例如组 ID 号),但会包含组名称以及可能的组成员身份信息。

还可能有一个/etc/group-文件(注意-最后的 )——这是由一些用于操作/etc/group/.如果你幸运的话,那里会有你需要的一切。 (不过,通常这并没有多大帮助,因为它只是备份。并且像这样的程序gpasswd不会更新它。)

答案3

是不是就像passwd文件中你的主要组为1002一样简单,但是你已经从组文件中删除了这个组。所以没有办法解析名字。此外,文件仍将具有以前的用户和组 ID。

添加用户和组不是一个好主意,最好禁用它们。如果系统上留下了一些引用,那么您添加一个使用旧 ID 的新用户/组,那么看起来他们创建了该文件,让他们可以访问个人信息等。

相关内容