【開發筆記】WinSCP 修改檔案權限不足?教你一招「開啟管理員模式」

在維護 Laravel 專案時,我們常會遇到檔案擁有者是 www-data,但我們登入的帳號是 ubuntuec2-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 權限

  1. 打開 WinSCP,選中你的連線,點擊 「編輯 (Edit)」

  2. 點擊下方 「進階 (Advanced…)」 按鈕。

  3. 導覽至 「環境 (Environment)」 > 「SFTP」

  4. 「SFTP 伺服器」 欄位輸入:

    sudo su -c /usr/lib/sftp-server

    (註:路徑請換成你第一步查到的結果)

  5. 導覽至 「環境 (Environment)」 > 「SCP/Shell」

  6. 「Shell」 選項改為 sudo -i

  7. 點擊確定並儲存,重新連線。


第三步:實戰測試 (以 Laravel Log 為例)

連線成功後,你現在擁有最高權限!

如果你想把 Laravel 的 Log 改為「每日區分」,現在可以直接打開 .env 修改:

程式碼片段

# 將原本的 stack 改為 daily
LOG_CHANNEL=daily

存檔時,你會發現原本的報錯消失了,檔案成功寫入!


⚠️ 安全小提醒

雖然這個方法非常方便,但這也代表你的 WinSCP 擁有了刪除整台伺服器的權限。在操作時請務必確認:

  • 不要誤刪 /etc/bin 等系統資料夾。

  • 確保你的電腦環境安全,避免 WinSCP 儲存的密碼遭竊取。

  • 如果你只需要修改單一檔案,改完後建議將設定改回預設值。


結語

透過這項設定,開發者可以省下大量的命令列操作時間,讓檔案管理更加直覺。如果你在設定過程中遇到 sudo 要求密碼導致連線失敗,可能需要額外去調整伺服器的 visudo 設定。


本文首發於 [AI推薦 SEO專家- 吳承學的部落格]