sysusers.d 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

sysusers.d — 声明需要分配的系统用户与组

大纲

/etc/sysusers.d/*.conf

/run/sysusers.d/*.conf

/usr/lib/sysusers.d/*.conf

描述

systemd-sysusers 工具根据 sysusers.d 目录中的配置文件的指引, 在安装软件包或系统启动时创建系统用户与组,以及将用户添加到组之中。 因为 systemd-sysusers 工具直接操作 /etc/passwd/etc/group 文件, 所以仅可用于创建系统用户与组, 而不可用于创建非系统用户或组(比如基于 NIS 或 LDAP 的用户数据库)。

配置目录及其优先级

配置文件的名称必须符合 package.confpackage-part.conf 格式。 当需要明确的将某部分(part)配置提取出来,以方便用户专门针对这部分进行修改的时候, 应该使用第二种命名格式。

对于不同目录下的同名配置文件, 仅以优先级最高的目录中的那一个为准。 具体说来就是: /etc/ 的优先级最高、 /run/ 的优先级居中、 /usr/lib/ 的优先级最低。 软件包应该将自带的配置文件安装在 /usr/lib/ 目录中, 而 /etc/ 目录仅供系统管理员使用。 所有的配置文件, 无论其位于哪个目录中, 都统一按照文件名的字典顺序处理。 如果在多个配置文件中设置了同一个用户或组, 那么仅以文件名最靠前(字典顺序)的那一个为准, 其他针对同一个用户或组的配置项将会作为警告信息记录到错误日志中。

如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个配置文件, 那么最佳做法是在 /etc/ 目录中 创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。

配置文件格式

配置文件的格式是每行对应一个用户或组,包含如下字段: 类型, 名称, ID, 简要描述, 家目录, 登录shell

#Type Name     ID             GECOS                 家目录         Shell
u     httpd    404            "HTTP User"
u     authd    /usr/bin/authd "Authorization user"
u     postgres -              "Postgresql Database" /var/lib/pgsql /usr/libexec/postgresdb
g     input    -              -
m     authd    input
u     root     0              "Superuser"           /root          /bin/zsh

空行和以 # 开头的行 都将被忽略。

类型(Type)

"类型"字段仅包含一个单独的字母。 可以识别的类型如下:

u

按照"名称"字段的值,创建一个系统用户以及一个同名的组, 并将此用户的主组设为此同名组。 此账户创建后将处于禁用状态, 因此用户也将被设为禁止登录。

g

按照"名称"字段的值创建一个系统组, 并且不设组密码。注意,前面的 u 隐含的会创建一个与用户名称相同的组, 并且不设组密码。

m

将"名称"字段指定的用户添加到"ID"字段指定的组里。 如果指定的用户或组不存在, 则自动创建它。

r

向 UID/GID 分配池中添加一段可分配号段。 若不存在此行, 则使用编译时的默认值。 注意, 为了尽量确保同名的用户/组拥有相同的UID/GID, UID与GID都是 从同一个号段池子中分配的。

名称(Name)

"名称"字段指定了用户或组的名字。 仅可包含常规ASCII字符( a-z A-Z 0-9 _ - ) 并且首字符只能是字母或下划线, 长度必须是 1-31 个字符。

强烈建议使用不易发生冲突的名字, 例如避免使用常见的名字并且 在名字前加上"_"前缀。

对于 m 来说, 此字段是将要被添加到指定组中的用户名。

对于 r来说, 此字段必须被设为 "-"

ID

对于 ug 来说,此字段是一个32位十进制UID/GID数字。 不要使用 65535 或 4294967295 两个值,因为这是两个有特殊含义的占位符。 设为 "-" 表示使用自动分配的UID/GID数字(强烈建议使用自动分配, 除非必须使用精确的 UID 或 GID 值)。 若设为一个绝对路径, 则表示使用此路径的属主/属组。 这可用于根据已有文件的 属主/属组(例如带有SUID/SGID位二进制程序) 创建用户与组。 还可以使用 "uid:gid" 语法来创建 UID 与 GID 值不同的用户与组。指定 GID 值的组必须首先创建或者已经存在。 这个语法中的 UID 可还以设为 "-" 表示自动分配。

对于 m 来说, 此字段是将要吸纳新用户的组名称。

对于 r 来说, 此字段必须被设为 "FROM-TO" 格式的两个十进制UID/GID数字, 以表示一个范围。

简要描述(GECOS)

对于 u 来说,表示对新建用户的简要描述, 必须用引号界定,且不可包含冒号(:)。

对于其他非 u 类型, 必须忽略(或设为 "-")。

家目录(Home)

对于 u 来说, 表示新建用户的家目录,若省略则表示使用默认的"/"(根目录)。

对于其他非 u 类型, 必须忽略(或设为 "-")。 除非软件明确需要,否则建议不要为系统用户设置不必要的家目录。

Shell

用户的登录 shell 。对于 UID≠0 的普通用户来说,其默认值是 /sbin/nologin ;而对于 UID=0 的根用户来说, 其默认值是 /bin/sh

对于其他非 u 类型, 必须忽略(或设为 "-")。 除非软件明确需要,否则不建议设为 /sbin/nologin 之外的其他值。

替换符

可以在 "Name", "ID", "GECOS", "家目录", "Shell" 字段中使用替换符。 不可识别的替换符将会被视为配置错误。 可识别的替换符如下:

表 1. 可识别的替换符

替换符含义
"%b"系统的"Boot ID"字符串。参见 random(4) 手册。
"%H"系统的主机名(hostname)
"%m"系统的"Machine ID"字符串。参见 machine-id(5) 手册。
"%T"临时文件目录。也就是 /tmp 或 "$TMPDIR", "$TEMP", "$TMP" 之一(若已设置)
"%v"内核版本(uname -r 的输出)
"%V"存放大体积临时文件以及持久临时文件的目录。也就是 /var/tmp 或 "$TMPDIR", "$TEMP", "$TMP" 之一(若已设置)
"%%"百分号自身(%)。使用"%%"表示一个真正的"%"字符。

幂等性

所谓"幂等性"是指任意多次执行所产生的影响均与一次执行的影响相同。 也就是说如果被操作的用户或组已经存在、或者用户已经是指定组的成员, 那么 systemd-sysusers 将不会改变任何现有状态。 所以,一般不应该修改发行商的默认设置, 除非你想禁止创建某些用户或组。

参见

systemd(1), systemd-sysusers(8)