2

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

我尝试使用 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 或类似解决方案)达到我的目标?

谢谢。

4

1 回答 1

5

WSGIDaemonProcess有一个user用户参数,守护进程将在该参数下运行。在你的情况下:

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

文档中:

用户=名称 | 用户=#uid.rst

定义应该作为守护进程运行的用户的 UNIX 用户名或数字用户 uid。如果未提供此选项,则守护进程将以与 Apache 运行子进程相同的用户身份运行,并由 User 指令定义。

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

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

于 2013-09-06T09:46:19.310 回答