1. 基本方法

1. 基本方法

我周围有很多搭载 Ubuntu 的设备。

据我所知/etc/group/etc/passwd/etc/shadow在安装过程中创建的,因此它们不属于任何包:

$ dpkg -S /etc/passwd
dpkg-query: no path found matching pattern /etc/passwd
$ dpkg -S /etc/shadow
dpkg-query: no path found matching pattern /etc/shadow
$ dpkg -S /etc/group
dpkg-query: no path found matching pattern /etc/group

我的问题在标题中 - 如何检查我的用户和组是否正确?如果我在这些文件中拼写错误或手动更改了某些内容怎么办?

答案1

1. 基本方法

我找到了一个非常有用的包来进行这样的操作。它的名字是base-passwd并有以下描述:

$ apt-cache show base-passwd   
Package: base-passwd  
...  
Description-en: Debian base system master password and group files  
 These are the canonical master copies of the user database files  
 (/etc/passwd and /etc/group), containing the Debian-allocated user and  
 group IDs. The update-passwd tool is provided to keep the system databases  
 synchronized with these master files.

主文件(上述术语)放置在:

  • /usr/share/base-passwd/group.master
  • /usr/share/base-passwd/passwd.master

该软件包仅包含一个二进制文件/usr/sbin/update-passwd
其用途在手册页 (man update-passwd):

描述处理正在运行的 Debian 系统的和的
update-passwd更新。它将当前文件与软件包中分发的主副本进行比较,并更新全局系统范围(即 0–99)中的所有条目。/etc/passwd/etc/shadow/etc/groupbase-passwd

对于问题中的问题我们需要运行:

sudo update-passwd --sanity-check --verbose

您也可以尝试运行模拟(试运行):

$ sudo update-passwd --sanity-check --verbose --dry-run
Reading passwd from /usr/share/base-passwd/passwd.master
Reading group from /usr/share/base-passwd/group.master
Reading passwd from /etc/passwd
Reading shadow from /etc/shadow
Reading group from /etc/group

不带参数运行将安全地更新/etc/passwd/etc/shadow并且/etc/group或静静地退出:

$ sudo update-passwd
$ sudo update-passwd --verbose
No changes needed

该实用程序涵盖 39 个标准组 -管理员声音的备份垃圾桶光盘守护进程拨出磁盘传真软盘游戏蚊蚋互联网通讯閣下列表LP邮件男人消息无组操作员插件开发代理人萨斯拉阴影源码职员须藤系統磁带终端用户韓國统一通信协议视频嗓音www-数据

可以阅读有关标准组的本地文档/usr/share/doc/base-passwd/users-and-groups.html(或在线的)。

2. 更深层次的方法

警告:如果您不确定自己在做什么或者您是新手,请不要继续。

从...开始

sudo update-passwd --verbose

然后,如果你已经从存储库安装了其他软件,然后丢弃了你的/etc/passwd和/或/etc/group你可以尝试重新安装所有这样的包命令基于@muru 建议

sudo apt-get install --reinstall \
$(grep -RlE '(getent|useradd|adduser|groupadd|addgroup|chrgp|chmod|gpasswd|usermod)' \
/var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:')

2.1. 损坏/etc/group

如果您删除了条目,/etc/group您将面临错误消息

dpkg: unrecoverable fatal error, aborting:
 unknown group 'crontab' in statoverride file
E: Sub-process /usr/bin/dpkg returned an error code (2)

您需要删除相应的行/var/lib/dpkg/statoverride/etc/passwd然后重试命令多于。

其他可能的错误信息是

E: Internal Error, No file name for dbus:amd64

您可以通过手动下载包来修复此问题:

apt-get download dbus
sudo dpkg -i dbus*.deb

然后再试一次命令多于。

如果您删除了与 systemd 相关的组systemd 日志systemd-时间同步systemd 网络systemd-resolvesystemd-bus-代理/etc/组然后从中删除它们/etc/passwd并重新安装systemd

sudo apt-get install --reinstall systemd

然后再试一次命令多于

2.2. 损坏/etc/passwd

如果您删除了条目,/etc/passwd您将面临错误消息

dpkg: unrecoverable fatal error, aborting:
 unknown user 'hplip' in statoverride file

您需要从中删除相应的行/var/lib/dpkg/statoverride,然后重试命令多于。

相关内容