Linux 发行版中预定义的组 ID?

Linux 发行版中预定义的组 ID?

为了通过 ACL 成功实现 w/r 访问带有 ext4 fs 的外部存储我需要为存储上的文件分配默认组 ID。

LSB_5.0.0说:

This specification makes no attempt to numerically assign user or group
identity numbers, with the exception that both the User ID and Group ID
for the user root shall be equal to 0.

Linux厂商的耻辱!

主要 Linux 发行版之间是否有关于组 id 的约定?

在 Debian 策略中,我发现文件base-passwd中的包定义了默认组值/usr/share/base-passwd/group.master。其中,这些组看起来很适合 ACL 默认值:

tape:*:26:
backup:*:34:
operator:*:37:
plugdev:*:46:
staff:*:50:
users:*:100:
nogroup:*:65534:

永远不会与 Suse/RH/Slackware 发行版策略文档一起使用...如果 FreeBSD/OpenBSD/MacOS 与 Linux 发行版共享约定,也很有趣。

更新我将 MacOS X ( dscacheutil -q group) 与 Debian 进行比较,只有少数组 id 匹配:

sys:*:3:

更新2我比较了 FreeBSD 和 Debian/etc/group文件,只有 2 个匹配:

daemon:*:1:
sys:*:3:

答案1

正如您所发现的,用户名-uid 和组名-gid 映射没有标准。即使不属于基本系统的常用系统帐户在运行完全相同操作系统的系统上也可能具有不同的 uid 或 gid;这取决于软件包的安装顺序。这些软件包通常只getent passwd username || useradd username在安装过程中使用。

因此,最好的选择是在系统范围之外选择您自己的 uids 和 gids。

在某些系统上,会有一个配置文件,例如/etc/login.defs包含以下条目:

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999

选择非 SYS 范围内的任何内容。一种可能性是使用范围 59001..59999 进行站点范围的管理。然后,您可以编辑该login.defs文件以将 UID_MAX 和 GID_MAX 设置为 59000,以避免任何冲突。

答案2

没有关于组 ID 的约定。授权配置通常被认为是本地策略的一部分,通常与本地/etc/passwd或文件中的条目无关/etc/group

用于授权决策的组通常来自集中式目录(LDAP、AD 等),并且因组织而异,并且与所使用的发行版(或操作系统)没有关系。

答案3

我在 Debian、Ubuntu、RedHat、Fedora、CentOS、Suse、FreeBSD、OpenBSD、NetBSD、MacOSX、Solaris 上发现该sys组共享 ID 。3

没有其他组名称共享相同的 ID。即使在某些系统上root具有 id 的组实际上也是.在Linux 上通常是,但在 NetBSD 上是。不同的发行版对该组有不同的人类可读名称,例如:(Debian)、(RedHat)、(FreeBSD)、(MacOS)。0wheelnogroup6553432766nogroupnfsnobodynobodynobody

POSIX、SUSv4、LSB 等规范未定义组 ID。

sys在 Debian 文档中标记为已过时。

使用sys组、setgid位和 ACL,可以使 ext4 卷在主机之间移动,而不会在以下情况下发生权限冲突:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chgmod -R g+s /mnt/data/dir
$ sudo fsetacl -R -m g:sys:rwx /mnt/data/dir
$ sudo fsetacl -R -d -m g:sys:rwx /mnt/data/dir

相关内容