该软件包安装应从用户帐户运行的qqq.deb
程序。该软件包由程序、配置文件和初始化脚本组成。qqq
uqqq
qqq
qqq.conf
/etc/init.d/qqq
包应该如何管理用户的创建uqqq
?有这方面的最佳实践或官方指南吗?
uqqq
只需在 postinst 中自动创建用户即可;- 首次启动时从脚本自动创建用户
/etc/init.d/qqq
; - 程序首次启动时自动创建用户
qqq
(不带参数) - 不要创建任何用户帐户,除非管理员明确创建用户(例如使用
qqq --create-user
),否则拒绝启动; - 不要创建任何用户帐户,默认从 root 运行不安全;
- 在 postinst、init.d 脚本或其
qqq
本身中交互式询问是否创建用户。
软件包卸载时是否应该删除用户帐户?
答案1
Debian wiki 有一些比已经提到的 Debian 政策手册更全面和具体的指导。看维护脚本中的帐户处理:
如果使用 --system 选项调用,adduser 程序会执行正确的操作。因此通常只需要调用
添加用户--系统$用户名
在您的 postinst 中创建禁用登录的帐户、nogroup 的主要组和 /home 下的主目录。如果您需要其他选项,请根据需要添加它们。
通常不需要与 getent 交叉检查帐户是否已存在,因为 adduser --system 通常会做正确的事情。如果没有,请报告针对 adduser 的错误,以保持维护者脚本简单。
它提供的有关删除帐户的建议尚无定论。不过,我要指出的是,Fedora 的相应建议并不含糊其辞。
不要删除用户或组 我们永远不会删除由包创建的用户或组。没有明智的方法来检查这些用户/组拥有的文件是否被遗留(即使有,我们会如何处理它们?)并且将那些所有权指向现在不存在的用户/组的文件留下可能会导致安全问题当稍后创建语义上不相关的用户/组并重用 UID/GID 时。此外,在某些设置中,删除用户/组可能是不可能的或/也不可取的(例如,当使用共享的远程用户/组数据库时)。清理未使用的用户/组将由系统管理员负责(如果他们愿意的话)。
答案2
作为安装软件包的管理员,我希望我的软件包能够在安装前或安装后自动创建他们所需的用户,以便在程序运行之前创建需要由用户拥有的任何文件。
您的程序应该仅在需要时以 root 身份运行(例如绑定到特权端口),并且理想情况下,在完成需要 root 的操作后应放弃其特权。
您可以使用以下命令查看其他(已安装)软件包如何处理此问题
grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst
并读取列出的文件(大多数需要不止一行选项)。
奇怪的是,我安装的所有创建用户的软件包(除了其中一个)都用于adduser
添加用户,但 adduser 软件包不是必需的软件包,因此必须构建您的软件包才能依赖它。该useradd
程序由 libuuid1 包使用,并且是passwd
必需包的一部分。
答案3
部分10.9。权限和所有者在里面Debian 政策手册有您正在寻找的内容(来自“版本 3.9.5.0,2013-10-28”):
如果您需要为您的包创建新用户或组,有两种可能性。首先,您可能需要使二进制包中的某些文件归该用户或组所有,或者您可能需要将用户或组 ID(而不仅仅是名称)编译到二进制文件中(尽管在以下情况下应该避免后者)可能,因为在这种情况下您需要一个静态分配的 id)。
如果您需要静态分配的 id,则必须从 base-passwd' 软件包中请求用户或组 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 the
其 id 存在于/etc/passwd' or
/etc/group' 中,或者安排您的软件包使用正确的值创建用户或组本身id(如果可能的话,最好使用adduser') in its
preinst' 或 postinst',否则需要对 `adduser' 包进行预依赖。)postinst'. (Doing it in the
笔记:debian-devel 列表非常活跃并回答了此类问题也(虽然这个例子是 2003 年的)。