Web 应用程序中的权限、所有权和分组无缘无故发生变化

Web 应用程序中的权限、所有权和分组无缘无故发生变化

我有一个 Ubuntu 16.04 Nginx 服务器环境,其中有几个(WordPress)webapps /var/www/html

我的 Nginx 用户是www-data

每次我添加一个 web 应用程序时,我都会执行:

chown www-data:www-data /var/www/html/* -R
find /var/www/html/* -type d -exec chmod 755 {} \;
find /var/www/html/* -type f -exec chmod 644 {} \;

似乎有些软件(可能是 Nginx?)会更改权限,因此至少有些目录(也可能是其中的文件)会变得不可写的

我的问题是为什么以及如何改变我的权限以及解决这个问题的最佳方法是什么?

我可以添加每日 crontask 来恢复上述更改,但有些人可能认为这不是一个“巧妙”的解决方案,最好更改任何可疑软件本身,这样它就不会“敢”再次更改这些权限。

答案1

我在使用 Moodle 时也遇到过类似的问题,但在我的案例中,文件的所有权root:root也发生了变化。更改的文件和目录是缓存文件,在升级版本时会导致问题。我最终意识到这实际上是 Moodle 中的一个错误,它改变了权限,但所有权问题是由于我的httpd进程以用户root身份而不是以用户身份运行apache。说明可以在这里找到httpd在这里nginx

我怀疑你的问题与我的非常相似。如果你能提供一些受此问题影响的 WordPress 安装文件/目录的具体示例,以及你当前正在使用的插件列表,那将非常有用。我的问题是由插件中的错误引起的。

答案2

该问题是由另一个 cron 命令引起的 - 用于更新 WordPress 核心的 WP-CLI 命令。还有类似的用于更新插件和主题的命令也可能导致类似的问题。

以下是 3 个命令(核心、插件、主题)+3 个在它们之后立即运行的命令,用于修复更新导致的权限偏差:

for dir in /var/www/html/*/; do cd "$dir" && /usr/local/bin/wp plugin update --all --allow-root; done
for dir in /var/www/html/*/; do cd "$dir" && /usr/local/bin/wp core update --allow-root; done
for dir in /var/www/html/*/; do cd "$dir" && /usr/local/bin/wp theme update --all --allow-root; done
chown www-data:www-data /var/www/html/* -R
find /var/www/html/* -type d -exec chmod 755 {} \;
find /var/www/html/* -type f -exec chmod 644 {} \;

相关内容