【问题标题】:Allow different user ability to modify time of wsgi file with touch -m允许不同的用户使用 touch -m 修改 wsgi 文件的时间
【发布时间】:2017-05-28 02:16:21
【问题描述】:

我正在使用 mod_wsgi,它能够在发生更改时动态重新加载我的 run.wsgi 脚本。我的应用程序有很多文件,但只监控 run.wsgi 的更改。文档建议在任何应用程序文件更改时仅“触摸”run.wsgi - 这确实有效。

我遇到的问题是我的应用程序位于与我网站的文档根目录不同的(专用)用户目录中(为了安全起见),在某些情况下,我需要拥有该网站的用户能够“触摸其他用户目录中的 run.wsgi 文件(强制重新加载应用程序)。而且网站用户不能touch -m /home/app-user/app/run.wsgi

touch: setting times of ‘/home/app-user/app/run.wsgi’: Operation not permitted

我已经创建了一个“普通”组并更新了权限:

usermod -a -G commongrp site-user
usermod -a -G commongrp app-user
chgrp commongrp run.wsgi
chmod 770 run.wsgi

site-user 能够真正修改 wsgi 文件,但我不想这样做。我只是想在不实际上修改文件的情况下“伪造”文件的修改。有没有使用 linux 权限的安全方法,或者有更好的方法吗?

【问题讨论】:

    标签: linux apache mod-wsgi chmod chown


    【解决方案1】:

    我建议您使用 sudo 来允许站点用户以应用用户身份运行 touch。使用 visudo 编辑您的 sudoers 文件并创建如下条目:

        site-user    ALL=(app-user) NOPASSWD: /usr/bin/touch
    

    然后使用 sudo 随时以应用用户身份运行它:

        site-user$ sudo -u app-user /usr/bin/touch -m /home/app-user/app/run.wsgi
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 mod_wsgi 的守护模式(这是首选设置),而不是嵌入式模式,并且守护模式进程设置为以您能够访问系统的用户身份运行,您可以改为发送向守护程序模式进程发出信号以使它们重新启动。可以使用的标准信号是SIGINTSIGTERM,用于有序关机。如果守护模式进程配置了优雅超时,您也可以使用SIGUSR1,它会允许请求在进程关闭之前完成更长的时间。

      如果您能够修改 WSGI 脚本文件,也可以在其中提供一个函数来决定在处理请求之前是否应该重新启动守护模式进程。这将需要编写一个函数来检查其他文件的时间戳以确定是否应该重新启动。

      如需进一步帮助,您最好使用 mod_wsgi 邮件列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多