Linux 在启动过程中何时/如何创建系统用户?

Linux 在启动过程中何时/如何创建系统用户?

我正在尝试从 NFS 安装的根文件系统(Debian 10)中调出电路板。启动时通过串口报错:

[FAILED] Failed to start Create System Users.
See 'systemctl status systemd-sysusers.service' for details.

这是打印出来的唯一错误消息。我无法登录(可能是因为尚未创建用户),因此无法运行任何命令来检查详细信息。

根文件系统应该是好的,因为当它位于 SD 卡中时,主板可以从它启动。

那么Linux启动时“创建系统用户”这个过程是如何执行的呢?造成此错误的原因是什么?

答案1

在启动过程中,systemd 会初始化所有已配置和启用的服务。它根据明确规定的要求以及其他一些指标对它们进行排序。

对于您的情况,Debian 包含带有 systemd-sysusers 服务的 systemd,该服务在文件中定义:/usr/lib/systemd/system/systemd-users.service

该服务的默认内容应该类似于:

#  SPDX-License-Identifier: LGPL-2.1-or-later                                                                                                                                         #                                                                                                                                                                                     #  This file is part of systemd.                                                                                                                                                      #                                                                                                                                                                                     #  systemd is free software; you can redistribute it and/or modify it                                                                                                                 #  under the terms of the GNU Lesser General Public License as published by                                                                                                           #  the Free Software Foundation; either version 2.1 of the License, or                                                                                                                #  (at your option) any later version.

[Unit]
Description=Create System Users
Documentation=man:sysusers.d(5) man:systemd-sysusers.service(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service
Before=sysinit.target shutdown.target systemd-update-done.service
ConditionNeedsUpdate=/etc

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=systemd-sysusers
TimeoutSec=90s

# Optionally, pick up a root password and shell for the root user from a
# credential passed to the service manager. This is useful for importing this
# data from nspawn's --set-credential= switch.
LoadCredential=passwd.hashed-password.root
LoadCredential=passwd.plaintext-password.root
LoadCredential=passwd.shell.root

ExecStart行告诉 systemd 为此服务运行什么。在这种情况下它将运行/usr/bin/systemd-sysusers没有参数。该实用程序的一些输出可以在/var/日志/消息。就我而言(CentOS 9 Stream),成功运行输出:

Aug 15 10:11:26 MY-VM systemd-sysusers[257]: Suggested group ID 65534 for nobody already used.
Aug 15 10:11:26 MY-VM systemd-sysusers[257]: Creating group 'nobody' with GID 999.
Aug 15 10:11:26 MY-VM systemd-sysusers[257]: Creating group 'users' with GID 100.
Aug 15 10:11:26 MY-VM systemd-sysusers[257]: Creating group 'dbus' with GID 996.
Aug 15 10:11:26 MY-VM systemd-sysusers[257]: Creating user 'dbus' (System Message Bus) with UID 996 and GID 996.
Aug 15 10:11:28 MY-VM systemd[1]: systemd-sysusers.service: Deactivated successfully.

当我搜索您遇到的错误时,列出的最可能的原因是:无法写入根驱动器/分区(磁盘已满、权限、只读安装等)以及以下一项或多项中的配置错误或语法错误:/etc/passwd、/etc/shadow、/etc/gshadow、/etc/group

请注意,systemd 服务单元文件还列出了要阅读其文档的手册页。

相关内容