解決 GCP 主機,SFTP 無法覆蓋修改檔案的問題詳解

Google GCP 主機 SFTP 操作權限設定

GCP 主機架設 WordPress 容易遇到的 SFTP 問題

使用其他較簡單主機 VPS 的人,要跳到 GCP 時,常常因為 Google Cloud Platform 更嚴謹的主機安全性,而導致遇到一連串的設定問題。

今天我們要解決的是使用 FileZilla 之類的 SFTP 連線時⋯⋯使用者權限問題,會導致如下異常:

  1. 無法透過 FileZilla SFTP 刪除檔案
  2. 無法透過 FileZilla SFTP 更名檔案
  3. 無法透過 FileZilla SFTP 覆蓋檔案
  4. WordPress 上無法刪除/安裝外掛
  5. WordPress 上無法新增/刪除 媒體庫

以上幾點都是權限所導致的問題,解決的方法就是修正「使用者權限」。

GCP SFTP 無法操作原因

檔案的權限所有者為了避免 4~5 點問題,會設為 www 或是 www:data,才不會影響 WordPress 網站正常運作!其他 VPS 我們登入 SFTP 都是使用 root 最高管理者!因此可以編輯修改任何檔案。

但是 GCP 卻不讓我們使用 root 操作 SFTP,我們用的是自己的帳號登入,而自己的帳號既然不是資料夾的擁有者、也不是最高管理者,當然就無法進行新增 / 修改 / 刪除的操作。

GCP 如何設定 SFTP,才能解決權限無法修改檔案問題?

這邊依照難度提供三個方法:

  1. 將 WordPress 權限修改為 777
  2. 將 GCP 改為可用密碼登入、再使用 www 登入 SFTP
  3. 使用 www 登入 SFTP,並且保持密鑰登入,關閉密碼登入

三個方法都可解決此問題,越困難的方法,能夠保留的主機安全性越高。

一、將 WordPress 資料夾的權限設定為:777

這樣即使不是最高管理者都可以編輯了,但這樣無疑是將網站的門戶大開,安全性大大降低!

sudo chmod 777 [你的 WordPress 資料夾路徑]

二、使用 www 登入,GCP 主機需改為可密碼登入

概念是既然必須設 www(有些系統是:www:data)為資料夾擁有者,我們乾脆就用 www 這個使用者來登入 SFTP 吧!這樣他就理所當然可以進行操作!

但是 www 預設是不能登入的、也沒有密碼。因此我們先幫 www 改為可登入並設定密碼!

步驟 1

修改 www 為可登入使用者

vim /etc/passwd
Google GCP 主機 SFTP 操作權限設定
進入文檔做修改,找到 www 將後方的「nologin」改成像是上方的「/bin/bash」
步驟 2

開啟主機密碼登入功能

進入管理登入的 sshd_config 檔修改

vim /etc/ssh/sshd_config

找到 PasswordAuthentication 預設是 no 改成 yes

PasswordAuthentication yes
步驟 3

給 www 設定一個密碼

sudo passwd www

重啟 sshd

sudo service sshd reload
sudo service ssh restart
完成

可密碼登入 SFTP 了!

可以用 www 在 FileZilla 使用密碼登入 SFTP 了。

三、使用 www 登入 SFTP,但是保持密鑰登入!

第三個方法算是第二個方法的進階版,主要是要保持 GCP 主機不開放密碼登入的這層安全性,但就算開放密碼登入也還是可以接受的安全範圍。因此如果覺得步驟三太過複雜,可以用步驟二就好。

步驟 1

創建 www 的密鑰 (此步驟在電腦本機端操作、非 ssh 主機端)

創建密鑰

ssh-keygen -t rsa -f ~/.ssh/google-gcp-record-key-www -C www

權限設定

chmod 400 ~/.ssh/google-gcp-record-key-www

印出 key

cat ~/.ssh/google-gcp-record-key-www.pub
步驟 2

為 www 創建資料夾

這邊請先完成第二個方法的所有操作!接著再接續這裡創建 www 的資料夾

mkdir www
chown -R www:www www
步驟 3

將金鑰新增到主機上(此步驟在本機終端機操作)

ssh-copy-id -i ~/.ssh/gcp-record-www-key.pub www@[主機 ip 位址]

接著終端機會詢問密碼,輸入方法二中所設定的 www 密碼。

步驟 4

關閉方法二中開啟的 GCP 主機密碼登入功能,加強主機安全性

vim /etc/ssh/sshd_config

找到 PasswordAuthentication 改成 no

PasswordAuthentication no

重啟

sudo service sshd reload

 

完成

恭喜完成所有步驟

你已經成功解決 SFTP 操作問題,並且保持了原本 GCP 的高安全性。

在這裡,你不會被廣告打擾,所有的學習內容都是免費的。
如果這讓你感到滿意,一杯咖啡能讓我們走得更遠。

請 Perry 喝杯咖啡
上一篇WordPress 網站主機推薦哪一家?先考慮主機位置! 下一篇WordPress Divi 主題 繁體中文化,安裝子主題