J’ai regardé rapidement les fichiers de build et de config et j’ai juste une remarque : tes containers tournent en root avec pour seule sécurité le « chroot » de Docker.
Depuis que je bosse avec Kubernetes, j’ai pris l’habitude de faire en sorte que mes containers puisse tourner dans n’importe quel utilisateur non-privilégié et dans un container en lecture seul.
Avec docker-compose, ça serait par exemple pouvoir ajouter ça dans la définition des containers (ce que je te conseille de faire dans ta config) :
user:65534:65534# ici nobody, mais ça peut être n’importe quoiread_only:truecap_drop:-ALL
De ce que je vois, ça ne devrait pas poser de problème et ça éviterait de faire tourner du RoR en root. Pour nginx c’est un peux plus compliqué, faut lui faire écrire ses fichier dans un dossier où il a les droit d’écrire, mais ça se fait aussi (au besoin je peux te donner un coup de main).
Aussi, vu que linuxfr-image est un binaire, tu pourrais utiliser le muti-stage de Docker et avoir une image final qui ne contienne que ce binaire (par exemple avec distroless de Google) :
FROM debian:stretch-slim as builder
WORKDIR /linuxfr-img
# Install dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
golang git ca-certificates \
&& apt-get clean
# Install linuxfr-img
ENV GOPATH=/linuxfr-img/go
RUN go get -u github.com/linuxfrorg/img-LinuxFr.org
FROM gcr.io/distroless/base-debian10
LABEL maintainer="adrien@adorsaz.ch"
LABEL version="1.0"
LABEL description="Run LinuxFr image caching service for LinuxFr.org Ruby on Rails website"
COPY --from=builder /linuxfr-img/bin/dlfp-image /dlfp-image
EXPOSE 8000
# Tu laisse le soin à l’utilisateur de changer l’option -r au déploiement
ENTRYPOINT ["img-LinuxFr.org", "-a", "0.0.0.0:8000", "-r", "redis://"]
Pas testé, c’est juste pour l’exemple.
En tout cas, c’est cool si ça permet de faciliter le développement :)
# Root
Posté par Anonyme . En réponse au journal LinuxFr avec Docker. Évalué à 10.
J’ai regardé rapidement les fichiers de build et de config et j’ai juste une remarque : tes containers tournent en root avec pour seule sécurité le « chroot » de Docker.
Depuis que je bosse avec Kubernetes, j’ai pris l’habitude de faire en sorte que mes containers puisse tourner dans n’importe quel utilisateur non-privilégié et dans un container en lecture seul.
Avec docker-compose, ça serait par exemple pouvoir ajouter ça dans la définition des containers (ce que je te conseille de faire dans ta config) :
De ce que je vois, ça ne devrait pas poser de problème et ça éviterait de faire tourner du RoR en root. Pour nginx c’est un peux plus compliqué, faut lui faire écrire ses fichier dans un dossier où il a les droit d’écrire, mais ça se fait aussi (au besoin je peux te donner un coup de main).
Aussi, vu que
linuxfr-imageest un binaire, tu pourrais utiliser le muti-stage de Docker et avoir une image final qui ne contienne que ce binaire (par exemple avec distroless de Google) :Pas testé, c’est juste pour l’exemple.
En tout cas, c’est cool si ça permet de faciliter le développement :)