Vi.*_*Vi. 43 debian package-management
该软件包qqq.deb安装qqq应从uqqq用户帐户运行的程序。该包由qqq程序、qqq.conf配置文件和/etc/init.d/qqqinitscript 组成。
包应该如何管理用户的创建uqqq?是否有任何最佳实践或官方指南?
uqqq在 postinst 中自动创建用户;/etc/init.d/qqq脚本启动时自动创建用户;qqq程序第一次启动时自动创建用户(不带参数)qqq --create-user),否则拒绝启动;qqq自身中交互询问是否创建用户。卸载时,软件包是否应该删除用户帐户?
小智 29
Debian wiki 有一些比已经提到的 Debian Policy Manual 更全面和更具体的指南。请参阅AccountHandlingInMaintainerScripts:
如果使用 --system 选项调用 adduser 程序会做正确的事情。因此通常只需要调用
adduser --system $USERNAME
在您的 postinst 中创建一个禁用登录的帐户,一个主要组 nogroup 和一个 /home 下的主目录。如果您需要其他选项,请根据需要添加它们。
通常不需要与 getent 交叉检查帐户是否已经存在,因为 adduser --system 通常会做正确的事情。如果没有,请报告针对 adduser 的错误,以保持您的维护者脚本简单。
它提供的关于删除帐户的建议是不确定的。但是,我会注意到,对于 Fedora的相应建议并不含糊。
不要删除用户或组 我们从不删除由包创建的用户或组。没有理智的方法来检查这些用户/组拥有的文件是否被遗留下来(即使有,我们会用它们做什么?)并且留下那些指向现在不存在的用户/组的所有权可能会导致安全问题当稍后创建语义无关的用户/组并重用 UID/GID 时。此外,在某些设置中,删除用户/组可能是不可能的或/或不可取的(例如,当使用共享的远程用户/组数据库时)。未使用的用户/组的清理留给系统管理员处理,如果他们愿意的话。
Der*_*rfK 15
作为安装软件包的管理员,我希望我的软件包能够在 pre 或 postinst 中自动创建他们需要的用户,以便在程序运行之前创建用户所需的任何文件。
您的程序应该只在需要时以 root 身份运行(例如绑定到特权端口),并且理想情况下应该在完成需要 root 用户的操作后放弃其特权。
您可以通过使用查看其他(已安装的)软件包如何处理此问题
grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst
Run Code Online (Sandbox Code Playgroud)
并阅读列出的文件(大多数需要多于一行的选项)。
奇怪的是,除了我安装的用于创建用户的软件包之一之外,所有其他软件包都adduser用于添加用户,但 adduser 软件包不是必需的软件包,因此您的软件包必须构建为依赖于它。该useradd程序由 libuuid1 包使用,并且是passwd必需包的包的一部分。
小智 9
第10.9节。Debian 政策手册中的权限和所有者具有您正在寻找的内容(来自“版本 3.9.5.0,2013-10-28”):
如果您需要为您的包创建新用户或组,有两种可能性。首先,您可能需要使二进制包中的某些文件归该用户或组所有,或者您可能需要将用户或组 ID(而不仅仅是名称)编译到二进制文件中(尽管后者应该避免,如果可能,因为在这种情况下,您需要一个静态分配的 ID)。
如果您需要静态分配的 id,您必须从
base-passwd' maintainer, and must not release the package until you have been allocated one. Once you have been allocated one you must either make the package depend on a version of thebase-passwd' 包中请求一个用户或组 id ,该 id 存在于/etc/passwd' or/etc/group' 中,或者安排您的包使用正确的用户或组创建用户或组本身id(如果可能,最好使用adduser') in itspreinst' 或postinst'. (Doing it in thepostinst',否则`adduser' 包将需要预先依赖。)
注:在debian-devel的名单是相当活跃和答案这样的问题太(虽然这例子是2003年)。
| 归档时间: |
|
| 查看次数: |
22096 次 |
| 最近记录: |