WordPress 用 SSH 更新設定教學(Amazon EC2 Ubuntu 伺服器)


WordPress的發展與安全性問題

WordPress 在十幾年前一開始只是個簡易的免費部落格平台,然而因為因為它簡單而又強大,而且有豐富的外掛可以使用,經過多年發展至今被大量普遍的使用 。不過安全性卻是這個平台的一大問題,因為使用的主機很多,而且很多主機普遍並不會配有專業的 MIS 網管人員,所以變成駭客的好機會。筆者也曾經歷 WordPress 網站被駭客入侵,變成僵屍網路的一環,然後差點被 Amazon 強制停機的處境。

為了提昇安全性,WordPress 必需隨時更新至最新版本,而更新的方式傳統是用 FTP 來上傳檔案,不過也可以改用FTPS或 SSH 來傳輸 。不用說,當然要用後者比較安全。(不然也不用刻意發展新協定了,不是嗎?)

在安裝完 WordPress 之後,理所當然的,我們會想要挑一個我們喜歡的佈景主題(Theme)。然而在安裝時,會發現看到下面的畫面而無法繼續:

無法安裝 WordPress Theme

所以要順利安裝新的佈景主題,我們就要先完成 SSH 的設定:

Step 1. 新增帳號 wp-update

在 Amazon Ubuntu 上 WordPress 裝好後,/var/www/html 下的檔案的 owner 要嘛是 www-data,要不然就是 ubuntu,雖然一路都使用www-data 或 ubuntu 也很方便,但這樣安全性比較差,因為 apache process 的使用者正是 www-data,而 ubuntu 是預設的登入使用者。比較好的辨法是新增另一個帳號,這裡我們用 wp-update 。

sudo adduser wp-update

密碼簡單設一下,其它都直接按 ENTER 即可。

接著修改WordPress安裝目錄的 owner, 目錄預設為 /var/www/html

sudo chown -R wp-update:wp-update /var/www/html

Step 2. 建立 SSH Keys

接著切換身份為 wp-update

sudo su - wp-update

然後建立 SSH key pairs

ssh-keygen -t rsa -b 4096

按 ENTER 同意預設檔案存放為  /home/wp-update/.ssh/id_rsa

然後再按 ENTER 同意不設密語

建立完成之後,確認一下:

cd .ssh
ls -al
total 16
drwx------ 2 wp-update wp-update 4096 Jan 16 18:08 .
drwxr-xr-x 3 wp-update wp-update 4096 Jan 16 18:07 ..
-rw------- 1 wp-update wp-update 3243 Jan 16 18:08 id_rsa
-rw-r--r-- 1 wp-update wp-update  751 Jan 16 18:08 id_rsa.pub

然後需要另外複製一份 key pairs,  為了下面一步:

cp /home/wp-update/.ssh/id* /home/wp-update/

完成後跳離 wp-update 的身份

exit

接著要使剛才複製的 key pairs 讓 www-data (也就是 apache process)可以讀到這個 key pairs 但是不能修改。作法是將 key pairs 的 group owner 設為 www-data,並將權限設為 640,意思是 owner 可以讀寫,而 group owner 可以讀。

sudo chown wp-update:www-data /home/wp-update/id_rsa*
sudo chmod 0640 /home/wp-update/id_rsa*

然後將 public key 列為 authorized keys 之一,不過因為目前只有一個,所以直接複製 public key 即可:

sudo cp /home/wp-update/id_rsa.pub /home/wp-update/.ssh/authorized_keys

同樣的,這個 authorized key 的的權限也要作適當的調整:

sudo chown wp-update:wp-update /home/wp-update/.ssh/authorized_keys
sudo chmod 0644 /home/wp-update/.ssh/authorized_keys

由於這個 key 的登入來源是本機,所以安全的作法是加上限制:(這裡筆者習慣用 vim,不熟的話可以用 nano來編輯)

sudo vim /home/wp-update/.ssh/authorized_keys

在一開頭加上 from=”127.0.0.1″

from="127.0.0.1" ssh-rsa ...

Step 3. 調整 WordPress 設定

首先先更新一下函式庫,後面會用到

sudo apt-get update
 sudo apt-get install php5-dev libssh2-1-dev libssh2-php

接著變更 wp-config.php 內容

sudo vim /var/www/html/wp-config.php

在檔案最後面加上

define('FTP_PUBKEY','/home/wp-update/id_rsa.pub');
define('FTP_PRIKEY','/home/wp-update/id_rsa');
define('FTP_USER','wp-update');
define('FTP_PASS','');
define('FTP_HOST','127.0.0.1:22');

存檔後,重啟 apache2 ,理論上就大功告成了。

sudo service apache2 restart

測試安裝 Theme

點選想要安裝的Theme 之後,可以看到連線資料裡多了一些預設的灰階文字,這時要選擇SSH2

安裝 WordPress Theme 選擇連接方式

接著點 Proceed,就成功安裝了!

成功安裝 WordPress Theme

程式撰寫教學

現在寫程式不若二十年前,線上的資源十分的豐富。

我在開發時也常常借用別人的線上教學與模組來加速開發的速度,在使用之餘除了感謝之外,也常在想說應該貢獻一些給這個社群,特別是華文的資源還是相對來說比較缺少。

現在剛好有這個機會跟空間,就一步一腳印的來建立吧~

-Orange,  Jan 2016