我在本地服务器上设置 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