使用命令行为用户添加sudo权限(无需密码)

4

我正在从ubuntu:bionic镜像创建一个docker文件。

我想要一个有sudo权限的ubuntu用户。

这是我的Dockerfile:

FROM ubuntu:bionic

ENV DEBIAN_FRONTEND noninteractive

# Get the basic stuff
RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get install -y \
    sudo

# Create ubuntu user with sudo privileges
RUN useradd -ms /bin/bash ubuntu && \
    usermod -aG sudo ubuntu

# Set as default user
USER ubuntu
WORKDIR /home/ubuntu

ENV DEBIAN_FRONTEND teletype

CMD ["/bin/bash"]

但是使用这种方法,我需要编写Ubuntu用户的密码。

有一种方法可以在命令行中向sudoers文件的sudo组添加NOPASSWD子句吗?


1
在Docker中,您不应该需要使用sudo:容器只运行一个进程,当您启动它时,可以在docker run命令行中明确指定用户(或者,如果您需要调试shell,则docker exec -u可以将其作为备用用户启动)。您要打包的应用程序是什么,它为什么需要sudo如何在Docker容器内使用sudo?对您来说是否有足够的信息? - David Maze
你是对的。但这不是我的决定。 - icalvete
1个回答

13

首先,建议不在Docker中使用sudo。您可以使用USER+gosu来设计您的行为。

但是,如果由于某些无法控制的原因,您仍然坚持要使用sudo,请在设置普通用户后添加以下代码:

RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

所以对于您的情况,可行的方案是:
FROM ubuntu:bionic

ENV DEBIAN_FRONTEND noninteractive

# Get the basic stuff
RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get install -y \
    sudo

# Create ubuntu user with sudo privileges
RUN useradd -ms /bin/bash ubuntu && \
    usermod -aG sudo ubuntu
# New added for disable sudo password
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

# Set as default user
USER ubuntu
WORKDIR /home/ubuntu

ENV DEBIAN_FRONTEND teletype

CMD ["/bin/bash"]

测试效果:

$ docker build -t abc:1 .
Sending build context to Docker daemon  2.048kB
Step 1/9 : FROM ubuntu:bionic
......
Successfully built b3aa0793765f
Successfully tagged abc:1

$ docker run --rm abc:1 cat /etc/sudoers
cat: /etc/sudoers: Permission denied

$ docker run --rm abc:1 sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
......
#includedir /etc/sudoers.d
%sudo ALL=(ALL) NOPASSWD:ALL

通过使用sudo,我们已经可以执行需要root权限的命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接