我周围有很多搭载 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/group
base-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-resolve,systemd-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
,然后重试命令多于。