我手动安装了一个名为 Gate One 的服务/opt
。我想加强它的安全性,所以我想创建一个系统帐户供它使用,因为它具有最少的必要权限等等。
但是,当我运行 时adduser --system gateone
,它创建了一个主目录,而这并不是我想要的。因此,我运行adduser --system --home-dir /opt/gateone gateone
,因为我看到一些系统帐户设置了与它们相关的主目录。但是,这会产生登录 shell,/bin/sh
而不是/bin/false
,这是它第一次这样做时(当我没有指定主目录时)。我现在有点困惑,不知道应该将这些字段设置为什么。
总结:在 *NIX 操作系统上创建系统帐户时,设置主目录、登录 shell 和其他相关内容的最佳做法是什么?为什么?
注意:如果重要的话,我正在使用 Ubuntu 13.04 Raring,因为 IIRCadduser
在不同的发行版之间可能会有相当大的差异。
答案1
实际上没有特定的最佳实践,除了除非需要 shell,否则 shell 应该是 /bin/false;除非!
用户需要登录,否则密码哈希应该是;应该给出一个描述性名称;/dev/null
如果应用程序不需要有效的主目录,则应该将主目录设置为或类似。用户应该有自己的组,最好在系统 ID 范围内;例如,如果它不需要 root 的主 GID,就不要给它一个,如果没有特定要求,当然不要给它用户。一切都取决于情况。指定您关心的所有内容(请参阅查看man adduser
所有可用选项)。
答案2
如果您尝试安装应用程序,最好的选择是为该系统制作一个包并遵循该系统的管理指南(指南中写了如何安装、在哪里安装、如何将应用程序与系统集成等等)。如果您使用的是 Ubuntu,您可以遵循 Ubuntu/Debian 指南。一开始可能会很耗时,但如果您经常部署它(经常升级)或在多台机器上部署它,它会对您有所帮助。
adduser
命令有开关来设置你要求的内容。使用adduser --help
。基本上你可以写adduser --system --home /var/lib/my_app --shell /bin/false --disable-login --disable-password
。请注意,大多数系统服务在 /var/lib/ 中都有主目录,或者如果你没有为系统提供软件包,它可能应该像你在/opt/<service>