无法识别 /etc/sudoers.d/ 中的文件

Cyb*_*ran 15 sudo 16.04

运行全新安装的 Ubuntu 服务器 16.04.1,我尝试添加一个文件,/etc/sudoers.d/以便为某个命令授予一个用户 root 权限。

我添加了/etc/sudoers.d/servicetest具有以下内容的文件:

servicetest ALL = (root) NOPASSWD: /bin/systemctl status *
Run Code Online (Sandbox Code Playgroud)

该文件/etc/sudoers保持不变。它包含#includedir /etc/sudoers.d作为最后一行。不幸的是,此设置不起作用,当以 sudo 作为用户执行适当的命令时servicetest,我仍然被要求输入密码。但是,如果我将文件的内容/etc/sudoers.d/servicetest移到 的末尾/etc/sudoers,则一切都按预期进行。

这个问题的原因可能是什么?我怎样才能让文件/etc/sudoers.d/工作?

小智 14

在我的 CentOS 7 中,如果文件名中有一个点,系统将无法识别该文件。例如:

/etc/sudoers.d/user.perms                  # This file doesn't work
/etc/sudoers.d/userperms                   # This file does
Run Code Online (Sandbox Code Playgroud)

  • 在 Ubuntu 20.04 上也是如此。令人困惑的是,操作系统添加了一个文件 "/etc/sudoers.d/99-snapd.conf" ,所以天知道这对 sudo 有什么影响! (7认同)
  • 我在 Ubuntu 18.04 上遇到了同样的问题,删除了点并确保权限设置为“0440”,一切都很好。 (2认同)

Ian*_*anC 11

显然,/etc/sudoers出于安全原因,文件中包含的文件必须具有 0440 权限。这样,只有 root 可以编辑文件,并且只有所有者和所有者组的成员可以读取它,从而不太可能将文件用作提升权限的尝试。

您可以在 上查看对包含文件的要求/etc/sudoers.d/README,但另外两个要求是文件名不应以 a .(隐藏文件)开头或以 a ~(备份文件约定)结尾。

感谢@steeldriver 确认理论并找到/etc/sudoers.d/README文件!

  • 这就是为什么在编辑 `/etc/sudoers.d` 中的文件时应该使用 `visudo -f /etc/sudoers.d/foo` 的原因。 (2认同)

Cyb*_*ran 5

问题是不是由IanC作为回答,引起文件权限(sudo愉快地接受了由所拥有的文件root:root 0644,因为我现在可以确认,虽然它当然应该是root:root 0440出于安全原因),但是通过的末尾为新行文件前面有一个 windows 风格的行尾 ( \r\n)。

sudo只接受\n作为行结尾。