1. ホーム
  2. linux

[解決済み] Dockerイメージ内のユーザーを非rootユーザーに切り替える

2022-11-06 06:37:05

質問

SSH証明書をセットアップするために、ユーザーをtomcat7ユーザーに切り替えようとしています。

このとき su tomcat7 を実行しても、何も起こりません。

whoami を実行した後、まだrootになる。 su tomcat7

を実行すると more /etc/passwd とすると、以下のような結果が得られ、tomcat7ユーザが存在することが明らかになりました。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:104::/var/run/dbus:/bin/false
colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false
saned:x:103:106::/home/saned:/bin/false
tomcat7:x:104:107::/usr/share/tomcat7:/bin/false

私が回避しようとしているのは、Hudsonのこのエラーです。

Command "git fetch -t git@________.co.za:_______/_____________.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Host key verification failed.

これは私のDockerfileで、既存のhudsonのwarファイルとtarで保存された設定を受け取り、イメージを構築します。hudsonは正常に動作しますが、ユーザーtomcat7用の証明書が存在しないため、gitにアクセスできません。

FROM debian:wheezy

# install java on image
RUN apt-get update
RUN apt-get install -y openjdk-7-jdk tomcat7

# install hudson on image
RUN rm -rf /var/lib/tomcat7/webapps/*
ADD ./ROOT.tar.gz /var/lib/tomcat7/webapps/

# copy hudson config over to image
RUN mkdir /usr/share/tomcat7/.hudson
ADD ./dothudson.tar.gz /usr/share/tomcat7/
RUN chown -R tomcat7:tomcat7 /usr/share/tomcat7/

# add ssh certificates
RUN mkdir /root/.ssh
ADD ssh.tar.gz /root/

# install some dependencies
RUN apt-get update
RUN apt-get install --y maven
RUN apt-get install --y git
RUN apt-get install --y subversion

# background script
ADD run.sh /root/run.sh
RUN chmod +x /root/run.sh

# expose port 8080
EXPOSE 8080


CMD ["/root/run.sh"]

Dockerの最新版(Docker version 1.0.0, build 63fe64c/1.0.0) を使用していますが、これはDockerのバグでしょうか、それともDockerfileに何か記入漏れがあるのでしょうか?

どのように解決するのですか?

この場合 su の中で ドッカーファイル を使用する必要があります。 USER という命令をDockerfileに記述してください。

の各ステージで Dockerfile ビルドの各段階で、新しいコンテナが作成されます。

例えば

RUN whoami
RUN su test
RUN whoami

これだと、決してユーザーが test になることはありません。新しいコンテナは2番目のwhoamiで生成されます。出力は両方とも root になります (もちろん、事前に USER を実行しない限り)。

しかし、もしあなたがそうするなら

RUN whoami
USER test
RUN whoami

あなたは root 次に test .

また、sudo を使って別のユーザーとしてコマンドを実行するには、次のようにします。

sudo -u test whoami

でも、公式にサポートされている命令を使った方が良さそうです。