Wordpress 权限问题 - 如何正确安全地设置 WordPress 文件的所有权和权限?

Wordpress 权限问题 - 如何正确安全地设置 WordPress 文件的所有权和权限?

我在本地服务器上设置 WordPress 时遇到一些问题。成功连接到本地数据库后,Wordpress 删除了我Unable to write to the wp-config.php file.。我wp-config.php手动创建了,但仍然无法安装任何插件或更改任何设置。稍后,我通过将所有 WP 文件的所有权更改为 解决了这个问题www-data,但这种设置所有权的方式可能不安全。

那么,问题是:有没有办法同时正确且安全地设置这些文件的所有权和权限?

ls -l清除安装后的结果如下:

-rw-r-----  1 nobody nogroup   405 lut  6  2020 index.php
-rw-r--r--  1 nobody nogroup 19915 sty  1  2023 license.txt
-rw-r--r--  1 nobody nogroup  7402 mar  5 01:52 readme.html
-rwxr-xr-x  1 nobody nogroup  7205 wrz 17  2022 wp-activate.php
drwxr-xr-x  9 nobody nogroup  4096 maj 20 06:30 wp-admin
-rwxr-xr-x  1 nobody nogroup   351 lut  6  2020 wp-blog-header.php
-rwxr-xr-x  1 nobody nogroup  2338 lis 10  2021 wp-comments-post.php
-rw-------  1 nobody nogroup  3013 lut 23 11:38 wp-config-sample.php
drwxr-xr-x  4 nobody nogroup  4096 maj 20 06:30 wp-content
-rwxr-xr-x  1 nobody nogroup  5536 lis 23  2022 wp-cron.php
drwxr-xr-x 28 nobody nogroup 12288 maj 20 06:30 wp-includes
-rwxr-xr-x  1 nobody nogroup  2502 lis 26  2022 wp-links-opml.php
-rwxr-xr-x  1 nobody nogroup  3792 lut 23 11:38 wp-load.php
-rwxr-xr-x  1 nobody nogroup 49330 lut 23 11:38 wp-login.php
-rwxr-xr-x  1 nobody nogroup  8541 lut  3 14:35 wp-mail.php
-rwxr-xr-x  1 nobody nogroup 24993 mar  1 16:05 wp-settings.php
-rwxr-xr-x  1 nobody nogroup 34350 wrz 17  2022 wp-signup.php
-rwxr-xr-x  1 nobody nogroup  4889 lis 23  2022 wp-trackback.php
-rw-r--r--  1 nobody nogroup  3238 lis 29  2022 xmlrpc.php

答案1

Wordpress 文档有官方建议这里

我编写了一个脚本,可以按需运行以升级 WordPress、插件和主题,还可以设置我安装的各种 WordPress 的权限。我不是专家,我也不认为它适合这个用途,但我可以说它似乎大多除了下面的副作用外,对我有用。

此脚本的副作用是您无法使用 WordPress 的 Web 界面安装 WordPress 插件或主题,您必须使用 WordPress cli 来安装插件。这意味着脚本设置的权限不太正确,它们太安全了,但我不经常安装插件,所以它已经足够接近了,我也没有花时间去修复它。其他人可能会弄清楚。我确实快速浏览了一下,并提出了一个想法,注释掉了可能工作。

你需要有WordPress 客户端安装并运行此脚本。您还必须创建文件夹 /var/log/wordpress/ 并确保运行该脚本的用户具有权限。我以 root 身份运行它。

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
echo
echo Wordpress Update and Permissions Script Starting
echo "$(date) Wordpress update and backup started"   >> /var/log/wordpress/upgrades 2>&1

# Function to upgrade wordpress
function upgrade_wordpress() {
    # set up folders in the formats needed
    dir=$1
    uploads=$1/wp-content/uploads
    plugins=$1/wp-content/plugins
    themes=$1/wp-content/themes

    echo Upgrading Wordpress core, plugins, themes in ${dir}
    sudo -H -u www-user bash -c "wp core update --path=$dir"
    sudo -H -u www-user bash -c "wp plugin update --all --path=$dir"
    sudo -H -u www-user bash -c "wp theme update --all --path=$dir"

    echo Setting wordpress permissions to 755 files and 644 folders
    find ${dir} -type d -exec chmod 755 {} \;
    find ${dir} -type f -exec chmod 644 {} \;
    chmod 440 ${dir}/wp-config.php

    echo Making uploads folder ${uploads} writable by the web server
    chown -R www-data:www-data ${uploads}

    # This might make the WordPress web interface able to install plugins and themes. It might also break everything or make it insecure. Beware.
    # This part is is completely untested
    # chown -R www-data:www-data ${plugins}
    # chown -R www-data:www-data ${themes}
}

echo Setting /var/www permissions to www-user:www-data
chown -R www-user:www-data /var/www/

# Run Wordpress update for each wordpress install
upgrade_wordpress /var/www/wordpress1
upgrade_wordpress /var/www/wordpress2
upgrade_wordpress /var/www/wordpress3

echo Wordpress Update and Permissions Script finished
echo "$(date) Wordpress update and backup finished"   >> /var/log/wordpress/upgrades 2>&1

相关内容