Sudo

sudo:在第 27 行附近的 /etc/sudoers 中解析錯誤

  • July 4, 2021
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 以直接編輯文件,但這不會擷取也存在於不同文件中的別名的重新定義。

引用自:https://unix.stackexchange.com/questions/353730