• # Root

    Posté par . 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) :

    user: 65534:65534 # ici nobody, mais ça peut être n’importe quoi
    read_only: true
    cap_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 :)