為什麼 SFTP 顯示權限不足
SFTP 以登入時使用的帳戶執行,沒有相當於 sudo 的功能。/etc 中的大多數檔案屬於 root,因此一般帳戶可以讀取其中一部分,但無法寫入任何一個。這是正確的行為,不應透過放寬權限來解決。
應避免的做法
不要對設定檔執行 chmod 777,不要將 /etc 中的檔案擁有者改成自己的帳戶,也不要只為了編輯一次就啟用 root 密碼登入。有些服務會拒絕使用權限過於寬鬆的檔案,而且每一項這類變更都會在編輯完成後持續降低伺服器的安全性。
在終端機中使用 sudoedit
sudoedit 會將檔案複製到暫存位置,以你自己的帳戶在編輯器中開啟,並且只在儲存後才寫回原檔。編輯器本身不會以 root 身分執行。
sudoedit /etc/nginx/nginx.conf先上傳副本,再安裝到目標位置
如果偏好本機編輯器,可以將檔案上傳到自己的家目錄,再用 sudo 安裝到目標位置。請先備份原檔,備份位置應避開所有設定引入指令的讀取範圍。install 指令會設定擁有者和權限模式;在使用 SELinux 的系統上,restorecon 會設定正確的安全性內容。在採用這些值之前,先檢查原檔的擁有者和權限模式,因為並非所有檔案都使用 root 和 644。
stat -c '%U %G %a' /etc/nginx/nginx.conf
sudo cp -a /etc/nginx/nginx.conf /root/nginx.conf.bak
sudo install -o root -g root -m 644 ~/nginx.conf.new /etc/nginx/nginx.conf
sudo restorecon -v /etc/nginx/nginx.conf套用前先驗證
語法錯誤的檔案可能導致服務在下次重新啟動時停止運作。在重新載入服務前,先執行該服務的檢查指令。變更 SSH 設定時,保持目前的工作階段開啟,並從第二個視窗測試一次新登入。
sudo nginx -t
sudo sshd -t
sudo visudo -cf /etc/sudoers.d/example在 CH-J Server Manager 中使用 sudo 編輯
當 SSH 帳戶無法讀取檔案時,File Manager 會提供使用 sudo 開啟的選項,並警告儲存時需要 sudo。儲存時,資料會先傳入該帳戶的私有暫存目錄,驗證後再由 sudo 移至目標位置,同時保留擁有者、權限、ACL 和 SELinux 安全性內容。可選用的備份功能會在取代前儲存原檔的副本。密碼只會傳送給伺服器上的 sudo,不會儲存在磁碟或紀錄中。如果 sudo 原則要求使用終端機(requiretty),應用程式不會繞過這項要求。應用程式不驗證檔案內容,因此請自行執行服務的檢查指令。