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 |
目录
摘要
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。
版权
此作品根据知识共享署名-相同方式共享 3.0 未本地化版本许可协议授权。要查看此许可协议的副本,请访问 https://creativecommons.org/licenses/by-sa/3.0/.