本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
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
.conf
格式。
当需要明确的将某部分(part)配置提取出来,以方便用户专门针对这部分进行修改的时候,
应该使用第二种命名格式。package
-part
.conf
对于不同目录下的同名配置文件,
仅以优先级最高的目录中的那一个为准。
具体说来就是:
/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
空行和以 # 开头的行 都将被忽略。
"名称"字段指定了用户或组的名字。 仅可包含常规ASCII字符( a-z A-Z 0-9 _ - ) 并且首字符只能是字母或下划线, 长度必须是 1-31 个字符。
强烈建议使用不易发生冲突的名字, 例如避免使用常见的名字并且 在名字前加上"_"前缀。
对于 m
来说,
此字段是将要被添加到指定组中的用户名。
对于 r
来说,
此字段必须被设为 "-
"
对于 u
与 g
来说,此字段是一个32位十进制UID/GID数字。
不要使用 65535 或 4294967295 两个值,因为这是两个有特殊含义的占位符。
设为 "-
" 表示使用自动分配的UID/GID数字(强烈建议使用自动分配,
除非必须使用精确的 UID 或 GID 值)。
若设为一个绝对路径,
则表示使用此路径的属主/属组。
这可用于根据已有文件的
属主/属组(例如带有SUID/SGID位二进制程序)
创建用户与组。
还可以使用 "
"
语法来创建 UID 与 GID 值不同的用户与组。指定 GID 值的组必须首先创建或者已经存在。
这个语法中的 UID 可还以设为 "uid
:gid
-
" 表示自动分配。
对于 m
来说,
此字段是将要吸纳新用户的组名称。
对于 r
来说,
此字段必须被设为
"FROM-TO
"
格式的两个十进制UID/GID数字,
以表示一个范围。
对于 u
来说,
表示新建用户的家目录,若省略则表示使用默认的"/"(根目录)。
对于其他非 u
类型,
必须忽略(或设为 "-
")。
除非软件明确需要,否则建议不要为系统用户设置不必要的家目录。
用户的登录 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 将不会改变任何现有状态。 所以,一般不应该修改发行商的默认设置, 除非你想禁止创建某些用户或组。