WSGIDaemonProcess:指定用户

WSGIDaemonProcess:指定用户

我为使用 mod_wsgi 部署的 Python webapp 设置了一个用户帐户。它没有超级特权,只能从 appdir 读取数据,并写入一组单独的临时目录,其他人都无法查看这些临时目录。我使用以下配置行:

WSGIDaemonProcess xlsxf_daemon user=xlsxf group=xlsxf

很简单。不幸的是,我们从文档中得到了关于该user选项的以下内容:

请注意,如果 Apache 不是以 root 用户身份启动的,则会忽略此选项,在这种情况下,无论设置如何,守护进程都将以启动 Apache 的用户身份运行。

由于我在 Linode 上的默认 Ubuntu 安装中运行此程序,Apache 以用户身份启动www-data,并且我已确认的 Python 应用程序也注定以 身份运行www-data。为什么有上述限制?我有很多 ruby​​/passenger 应用程序可以很好地以其他用户身份进行守护。

编辑:好的,所以 Apache 没有开始作为www-data用户,但我仍然看到 Python webapp 尽管www-data有上述配置行,但仍在运行。/编辑

或者说,我是不是太过偏执了?我在这个服务器上运行着多个不同的项目,我希望它们都以单独的用户身份运行,“以防万一”,但请告诉我,我应该放弃并将权限移交给www-data

编辑2:根据要求,这里是所有正在运行的 Apache 进程:

root     18798  0.0  1.9  16156  9880 ?        Ss   Jul26   0:03 /usr/sbin/apache2 -k start
www-data 19344  0.0  1.0  15208  5264 ?        S    Jul26   0:00 /usr/sbin/apache2 -k start
xlsxf    19361  0.0  1.2 155244  6620 ?        Sl   Jul26   0:02 /usr/sbin/apache2 -k start
www-data 19379  0.0  3.2 245436 16420 ?        Sl   Jul26   0:01 /usr/sbin/apache2 -k start
www-data 19380  0.0  3.2 243536 16496 ?        Sl   Jul26   0:01 /usr/sbin/apache2 -k start

答案1

您读错了。Apache 确实以“root”身份启动,并且父 Apache 进程仍以“root”身份运行,只有 Apache 服务器子进程以“www-data”身份运行。mod_wsgi 守护进程是从父“root”进程分叉而来的,因此仍然可以更改为该用户。

注释的意思是,如果您从完全非特权帐户启动 Apache,例如,当您在主目录或其他地方安装 Apache 时,由于它不是以“root”身份启动的,因此它无法更改守护进程的用户 ID。但是,从系统 init 脚本启动的 Apache 始终以“root”身份启动,因此应该没有问题。

答案2

如果您的 WSGIDaemonProcess 配置行正确,则用户和组确实有效。我自己就用过它。

这是我的配置行

WSGISocketPrefix /var/run/wsgi

<VirtualHost xx.xx.xx.xx:80>

WSGIDaemonProcess somedomain.com user=somedomain group=somedomain python-path=/home/somedomain/mysite:/home/somedomain/venv/myvenv/lib/python2.7/site-packages
...
...
...
</VirtualHost>

但是,出于安全原因,您通常不想这样做。如果您以对 /home webfolder 具有写入权限的同一用户身份运行 Web 服务器,则存在安全风险。通常最好省略这些权限,并让其以默认 apache 用户身份运行。只需确保 apache 属于对您的 web 文件夹具有读取和执行权限的组即可。

注意:看看我在虚拟主机部分之外如何使用 WSGISocketPrefix /var/run/wsgi。如果没有它,WSGI 守护进程将无法工作。

相关内容