Python + Django在aphat2(httpd),Redhat上的不同用户下运行

时间:2013-09-06 09:06:57

标签: python django apache apache2 redhat

我有一个绑定到Red Hat上的httpd(apache2)的django应用程序,它运行良好但是我想用不同于apache的用户名运行它,所以如果它写入文件系统文件的所有者应该是新用户。我正在寻找实现这一目标的解决方案。

我尝试使用httpd-itk(在此之后:http://www.webtatic.com/packages/httpd-itk/),但它抱怨:

permission denied: mod_wsgi (pid=31322): Unable to connect to WSGI daemon process
'myapp.djangoserver' on '/var/run/wsgi.31085.0.1.sock' after multiple attempts.

解决此问题后(通过授予777权限来测试文件)我仍然拥有文件所有者的apache。

我的conf文件如下所示:

<VirtualHost *:80>

    ServerName myapp
    ServerAlias myapp 
    DocumentRoot /usr/share/myapp

    <Directory /usr/share/myapp>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess syntyma.djangoserver processes=10 threads=20 display-name=%{GROUP}
    WSGIProcessGroup myapp.djangoserver

    WSGIScriptAlias / /usr/share/myapp/apache/django.wsgi
    CustomLog logs/myapp-access.log combined
    ErrorLog logs/myapp-error.log

    LogLevel debug
    AssignUserId newuser newuser

</VirtualHost>
WSGISocketPrefix /var/run/wsgi

,以及创建的测试文件:

ls -l /tmp/ggg
-rw-r--r-- 1 apache apache 3 Sep  6 09:46 /tmp/ggg

我如何通过htttpd-itk或任何其他解决方案(如某些suEXEC或类似解决方案)实现我的目标?

感谢。

1 个答案:

答案 0 :(得分:5)

WSGIDaemonProcess具有user参数,用于守护进程将在其下运行的用户。在你的情况下:

WSGIDaemonProcess syntyma.djangoserver user=newuser processes=10 etc...

来自documentation

  

user = name |用户#= uid.rst

     

定义守护程序处理的用户的UNIX用户名或数字用户uid   应该像。如果未提供此选项   守护进程将作为Apache所用的用户运行   运行子进程并按用户指令定义。

     

请注意,如果Apache未以root用户身份启动,则会忽略此选项   case无论设置如何,守护进程都将以Apache启动的用户身份运行。

     

另请注意,mod_wsgi不允许您以root身份运行守护程序进程组   用户由于运行安全风险   Web应用程序作为root。