Pour les utilisateurs de mon service Web fonctionnant sur le serveur Ubuntu 16.04 ou 18.04, j'aimerais intégrer des fonctionnalités de programmes utiles tels que ImageMagick. Par exemple, j'aimerais recadrer leurs photos de profil ou créer des vignettes.
Mais parce que les logiciels en général ont des bogues, et en particulier ImageMagick a beaucoup d'eux [1] [2] il serait évidemment préférable d'isoler l'exécution d'ImageMagick du reste du serveur, non ?
Quelle est donc la meilleure façon d'isoler ImageMagick du point de vue de la sécurité, en tenant compte du fait que la configuration doit être aussi simple que possible et qu'ImageMagick devra s'exécuter toutes les quelques secondes (voire plusieurs fois par seconde aux heures de pointe) ? Idéalement, ImageMagick devrait non seulement être isolé de la machine hôte, mais les exécutions d'ImageMagick (avec les données sur lesquelles elles opèrent) devraient également être isolées les unes des autres.
Je suppose que l'on peut utiliser une VM ou des conteneurs (par exemple Docker) pour cela ? Les conteneurs sont-ils mieux adaptés parce qu'ils sont plus rapides à mettre en place et à démonter ?
De plus, quelle est la bonne façon de commencer ? J'ai jeté un coup d'œil à divers manuels, mais je ne sais pas exactement par où commencer et de quels composants j'ai besoin.
Ce que j'ai jusqu'à présent est le suivant. Bien que je ne sache pas si c'est réellement sécurisé, et l'installation coûteuse de paquets ne devrait être faite qu'une seule fois, si possible. De plus, je ne suis pas sûr que cela permette réellement une exécution parallèle par plusieurs utilisateurs.
Dockerfile :
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y imagemagick
VOLUME ["/my-images"]
WORKDIR /my-images
ENTRYPOINT ["convert"]
Initialisation :
docker build -t my-imagemagick .
Utilisation :
docker run --rm --volume=$(pwd):/my-images:rw my-imagemagick -resize 500 /my-images/input.jpg /my-images/output.jpg