看完之后https://unix.stackexchange.com/a/222376/246754rpm 如何确保 uid/gid 不会相互冲突?
我正在寻找的类似于https://github.com/NixOS/nixpkgs/blob/68196a61c26748d3e53a6803de3d2f8c69f27831/nixos/modules/config/users-groups.nix#L640-L642(用于比较)
我必须构建一个虚拟机并使用 /etc/passwd 来查看获取的 uid。它不能完全满足我的需求,因为 174 不是他们的默认值。同样,nix 还为 root 保留一些 uid,例如 0https://github.com/NixOS/nixpkgs/commit/dba1d48b7897c49e5df9430c6b60f17e03ec361e我可以在不构建虚拟机的情况下查看列表,也可以使用 cli 进行查询。他们还有一个 id 分配器,所以我不必管理它。
这是重建 /etc/passwd 时运行的脚本
PS:我已经标记了 rpm-spec,因为链接的问题是关于 RPM 的,但问题更有可能发生在其他工具上,如 apt、yum、pacman、brew...如果您了解其他系统,请创建另一个问题和答案它(保持问答风格)或评论
答案1
通常我们用名称来指代用户/组,而不是他们的 UID/GID。
拥有自己的用户的包将使用标签调用useradd
or 。这将创建一个新用户,其未使用的 UID/GID 在系统用户范围内(通常为 100-999)。adduser
--system
例如,我使用的是 debian 系统,并且它存在于/var/lib/dpkg/info/openssh-server.postinst
(Debian 相当于您所描述的 RPM-SPEC scriptlet)中。
if ! getent passwd sshd >/dev/null; then
adduser --quiet --system --no-create-home --home /run/sshd --shell /usr/sbin/nologin sshd
fi
OpenSSH 永远不会硬编码 user 的 UID/GID sshd
,它会查找该名称。