sudo: /etc/sudoers is world writable 代表 /etc/sudoers 允許所有使用者寫入,sudo 會拒絕使用這個高風險設定檔。修復重點是用 root 權限把 /etc/sudoers 還原為 root 擁有、預設模式 0440,再用 visudo -c 檢查語法與檔案狀態。
sudoers is world writable 是什麼意思?
sudoers is world writable 表示 sudoers 檔案被設定成其他使用者也可寫入。sudo 會視為高風險設定,因為任何帳號都可能竄改提權規則。
sudoers 是 Linux 系統用來定義「誰可以用 sudo 執行哪些命令」的授權設定。sudo 官方文件說明,/etc/sudoers 不應允許所有使用者寫入,預設檔案模式是 0440,也就是 owner 與 group 可讀、沒有任何人可寫(sudo Project,2026 年存取)。
我當時的筆記遇到的狀況是:某次設定 Linux 時,sudo 指令突然不能用;上網查後才發現是 sudoers 權限被改壞。不同 Linux 發行版對錯誤狀態的訊息略有差異,但核心原因通常都落在檔案權限、擁有者或 sudoers 檔案不存在。
發生錯誤時先檢查 /etc/sudoers 哪些項目?
排查 sudoers 權限錯誤時,先看 /etc/sudoers 的 mode、owner、group 與檔案是否存在。不要急著改規則內容,因為問題常出在檔案層級。
先檢查檔案狀態:
ls -l /etc/sudoers
stat /etc/sudoers
健康狀態通常應接近:
-r--r----- 1 root root ... /etc/sudoers
不同系統的 group 可能是 root 或其他 sudo 套件指定的群組;判斷重點是 owner 應該是 root,且不能出現 -rw-rw-rw-、-rwxrwxrwx 這類所有人可寫的權限。sudoers manual 也列出其他常見錯誤,例如 /etc/sudoers missing、wrong owner、wrong group(man7.org,2026 年存取)。
如何修復 /etc/sudoers 權限?
修復 /etc/sudoers is world writable 的標準方向,是用 root 權限把檔案權限改回 0440,必要時同步修正 owner 與 group。沒有 root shell 時,必須先進入救援模式或用雲端主機主控台處理。
如果還有 root shell、實體 console、救援模式或雲端主機的 serial console,可以執行:
chown root:root /etc/sudoers
chmod 0440 /etc/sudoers
visudo -c
chmod 0440 /etc/sudoers 會把 sudoers 還原成 owner 可讀、group 可讀、其他使用者無權限。GNU chmod 文件說明,chmod 用來變更檔案 mode bits,八進位模式可以直接指定目標權限(GNU Coreutils,2026 年存取)。
如果 sudo 已經完全不能用,下面這種指令通常也會失敗,因為 sudo 本身已拒絕讀取錯誤的 sudoers:
sudo chmod 0440 /etc/sudoers
這時候要改用 root 登入、single-user mode、recovery mode、Live USB 掛載系統磁碟,或雲端供應商提供的 rescue console。這一點保留我當時的筆記的提醒:先檢查 /etc/sudoers 怎麼了;必要時重建 sudoers;最後檢查 log,確認是入侵還是人為疏忽。
什麼時候需要重建 sudoers?
當 /etc/sudoers 不存在、內容被清空或語法嚴重損壞時,才需要重建 sudoers。若只是 world writable,優先修復檔案權限,不要直接覆蓋內容。
重建前先備份現有檔案,即使內容看起來壞掉,也可能保留了重要授權規則:
cp -a /etc/sudoers /root/sudoers.bak
接著可從同版本套件、乾淨主機或發行版預設範本恢復 /etc/sudoers。恢復後務必用 visudo -c 檢查;visudo 會鎖定 sudoers 檔案、做基本合理性檢查,並在儲存或檢查時找出語法錯誤(sudo Project,2026 年存取)。
如果系統使用 /etc/sudoers.d/,也要檢查 drop-in 檔案。sudoers manual 說明 @includedir /etc/sudoers.d 會依檔名字典序讀取目錄中的規則檔,編輯備份檔或包含 . 的檔名可能會被略過(man7.org,2026 年存取)。
修好後要查哪些 log 與風險?
sudoers 被設成 world writable 不是單純小錯,修好後應檢查最近誰改過權限、是否有異常登入、是否出現未授權提權規則。這能分辨人為誤操作與入侵痕跡。
建議檢查:
| 檢查項目 | 指令或位置 | 目的 |
|---|---|---|
| 檔案時間 | stat /etc/sudoers | 看 mode、owner、mtime、ctime 是否合理 |
| sudo 語法 | visudo -c | 確認 sudoers 可被 sudo 正確解析 |
| Debian/Ubuntu auth log | /var/log/auth.log | 查 sudo、su、登入與驗證紀錄 |
| RHEL/CentOS secure log | /var/log/secure | 查提權與登入紀錄 |
| sudoers.d | find /etc/sudoers.d -maxdepth 1 -type f -ls | 檢查是否有可疑 drop-in 規則 |
實務判斷框架是:如果剛剛有人執行過錯誤的 chmod -R 777 /etc 或誤改單一檔案,通常是操作事故;如果同時出現陌生帳號、異常 SSH 登入、sudoers.d 新規則或可疑排程,就應依資安事件處理。
如何避免再次把 sudoers 權限改壞?
避免 sudoers 再次損壞的做法,是永遠用 visudo 編輯規則、避免遞迴修改 /etc 權限,並把個別授權放在受控的 sudoers.d 檔案中。
建議做法:
- 編輯主檔用
visudo,編輯 drop-in 用visudo -f /etc/sudoers.d/檔名。 - 修改權限前先用
ls -l確認目標路徑,避免把/etc或/當成遞迴目標。 - 把 sudo 授權變更納入 code review 或變更紀錄。
- 修改完成後固定執行
visudo -c。 - 遠端主機保留第二個 root console 或雲端救援通道,避免 sudo 壞掉時無法修復。
這篇的資訊增益,是把原本「檢查、重建、查 log」的筆記整理成可復用的 DevOps 排查順序:先確認檔案層級,再用 root 通道修權限,最後才判斷是否要重建與啟動資安調查。
常見問題
/etc/sudoers 正確權限一定是 0440 嗎?
多數 Linux 發行版的 /etc/sudoers 預設權限是 0440。sudoers manual 說明預設模式為 0440,除非系統管理者透過 sudo.conf 的 sudoers plugin 選項另行調整。
為什麼不能直接用 sudo chmod 0440 /etc/sudoers 修復?
當 sudo 已拒絕讀取 world writable 的 sudoers 檔案時,任何 sudo 命令都可能失敗。這時必須改用 root shell、救援模式、雲端 console 或 Live USB 掛載系統磁碟修復。
/etc/sudoers 被改成 777 有多危險?
777 代表所有使用者都可讀、可寫、可執行。對 sudoers 來說,所有人可寫等於任何本機帳號都可能加入提權規則,因此 sudo 會拒絕使用這個檔案。
修復 sudoers 後還需要跑 visudo -c 嗎?
需要。visudo -c 可以檢查 sudoers 語法、owner 與 mode;修完權限不代表規則內容一定正確。
/etc/sudoers.d/ 裡的檔案也要改成 0440 嗎?
建議讓 sudoers.d 裡的規則檔同樣維持嚴格權限,常見做法是 root 擁有且不可被一般使用者寫入。若 drop-in 檔案權限或語法錯誤,sudo 也可能拒絕載入相關規則。
怎麼判斷 sudoers 錯誤是入侵還是誤操作?
先比對 stat /etc/sudoers 的變更時間,再查 /var/log/auth.log 或 /var/log/secure 的登入與提權紀錄。若同一時間附近有陌生登入、可疑帳號、異常 sudoers.d 檔案或排程,應以資安事件處理。
參考資料
- 我當時的筆記參考:SegmentFault,〈sudo: /etc/sudoers is world writable 的處理討論〉,存取日期:2026-08-28。
- 我當時的筆記參考:iT 邦幫忙,〈sudoers is world writable 相關問答〉,存取日期:2026-08-28。
- sudo Project / man7.org,〈sudoers(5) - Linux manual page〉,存取日期:2026-08-28。
- sudo Project / man7.org,〈visudo(8) - Linux manual page〉,存取日期:2026-08-28。
- GNU Coreutils,〈chmod invocation〉,存取日期:2026-08-28。
延伸閱讀
- Linux 給使用者 sudo 權限:useradd、visudo 與 wheel 群組設定:同樣聚焦 Linux、sudo,可接著比較不同情境的做法。
- Linux切換使用者:su 與 sudo -u 指令完整教學:同樣聚焦 Linux、sudo,可接著比較不同情境的做法。
- 取得 Linux 安裝的系統版本:uname、/proc/version 與 /etc/os-release 指令教學:同樣聚焦 Linux,可接著比較不同情境的做法。
最後更新
本文最後更新於 2026-08-28。我當時的筆記發布於 2020-03-18,本文保留當時的修復方向,補上 GEO Answer Blocks、FAQ、官方參考資料與安全檢查清單。
關於作者
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2020-03-18
