Для пользователей моего веб-сервиса, работающего на Сервере Ubuntu 16.04 или 18.04, я хотел бы интегрировать функции из таких полезных программ как ImageMagick. Например, я хотел бы обрезать их фотографии профиля или создать миниатюры.
Но потому что программное обеспечение в целом имеет ошибки, и особенно ImageMagick имеет многие из них [1] [2], он был бы, очевидно, лучше всего для изоляции казни ImageMagick от остальной части сервера, правильно?
Таким образом, что лучший способ состоит в том, чтобы изолировать ImageMagick от перспективы безопасности, приняв во внимание, что установка должна быть максимально простой и что ImageMagick должен будет выполнить каждые несколько секунд (или даже многократно в секунду в пиковое время)? Идеально, ImageMagick был бы не только изолирован от хост-машины, но казней ImageMagick (с данными, которыми они управляют на), был бы изолирован друг от друга также.
Я предполагаю, что можно использовать VM или контейнеры (например, Докер) для этого? Действительно ли контейнеры в лучшем костюме, потому что они быстрее, чтобы настроить и разъединить снова?
Кроме того, что состоит в том, чтобы начать хороший путь? Я смотрел на различные руководства, но не знаю, где точно запустить и в каких компонентах я нуждаюсь.
Что я имею, до сих пор следующее. Хотя я не знаю, безопасно ли это на самом деле, и дорогостоящая установка пакетов должна только быть сделана однажды, если это возможно. Кроме того, я не уверен, допускает ли это на самом деле параллельное выполнение многочисленными пользователями.
Dockerfile:
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y imagemagick
VOLUME ["/my-images"]
WORKDIR /my-images
ENTRYPOINT ["convert"]
Инициализация:
docker build -t my-imagemagick .
Использование:
docker run --rm --volume=$(pwd):/my-images:rw my-imagemagick -resize 500 /my-images/input.jpg /my-images/output.jpg
Докер-контейнер или KVM ведет себя как реальная система. Вы даже можете зайти в контейнер и внести в него изменения, без проблем. Работайте с bash, устанавливайте пакеты и т. Д. (На случай, если вы что-то забыли или хотите что-то проверить).
Преимущество контейнера состоит в том, что его гораздо проще модернизировать и перестроить. С вашим собственным реестром докеров, вы могли бы иметь разные версии вместе с другими.
Я бы посоветовал хранить данные в контейнере данных, прикрепленном к док-контейнеру. Это не позволит контейнеру иметь точки монтирования, которые окажутся в папке на вашем реальном сервере. Вместо этого используйте контейнер данных и присоединяйте / отсоединяйте контейнер данных, когда вы перестраиваете докер-контейнер ImageMagick и снова присоединяете к нему контейнер данных в любой момент времени. Данные не потеряны, но у вас есть все файлы в контейнере, который также можно легко переместить.
Как уже упоминалось выше, контейнер ведет себя как реальная система, поэтому он также может быть взломан как реальная система. Означает, что ваш злоумышленник все еще может получить данные клиента и получить root-доступ к этому компьютеру. Вырваться из контейнера Docker не так просто, но это возможно из-за отсутствия патчей и т. Д. У меня самого есть простой прием, который я использую, чтобы усложнить атакующему. Я просто перестраиваю контейнер за crontab каждые несколько часов / день. Поэтому, если злоумышленник получит доступ, ему придется начать все заново через несколько часов / день спустя.
Также попробуйте прикрепить к нему контейнер nginx, чтобы ImageMagick запускался обратным прокси-сервером вместо предоставления доступа к самому ImageMagick. Создать производственную цепочку контейнеров легко: nginx -> Imagemagick -> контейнер данных
Таким образом, вы получите 2-3 контейнера, которые объединены в изолированную производственную цепочку.
Hth,
Jens
P.S .: Чтобы получить более подробную информацию, вам нужно больше знаний о докере. Но, на мой взгляд, предложенный вами путь правильный.
P.P.S .: Вы также можете оставить его в старом стиле и просто использовать среду chroot. Но сложнее в настройке, в обслуживании, на самом сервере.
Вы можете использовать один контейнер, который изменяет размеры всех образов, расположенных в смонтированной папке. Вам необходимо внести изменения в слайд в файле Docker и создать образ Docker.
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y imagemagick
VOLUME ["/my-images"]
WORKDIR /my-images
CMD ["magick", "-help"]
Создание образа Docker.
docker build -t my-imagemagick .
Запустите Docker-контейнер и измените размер изображений, находящихся в папке / my-images, сразу.
docker run --rm -v "$( pwd ):/my-images" my-imagemagick find -type f -iname '*.jpg' -o -iname '*.jpeg' -exec convert {} -verbose -resize "500x500>" {} \;
Вы также можете запустить команду как cronjob, чтобы запланировать ее. Чтобы позволить нескольким пользователям в вашей системе запускать эту команду. Вам необходимо добавить пользователей в группу Docker.