我正在 docker 中测试一些东西,它需要 sudo 而不输入密码,我在 /etc/sudoers 中添加了所需的条目。之后在主机上它不会要求输入密码。但在 docker 的情况下它仍然要求输入密码。顺便说一句,我在 Fedora 24 主机上的 VirtualBox VM 中运行 fedora 24。
详细信息如下...
abc@webster $ sudo bash
root@webster $ cat /etc/sudoers
## Sudoers allows particular users to run various commands as
...
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
%users ALL=(ALL) ALL
%admin ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL:ALL) ALL
abc ALL=(ALL) NOPASSWD: ALL
#abc ALL=(ALL) ALL
abc@webster $ id
uid=1000(abc) gid=1000(abc) groups=1000(abc),10(wheel),100(users),977(docker),1001(admin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
abc@fc-docker $ sudo bash
[sudo] password for abc:
答案1
添加此内容作为答案以便更加清晰。Docker 实例有自己的 /etc/sudoers。需要更新以允许无需密码即可使用 sudo。以“docker exec -it fc-docker bash”身份登录 docker 实例,您将以 root 身份登录。然后将“abc ALL=(ALL) NOPASSWD: ALL”添加到 /etc/sudoers/。注销并重新登录,我们可以无需密码即可使用 sudo。
答案2
下面我演示了如何使用基础镜像设置非 root 用户无密码访问 sudo 组ubuntu:18.04
:
RUN \
groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
echo "Customized the sudoers file for passwordless access to the foo user!" && \
echo "foo user:"; su - foo -c id
上述代码会发生什么情况:
- 用户和组
foo
已创建。 - 该用户
foo
被添加到foo
和sudo
组中。 - 和
uid
被gid
设置为 的值999
。 - 主目录设置为
/home/foo
。 - 外壳设置为
/bin/bash
。 - 该
sed
命令对文件进行内联更新,/etc/sudoers
以允许foo
用户root
无密码访问该sudo
组。 - 该
sed
命令禁用#includedir
允许子目录中的任何文件覆盖这些内联更新的指令。