`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 與檔案是否存在。不要急著改規則內容,因為問題常出在檔案層級。
先檢查檔案狀態:
```bash
ls -l /etc/sudoers
stat /etc/sudoers
```
健康狀態通常應接近:
```text
-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,可以執行:
```bash
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:
```bash
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,優先修復檔案權限,不要直接覆蓋內容。
重建前先備份現有檔案,即使內容看起來壞掉,也可能保留了重要授權規則:
```bash
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 通道修權限,最後才判斷是否要重建與啟動資安調查。
延伸閱讀
- Linux 給使用者 sudo 權限:useradd、wheel 群組與 visudo 設定
- Linux 基本操作指令整理:檔案、目錄、權限與系統資訊
- Linux 設定排程 crontab:時間格式、常用範例與注意事項
常見問題
`/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。
最後更新
本文最後更新於 2026-08-28。我當時的筆記發布於 2020-03-18,本文保留當時的修復方向,補上 GEO Answer Blocks、FAQ、官方參考資料與安全檢查清單。
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2020-03-18
