代码之家  ›  专栏  ›  技术社区  ›  Jim

在Alpine Docker容器中创建用户的正确方法,以便sudo正确工作

  •  0
  • Jim  · 技术社区  · 6 年前

    尝试执行时 sudo 在码头集装箱中使用 高山3.8 我得到以下输出。

    我使用登录到容器 docker exec -i -t MYIMAGE /bin/bash

    bash-4.4$ whoami
    payara
    bash-4.4$ sudo -s
    bash-4.4$ whoami
    payara
    bash-4.4$ su root
    su: incorrect password
    bash-4.4$
    

    我的docker文件包含以下与用户相关的命令,以尝试为payara专门设置用户。如果可能的话,我希望sudo能正常工作。

    文档文件

    FROM "alpine:latest"
    
    ENV LANG C.UTF-8
    ENV http_proxy 'http://u:p@160.48.234.129:80'
    ENV https_proxy 'http://u:p@160.48.234.129:80'
    
    RUN apk add --no-cache bash gawk sed grep bc coreutils git openssh-client libarchive libarchive-tools busybox-suid sudo            
    
    RUN addgroup -S payara && adduser -S -G payara payara
    RUN echo "payara ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
    
    # CHANGE TO PAYARA USER
    USER payara
    
    ... rest of setup.
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Danila Kiver    6 年前

    man sudo :

     -s, --shell
                 Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry.
    

    你两个都没有 SHELL 变量集,或不正确(交互)的默认shell集 /etc/passwd 为用户 payara . 这是因为您正在创建一个系统用户( -S )-此用户具有默认外壳 /bin/false (只带退出代码退出) 1 -你可以查一下 echo $? 失败后 sudo -s )

    你可以用不同的方式克服这一点:

    a)指定 壳牌 变量:

    bash-4.4$ SHELL=/bin/bash sudo -s
    bed662af470d:~# 
    

    b)使用 su ,将使用默认值 root 壳牌:

    bash-4.4$ sudo su -
    bed662af470d:~# 
    

    c)只需运行所需的特权命令 sudo 直接生成,而不生成交互式外壳。