docker 中的 sudo (在 fedora 上)要求输入密码,在主机上它不要求输入密码

docker 中的 sudo (在 fedora 上)要求输入密码,在主机上它不要求输入密码

我正在 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被添加到foosudo组中。
  • uidgid设置为 的值999
  • 主目录设置为/home/foo
  • 外壳设置为/bin/bash
  • sed命令对文件进行内联更新,/etc/sudoers以允许foo用户root无密码访问该sudo组。
  • sed命令禁用#includedir允许子目录中的任何文件覆盖这些内联更新的指令。

相关内容