哪个用户帐户应该用于 WSGIDaemonProcess?

哪个用户帐户应该用于 WSGIDaemonProcess?

我使用 Apache2 和 mod_wsgi 部署了一些 Django 站点。配置 WSGIDaemonProcess 指令时,大多数教程(包括官方文档)建议以代码所在主目录的用户身份运行 WSGI 进程。例如:

WSGIScriptAlias / /home/joe/sites/example.com/mod_wsgi-handler.wsgi
WSGIDaemonProcess example.com user=joe group=joe processes=2 threads=25

但是,我想知道以开发代码的同一用户(及其附带权限)运行 wsgi 守护进程是否真的明智。我是否应该设置一个服务帐户,其唯一权限是只读访问代码,以便获得更好的安全性?还是我的担忧有些多余?

答案1

尽可能使用非特权帐户运行服务是一种很好的一般做法。对于需要 root 专属资源(端口 < 1024、访问某些文件)的进程,进程应获取这些资源,然后立即放弃特权。

还有一些其他提示。从您所说的“以开发代码的同一用户身份运行...进程”听起来有点像开发人员在生产主机上编写代码。您是否使用某种形式的源代码变更控制系统(例如 git、svn)?开发人员应该在仅用于开发的机器上编写代码,并提交到共享存储库,您可以从中发布稳定的版本。在集成测试后从存储库部署代码,最好将其打包以供安装(DEB、RPM、EGG 等)。这将减少生产过程中的错误,使发布可重复,避免主机死机时的代码丢失,等等。

答案2

你最好执行 chown www-user:www-data -R dirname 你的代码(或 apache:apache)。你电脑上最重要的数据是你的,用户数据,因此将服务移离您的用户更好。

答案3

您之所以发现用户应该是主目录的用户,是因为在许多系统上,主目录具有“drwx------”权限,这意味着只有用户可以读取其中的内容。因此,如果您要将内容放在用户的主目录中,您基本上别无选择。

您还会发现有人建议最好不要将其放在主目录中,而是将其放在其他 Web 服务器内容所在的位置,但不要放在任何虚拟服务器或主服务器的 DocumentRoot 下。这样,目录限制将不适用,Apache 用户可以读取它。

总的来说,最好的想法,特别是如果该盒子也是您自己的开发机器,是将代码单独部署到这个单独的区域,使代码文件不可写,然后以某些单独的专用非特权用户身份运行它。

相关内容