我尝试一下

我尝试一下

我已经进行了配置,sudo以便我可以在没有密码的情况下运行命令,但前提是我位于特定组中。但它仍然要求输入密码。

我尝试一下

#↳ sudo --group docker-user -s
#↳ sudo -k #drop sudo credentials
#↳ groups
docker-user sudo …
#↳ sudo --group docker /usr/bin/docker images
[sudo] password for bob

我不期待密码。其docker.sudo目的是允许 group作为 groupdocker-user运行,无需密码。dockerdocker

我做错了什么?是什么阻止它工作。


我们看一下配置

#↳ sudo cat /etc/sudoers.d/docker.sudo
Cmnd_Alias DOCKER = /usr/bin/docker
%docker-user ALL = (:docker) NOPASSWD : DOCKER

#↳ sudo cat /etc/sudoers #comments removed
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

更多测试

#↳ groups
docker_user sudo …
#↳ sudo -ll
Matching Defaults entries for richard on delor-1:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User richard may run the following commands on delor-1:

Sudoers entry:
    RunAsUsers: ALL
    RunAsGroups: ALL
    Commands:
        ALL

答案1

为了扩展@ctrl-alt-delor的答案,该页面提到了在(版本)部分下sudoers man找到的辅助规则的处理规则/etc/sudoers.dIncluding other files from within sudoerssudo1.9.1

sudo 将暂停当前文件的处理并读取 /etc/sudoers.d 中的每个文件,跳过以“~”结尾或包含“.”的文件名。字符以避免导致包管理器或编辑器临时/备份文件出现问题。

然而,手册本节的第一句话提到(包含 a )sudoers中的机器本地文件可以直接通过 包含,这让我相信是/etc/sudoers.local.@include /etc/sudoers.local.仅有的对于那些通过 包含的文件有问题@includedir。所以,我怀疑原始/etc/sudoers文件是否有以下内容

@include /etc/sudoers.d/docker.sudo

问题不会出现(但当然目录的重点/etc/sudoers.d是使用@includedir...)

答案2

我发现了问题:由于某种原因,如果( /etc/sudoers.d)中的辅助文件名称中包含一个点,那么它就是不是包括。

解决方案

(
  cd /etc/sudoers.d
  sudo mv docker.sudo docker_sudo
)

相关内容