修复 Linux 用户和用户组完整性

> Don't confuse things that need action with those that take care of themselves.

Linux 中安装一些软件的时候,会自动在系统中创建相应的用户。比如 mysql、各种 display manager,以及我用来在家里实现 DLNA 视频点播的 minidlna 等等。然而当卸载这些软件的时候,当初自动创建的用户可能还留存在系统中,需要我们手动删除。这几天我就碰到了这样的例子。

连续几个月,我一直在开机日志中看到一句错误提示:

1
2
4月 12 23:00:05 raawaa-desktop-arch systemd[1]: Starting Verify integrity of password and group files...
4月 12 23:00:05 raawaa-desktop-arch systemd[1]: Failed to start Verify integrity of password and group files.

google 了一番,知道了错误是 shadow.service 这个服务引起的,通过 systemctl status shadow.service 命令查看了一下该服务状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
● shadow.service - Verify integrity of password and group files
Loaded: loaded (/usr/lib/systemd/system/shadow.service; static; vendor preset: disabled)
Active: failed (Result: exit-code) since 二 2016-04-12 23:00:05 CST; 17min ago
Process: 377 ExecStart=/usr/bin/pwck -r (code=exited, status=2)
Main PID: 377 (code=exited, status=2)

4月 12 23:00:05 raawaa-desktop-arch systemd[1]: Starting Verify integrity of password and group files...
4月 12 23:00:05 raawaa-desktop-arch pwck[377]: user 'lightdm': directory '/var/lib/lightdm' does not exist
4月 12 23:00:05 raawaa-desktop-arch pwck[377]: pwck: no changes
4月 12 23:00:05 raawaa-desktop-arch systemd[1]: shadow.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
4月 12 23:00:05 raawaa-desktop-arch systemd[1]: Failed to start Verify integrity of password and group files.
4月 12 23:00:05 raawaa-desktop-arch systemd[1]: shadow.service: Unit entered failed state.
4月 12 23:00:05 raawaa-desktop-arch systemd[1]: shadow.service: Failed with result 'exit-code'.

从以上信息可以发现,是 lightdm 这个用户出错了,/etc/passwd 文件中存在这个用户,但是相应的用户文件夹(/var/lib/lightdm)却不存在于文件系统中。回忆当初,我好像确实安装过 lightdm 作为我的 display manager,但之后又把它卸载了。看来卸载过程自动删除了 /var/lib/lightdm 文件夹,却没有连带一起删除 /etc/passwd 中所登记的 lightdm 这个用户。解决方法也很简单,直接将该用户删除。

1
2
3
4
# 删除用户 lightdm,-r 选项确保用户文件夹连带删除
$ sudo userdel -r lightdm
# 重新启动 shadow 服务
$ systemctl start shadow.service

如此一来相信今后不会再出现类似的开机错误信息了。平时也可以通过 pwckgrpck 这两个命令来诊断修复用户和用户组相关的配置文件,在此一并记下备忘。

另外,谁能告诉我 shadow.service 这个 systemd 服务究竟是干嘛的,不胜感激。