WSGIDaemonProcess:指定一个用户

我有一个用户帐户,所有为这个Python webapp设置,我用mod_wsgi部署。 它是超级无特权的,只能从appdir中读取,并写入一个单独的tempdirs集,这是别人无法看到的。 我正在使用以下configuration:

WSGIDaemonProcess xlsxf_daemon user=xlsxf group=xlsxf 

很简单。 不幸的是,我们然后从关于user选项的文档中获得这个:

注意,如果Apache没有以root用户身份启动,这个选项将被忽略,在这种情况下,无论设置如何,守护进程将以Apache启动的用户身份运行。

由于我在Linode的默认Ubuntu安装中运行了这个工具,所以Apache启动为www-data用户,而我已经确认的Python应用程序也注定要以www-data运行。 为什么上面的限制? 我有很多的Ruby /乘客应用程序,作为其他用户daemonize就好了。

编辑 :好的,所以Apache不启动作为www-data用户,但我仍然看到,尽pipe上述configuration线Python Web应用程序运行www-data/编辑

或者,我只是在这里过分偏执? 我有这个服务器上运行的多个不同的项目,我希望他们都作为独立的用户运行,“以防万一”,但随时告诉我,我应该放弃,并将权限移动到www-data

edit2 :按照要求,这里是所有正在运行的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 

你读错了。 Apache确实以“root”身份启动,父进程保持为“root”,只有Apache服务器subprocess以“www-data”运行。 mod_wsgi守护进程从父进程派生,因此仍然可以更改为该用户。

这个评论的意思是,如果你从一个完全没有权限的账户启动Apache,比如你在主目录或其他地方安装了Apache,那么因为它不能以root启动,改变守护进程的用户ID。 尽pipeApache始于系统启动脚本,但始终以“root”身份启动,应该不成问题。

如果你的WSGIDaemonProcessconfiguration行是正确的,用户和组就可以工作。 我自己也用过

这是我的configuration线

 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> 

但是,出于安全原因,您通常不希望这样做。 如果您将Web服务器作为对您的/ home Web文件夹具有写入权限的同一用户运行,则存在安全风险。 你通常最好省略这些,让它作为默认的apache用户运行。 只要确保Apache属于已经读取和执行您的Web文件夹的权限的组。

注意:看看我是如何在虚拟主机部分之外拥有WSGISocketPrefix / var / run / wsgi的。 没有这个WSGI守护进程将无法正常工作。