我已经进行了配置,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
运行,无需密码。docker
docker
我做错了什么?是什么阻止它工作。
我们看一下配置
#↳ 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.d
Including other files from within sudoers
sudo
1.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
)