3,871 瀏覽數

WordPress – 檔案權限設定(2)

wordpress 更新失敗就會看到下面的錯誤訊息,只需要修改檔案權限即可.

Installation failed: Unable to locate WordPress content directory (wp-content).

測試環境為 Ubuntu16.04 x86_64(虛擬機)

前言

更新 WordPress , plugin , theme 時需要輸 Linux 系統的使用者帳號與密碼,但實際在運作的是 httpd process 的使用者 (Ubunut 為 www-data , RHEL/CentOS 為 apache),下面是透過 ps 指令來觀察.

root@ubuntu:~# ps aux | grep apache2
root       1509  0.0  2.8 287188 27992 ?        Ss   00:55   0:00 /usr/sbin/apache2 -k start
www-data   2832  0.0  3.2 293180 32920 ?        S    01:00   0:00 /usr/sbin/apache2 -k start
www-data   2833  0.0  3.5 293868 35752 ?        S    01:00   0:01 /usr/sbin/apache2 -k start
www-data   2834  0.0  3.4 293508 34444 ?        S    01:00   0:00 /usr/sbin/apache2 -k start

新增使用者

剛剛有提到更新需要一個使用者,尤其當你有設定 Virtual Host 時需請各版主自行去升級.
以使用者 benjr 為範例.

root@ubuntu:~# useradd benjr
root@ubuntu:~# passwd benjr
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

HTML 權限

root@ubuntu:~# touch /var/www/html/.htaccess
root@ubuntu:~# mkdir /var/www/html/wp-content/uploads
root@ubuntu:~# find /var/www/html/ -exec chown www-data:www-data {} \;
root@ubuntu:~# find /var/www/html/ -type d -exec chmod 755 {} \;
root@ubuntu:~# find /var/www/html/ -type f -exec chmod 644 {} \;
root@ubuntu:~# chgrp www-data /var/www/html/wp-config.php
root@ubuntu:~# chmod 440 /var/www/html/wp-config.php
root@ubuntu:~# find /var/www/html/wp-content -exec chgrp www-data {} \;
root@ubuntu:~# find /var/www/html/wp-content -type d -exec chmod 775 {} \;
root@ubuntu:~# find /var/www/html/wp-content -type f -exec chmod 664 {} \;
root@ubuntu:~# ll /var/www/html
total 200
drwxr-xr-x  5 www-data www-data  4096 Dec  4 01:59 ./
drwxr-xr-x  3 root     root      4096 Oct 30 23:23 ../
-rw-r--r--  1 www-data www-data   235 Dec  4 18:04 .htaccess
-rw-r--r--  1 www-data www-data   418 Sep 24  2013 index.php
-rw-r--r--  1 www-data www-data 19935 Nov 30 23:55 license.txt
-rw-r--r--  1 www-data www-data  7413 Nov 30 23:55 readme.html
-rw-r--r--  1 www-data www-data  5434 Nov 30 23:55 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Nov 30 23:55 wp-admin/
-rw-r--r--  1 www-data www-data   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 www-data www-data  1627 Aug 29  2016 wp-comments-post.php
-r--r-----  1 www-data www-data  2839 Nov 30 23:17 wp-config.php
drwxrwxr-x  6 www-data www-data  4096 Dec  4 02:19 wp-content/
-rw-r--r--  1 www-data www-data  3669 Nov 30 23:55 wp-cron.php
drwxr-xr-x 18 www-data www-data 12288 Nov 30 23:55 wp-includes/
-rw-r--r--  1 www-data www-data  2422 Nov 20  2016 wp-links-opml.php
-rw-r--r--  1 www-data www-data  3306 Nov 30 23:55 wp-load.php
-rw-r--r--  1 www-data www-data 36583 Nov 30 23:55 wp-login.php
-rw-r--r--  1 www-data www-data  8048 Jan 10  2017 wp-mail.php
-rw-r--r--  1 www-data www-data 16246 Nov 30 23:55 wp-settings.php
-rw-r--r--  1 www-data www-data 30071 Nov 30 23:55 wp-signup.php
-rw-r--r--  1 www-data www-data  4620 Nov 30 23:55 wp-trackback.php
-rw-r--r--  1 www-data www-data  3065 Aug 31  2016 xmlrpc.php

Apache2 + SSH2

更新不想要輸入使用者帳號密碼時,可以透過設定 Apache2 + SSH2 的方式,詳細設定請參考 http://benjr.tw/10928

root@ubuntu:~# sudo su - benjr
benjr@ubuntu:~$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/benjr/.ssh/id_rsa): 
Created directory '/home/benjr/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/benjr/.ssh/id_rsa.
Your public key has been saved in /home/benjr/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cgVtD1r1PkM524V3sl47112dfdswerSDF34Fw8pEhQpwodiw benjr@ubuntu
The key's randomart image is:
+---[RSA 4096]----+
|        o.++o+ +o|
|       E ==o..B+.|
|      . ++.o .Bo+|
|        ..  +o.Bo|
|      . S  . ** o|
|       o  . o.o+.|
|           o  .* |
|          . . + +|
|           .   o |
+----[SHA256]-----+
benjr@ubuntu:~$ cp /home/benjr/.ssh/id* /home/benjr/
benjr@ubuntu:~$ exit
logout
root@ubuntu:~# cat /home/benjr/id_rsa.pub >> /home/benjr/.ssh/authorized_keys
root@ubuntu:~# chown benjr:benjr /home/benjr/.ssh/authorized_keys
root@ubuntu:~# chmod 644 /home/benjr/.ssh/authorized_keys
root@ubuntu:~# vim /home/benjr/.ssh/authorized_keys
from="127.0.0.1" ssh-rsa
root@ubuntu:~# vi /var/www/html/wp-config.php
/** Define Upgrade FTP Usernames and Passwords */
define('FTP_BASE', '/var/www/html');
define('FTP_CONTENT_DIR', '/var/www/html/wp-content/');
define('FTP_PLUGIN_DIR', '/var/www/html/wp-content/plugins/');
define('FTP_PUBKEY','/home/benjr/id_rsa.pub');
define('FTP_PRIKEY','/home/benjr/id_rsa');
define('FTP_USER','benjr');
define('FTP_PASS','');
define('FTP_HOST','127.0.0.1:22');
define('FS_METHOD', 'direct');

發表迴響