我有一个绑定到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或类似解决方案)实现我的目标?
感谢。
答案 0 :(得分:5)
WSGIDaemonProcess
具有user
参数,用于守护进程将在其下运行的用户。在你的情况下:
WSGIDaemonProcess syntyma.djangoserver user=newuser processes=10 etc...
user = name |用户#= uid.rst
定义守护程序处理的用户的UNIX用户名或数字用户uid 应该像。如果未提供此选项 守护进程将作为Apache所用的用户运行 运行子进程并按用户指令定义。
请注意,如果Apache未以root用户身份启动,则会忽略此选项 case无论设置如何,守护进程都将以Apache启动的用户身份运行。
另请注意,mod_wsgi不允许您以root身份运行守护程序进程组 用户由于运行安全风险 Web应用程序作为root。