GLEP 27: Portage 管理 UID/GID

作者 Mike Frysinger <[email protected]>
类型 标准跟踪
状态 延期
版本 1
创建 2004-05-29
上次修改 2017-10-13
发布历史 2004-05-29, 2004-07-20
GLEP 源码 glep-0027.rst

状态

此 GLEP 于 2004-06-14 批准通过。

未完成实现。由 GLEP 编辑 Michał Górny 于 2017-10-13 标记为延期。

摘要

Portage 系统中当前的用户和组处理缺乏策略和完善的 API。我们需要一个对开发者和最终用户都简单的 API。

动机

目前,策略由各个 ebuild 维护者自行决定,他们选择用户名、ID、shell 设置等... 并在适当的时间以适当的方式将它们添加到适当的位置。当发现添加用户经常出现逻辑错误时,enewuser 和 enewgroup 函数被设计出来以消除所有细节。但是,这些函数仍然存在一些根本问题。首先,没有本地定制。其次,维护者仍然不正确地使用这些函数(二进制软件包到目前为止受到的影响最大)。第三,这些函数在非 Linux 系统上不可移植,并且对交叉编译或其他奇特的设置不友好。还有其他原因,但这些列出的几点已经足以证明需要改变。

规范

Portage 结构

定义账户

需要向 rsync 树添加新目录以存储定义新账户默认值的配置文件。它们将按配置文件基础存储,这样子配置文件可以轻松地覆盖父配置文件。默认位置将是基本配置文件,因为所有其他配置文件都继承自它。

portage/profiles/base/accounts/
    user/<username>
    group/<groupname>
    accounts

这些文件以相应的用户名/组名命名,因为它们需要在其各自的域中唯一。例如,详细说明 ntp 用户的文件将位于 accounts/user/ntp。每个用户名文件将详细说明每个用户的必要信息。在一种系统类(Linux)上存在而在其他系统(*BSD)上不存在的某些账户功能可以在其各自的子配置文件中重新定义。每个组名都遵循类似的准则。accounts 文件将用于描述全局账户默认值,例如“有效系统”ID 的默认范围。例如,如果 UID 123 已经在系统上使用,但 ntp 用户默认设置为“123”,则显然我们不能只是复制它。因此,我们将根据此处定义的范围选择系统上下一个可用的 UID。

本地覆盖

遵循本地自定义 Portage 文件在 /etc/portage 中找到的久经考验的风格,这个新系统将遵循相同的风格。用户可以在 /etc/portage/profile/accounts/ 中设置自己的目录层次结构,模仿 Portage 树中找到的层次结构。当 Portage 尝试添加新用户时,它将首先检查 /etc/portage/profile/accounts/user/<username>。如果不存在,它将简单地使用 Portage 树中的默认定义。

开发者接口

EUSERS + EGROUPS

希望向系统添加用户或组的 Ebuild 必须设置这些变量。它们都是以空格分隔的列表,告诉 Portage 在出现 Ebuild 之前必须向系统添加哪些用户/组。Ebuild 的维护者可以假设他们在 Ebuild 中列出的用户/组在 Ebuild 中的函数(pkg_setup、src_install 等...)运行之前就已经存在。

定义账户

任何开发者都可以自由地在他们的 Ebuild 中添加用户/组,前提是他们创建必要的账户定义文件。

用户界面

users-update

运行此脚本时,将显示所有由 Portage 添加到系统的用户/组,以及添加这些用户/组的软件包。在这里,他们可以删除当前已安装的软件包不再需要的账户(并可以选择运行一个脚本,该脚本将尝试查找系统上可能仍由该账户拥有的所有文件)。

FEATURES=noautoaccts

这是为那些永远不希望 Portage 为他们创建账户的人准备的。当 Portage 需要向系统添加账户,但 "noautoaccts" 位于 FEATURES 中时,Portage 将中止并显示一条消息,指示用户添加 EUSERS 和 EGROUPS 中列出的账户。这显然是在出现软件包之前必须执行的一步。

基本原理

开发者不再需要担心如何正确地将用户/组添加到系统,以及担心他们的代码是否在所有系统(LDAP 与本地 shadow 与交叉编译与等...)上都能正常工作。用户可以轻松地覆盖 Gentoo 之前指示的默认值。默认的 passwd 和 group 数据库可以再次缩减到最少的账户。

向后兼容性

以与其他 Portage 推出类似的方式处理。使用新账户系统时,在 Ebuild 中添加对所需 Portage 版本的 DEPEND。