J'essaie de passer d'utilisateur à utilisateur Tomcat7 afin de configurer les certificats SSH.
Quand je fais su Tomcat7
, Rien ne se passe.
whoami
reste encore root après avoir fait su Tomcat7
Faire un more /etc/passwd
_, Le résultat suivant indique clairement qu’il existe un utilisateur 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
Ce que j'essaie de contourner est cette erreur dans Hudson:
Command "git fetch -t git@________.co.za:_______/_____________.git +refs/heads/*:refs/remotes/Origin/*" returned status code 128: Host key verification failed.
Ceci est mon Dockerfile, il faut un fichier hudson war existant et une configuration tarée et construit une image, hudson fonctionne correctement, il ne peut tout simplement pas accéder à git car les certificats n'existent pas pour l'utilisateur Tomcat7.
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"]
J'utilise la dernière version de Docker (version 1.0.0 de Docker, version 63fe64c/1.0.0). S'agit-il d'un bogue dans Docker ou manque-t-il quelque chose dans mon fichier Docker?
Vous ne devez pas utiliser su
dans un fichier docker , toutefois, vous devez utiliser l'instruction USER
dans le fichier docker.
À chaque étape de la compilation Dockerfile , un nouveau conteneur est créé afin que toute modification apportée à l'utilisateur ne soit pas conservée à l'étape de construction suivante.
Par exemple:
RUN whoami
RUN su test
RUN whoami
Cela ne dirait jamais que l'utilisateur serait test
car un nouveau conteneur est créé le 2ième whoami. Le résultat serait root sur les deux (à moins bien sûr que vous utilisiez préalablement USER).
Si toutefois vous le faites:
RUN whoami
USER test
RUN whoami
Vous devriez voir root
puis test
.
Sinon, vous pouvez exécuter une commande en tant qu’utilisateur différent avec Sudo avec quelque chose comme:
Sudo -u test whoami
Mais il semble préférable d'utiliser l'instruction officielle prise en charge.
En tant qu'approche différente de l'autre réponse, au lieu d'indiquer l'utilisateur lors de la création de l'image sur le fichier Dockerfile, vous pouvez le faire via une ligne de commande sur un conteneur particulier, commande par commande.
Avec docker exec
, utilisation --user
pour spécifier le compte d'utilisateur que le terminal interactif utilisera (le conteneur doit être en cours d'exécution et l'utilisateur doit exister dans le système conteneurisé):
docker exec -it --user [username] [container] bash
Voir https://docs.docker.com/engine/reference/commandline/exec/
Vous devriez aussi pouvoir faire:
apt install Sudo
Sudo -i -u Tomcat
Ensuite, vous devriez être l'utilisateur Tomcat. La distribution Linux que vous utilisez n'est pas claire, mais cela fonctionne avec Ubuntu 18.04 LTS, par exemple.