sudo:在第 27 行附近的 /etc/sudoers 中解析錯誤
root@debian:/home/debian8# cat /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: includedir /etc/sudoers.d
第27行只去掉了一個字元#,原始格式如下。
#includedir /etc/sudoers.d
我只是刪除了 # 字元。
root@debian:/home/debian8# ls /etc/sudoers.d myRules README root@debian:/home/debian8# cat /etc/sudoers.d/myRules debian8 ALL=(ALL:ALL) NOPASSWD:ALL
如何解決?
#includedir /etc/sudoers.d
不是評論,#includedir
是指令。井號是其中的一部分。只需重新添加它。
根據
man sudoers
一個應該使用@includedir
:在 sudoers 中包含其他文件 可以在目前使用 @include 和 @includedir 指令解析的 sudoers 文件中包含其他 sudoers 文件。為了與 1.9.1 之前的 sudo 版本兼容,還接受 #include 和 #includedir。
@includedir 指令可用於創建 sudoers.d 目錄,系統包管理器可以將 sudoers 文件規則作為包安裝的一部分放入該目錄。例如,給定:
@includedir /etc/sudoers.d
sudo 將暫停目前文件的處理並讀取 /etc/sudoers.d 中的每個文件,跳過以 ‘~’ 結尾或包含 ‘.’ 的文件名 字元以避免導致包管理器或編輯器臨時/備份文件出現問題。文件按排序的詞彙順序進行解析。也就是說,/etc/sudoers.d/01_first 會在 /etc/sudoers.d/10_second 之前被解析。請注意,因為排序是詞法的,而不是數字的,所以 /etc/sudoers.d/1_whoops 將在 /etc/sudoers.d/10_second 之後載入。在文件名中使用一致數量的前導零可用於避免此類問題。解析目錄中的文件後,控制權返回到包含@includedir 指令的文件。
請注意,與通過@include 包含的文件不同,visudo 不會編輯@includedir 目錄中的文件,除非其中一個包含語法錯誤。仍然可以使用 -f 標誌執行 visudo 以直接編輯文件,但這不會擷取也存在於不同文件中的別名的重新定義。