Debian软件包应如何创建用户帐户?


33

程序包qqq.deb安装qqq应从uqqq用户帐户运行的程序。该软件包包括qqq程序,qqq.conf配置文件和/etc/init.d/qqq初始化脚本。

软件包应如何管理用户的创建uqqq?是否有任何最佳做法或官方准则?

  1. 只需uqqq在postinst中自动创建用户;
  2. 第一次从/etc/init.d/qqq脚本启动时自动创建用户;
  3. qqq程序第一次启动时自动创建用户(不带参数)
  4. 请勿创建任何用户帐户,除非管理员明确创建了该用户(例如,使用qqq --create-user),否则请拒绝启动该帐户;
  5. 不要创建任何用户帐户,默认情况下从root用户不安全地运行;
  6. 在postinst,init.d脚本或qqq本身中交互地询问是否创建用户。

软件包在卸载后是否应删除用户帐户?


7
获得此问题的最简单方法是查看官方Debian软件包的安装前/安装后脚本。只需grep adduser /var/lib/dpkg/info/*.postinst在任何基于Debian的系统上运行即可获得许多示例。
jofel 2012年

adduser使用时,它也需要依靠封装。请参阅:lintian.debian.org/tags/...
Lekensteyn

Answers:


22

与已经提到的《 Debian策略手册》相比,Debian Wiki提供了一些更全面,更具体的指南。请参阅AccountHandlingInMaintainerScripts

如果使用--system选项调用,则adduser程序将执行正确的操作。因此,通常只需要致电

adduser --system $ USERNAME

在您的postinst中创建禁用登录的帐户,一个主要的nogroup组和一个位于/ home下的主目录。如果需要其他选项,请根据需要添加它们。

通常通常不需要与getent进行交叉检查,因为adduser --system通常会做正确的事情。如果不是,请报告针对adduser的错误,以使维护脚本保持简单。

它提供的有关删除帐户的建议尚无定论。但是,我会指出,有关软呢帽相应建议并不明确。

不要删除用户或组 我们绝不会删除程序包创建的用户或组。没有理智的方法来检查那些用户/组所拥有的文件是否被遗留(即使存在,我们将如何处理它们?),而将那些拥有现在指向不存在的用户/组的所有权留给那些文件可能会导致安全问题以后创建与语义无关的用户/组并重用UID / GID时。同样,在某些设置中,删除用户/组可能是不可能的,也可能是不希望的(例如,在使用共享的远程用户/组数据库时)。清理未使用的用户/组将留给系统管理员,如果他们愿意的话。


12

作为安装软件包的管理员,我希望我的软件包可以在prein或postinst之前自动创建它们所需的用户,以便可以在运行程序之前制作需要用户拥有的任何文件。

您的程序仅在需要(例如绑定到特权端口)时才应以root身份运行,并且理想情况下,它应该在完成所需的root任务后放弃其特权。

您可以使用来查看其他(已安装)软件包如何处理此问题

grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst

并阅读列出的文件(大多数文件有超过一行的选项)。

奇怪的是,除了一个创建用户的已安装软件包之外,所有安装的软件包都adduser用于添加用户,但是adduser软件包不是必需的软件包,因此必须依赖于此软件包来构建您的软件包。该useradd程序由libuuid1软件包使用,并且是该passwd软件包的一部分,该软件包是必需的软件包。


1
太糟糕了,请检查生成预安装脚本的正确方法,而不是手动修改它们。
LtWorf

这种--quiet方法似乎很受欢迎
vidstige '17

6

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为/etc/passwd' or / etc / group 的用户或组ID ,或者安排您的软件包使用正确的名称创建用户或组id(如果可能的话,最好使用adduser') in itspreinst'或 postinst'. (Doing it in thepostinst',否则在'adduser'包上需要先依赖。)

注:在debian-devel的名单是相当活跃和答案这样的问题(虽然这例子是2003年)。


3
所以,简单的简化的答案是“使用adduserpostinst”。
六。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.