【開發筆記】WinSCP 修改檔案權限不足?教你一招「開啟管理員模式」
在維護 Laravel 專案時,我們常會遇到檔案擁有者是 www-data,但我們登入的帳號是 ubuntu 或 ec2-user。這導致透過 WinSCP 修改 .env 或上傳圖片時,狂跳 「Permission Denied (錯誤代碼 3)」。
其實不需要每次都進 SSH 打 chmod,只要在 WinSCP 做一點進階設定,就能直接用 sudo 權限管理檔案!
為什麼會權限不足?
Linux 基於安全考量,不同使用者之間的檔案是隔離的。你的網頁程式跑在 www-data 使用者下,而你登入的是普通帳號。雖然你可以讀取,但沒有「寫入」的權限。
第一步:找出伺服器的 sftp-server 路徑
在設定之前,我們需要知道 SFTP 服務的路徑。請先用終端機登入你的伺服器,輸入:
Bash
whereis sftp-server
通常你會得到類似 /usr/lib/sftp-server 的路徑,請先記下來。
第二步:配置 WinSCP 使用 sudo 權限
-
打開 WinSCP,選中你的連線,點擊 「編輯 (Edit)」。
-
點擊下方 「進階 (Advanced…)」 按鈕。
-
導覽至 「環境 (Environment)」 > 「SFTP」。
-
在 「SFTP 伺服器」 欄位輸入:
sudo su -c /usr/lib/sftp-server(註:路徑請換成你第一步查到的結果)
-
導覽至 「環境 (Environment)」 > 「SCP/Shell」。
-
將 「Shell」 選項改為
sudo -i。 -
點擊確定並儲存,重新連線。
第三步:實戰測試 (以 Laravel Log 為例)
連線成功後,你現在擁有最高權限!
如果你想把 Laravel 的 Log 改為「每日區分」,現在可以直接打開 .env 修改:
程式碼片段
# 將原本的 stack 改為 daily
LOG_CHANNEL=daily
存檔時,你會發現原本的報錯消失了,檔案成功寫入!
⚠️ 安全小提醒
雖然這個方法非常方便,但這也代表你的 WinSCP 擁有了刪除整台伺服器的權限。在操作時請務必確認:
-
不要誤刪
/etc或/bin等系統資料夾。 -
確保你的電腦環境安全,避免 WinSCP 儲存的密碼遭竊取。
-
如果你只需要修改單一檔案,改完後建議將設定改回預設值。
結語
透過這項設定,開發者可以省下大量的命令列操作時間,讓檔案管理更加直覺。如果你在設定過程中遇到 sudo 要求密碼導致連線失敗,可能需要額外去調整伺服器的 visudo 設定。
本文首發於 [AI推薦 SEO專家- 吳承學的部落格]
