Самый простой и большая часть масштабируемого способа изолировать ImageMagick в VM или контейнере

Для пользователей моего веб-сервиса, работающего на Сервере 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
3
задан 13 September 2018 в 22:31

2 ответа

Контейнеры в общем

Докер-контейнер или KVM ведет себя как реальная система. Вы даже можете зайти в контейнер и внести в него изменения, без проблем. Работайте с bash, устанавливайте пакеты и т. Д. (На случай, если вы что-то забыли или хотите что-то проверить).

Преимущество контейнера состоит в том, что его гораздо проще модернизировать и перестроить. С вашим собственным реестром докеров, вы могли бы иметь разные версии вместе с другими.

Хранить пользовательские данные в дополнительном контейнере.

Я бы посоветовал хранить данные в контейнере данных, прикрепленном к док-контейнеру. Это не позволит контейнеру иметь точки монтирования, которые окажутся в папке на вашем реальном сервере. Вместо этого используйте контейнер данных и присоединяйте / отсоединяйте контейнер данных, когда вы перестраиваете докер-контейнер ImageMagick и снова присоединяете к нему контейнер данных в любой момент времени. Данные не потеряны, но у вас есть все файлы в контейнере, который также можно легко переместить.

О безопасности

Как уже упоминалось выше, контейнер ведет себя как реальная система, поэтому он также может быть взломан как реальная система. Означает, что ваш злоумышленник все еще может получить данные клиента и получить root-доступ к этому компьютеру. Вырваться из контейнера Docker не так просто, но это возможно из-за отсутствия патчей и т. Д. У меня самого есть простой прием, который я использую, чтобы усложнить атакующему. Я просто перестраиваю контейнер за crontab каждые несколько часов / день. Поэтому, если злоумышленник получит доступ, ему придется начать все заново через несколько часов / день спустя.

Также попробуйте прикрепить к нему контейнер nginx, чтобы ImageMagick запускался обратным прокси-сервером вместо предоставления доступа к самому ImageMagick. Создать производственную цепочку контейнеров легко: nginx -> Imagemagick -> контейнер данных

Таким образом, вы получите 2-3 контейнера, которые объединены в изолированную производственную цепочку.

Hth,

Jens

P.S .: Чтобы получить более подробную информацию, вам нужно больше знаний о докере. Но, на мой взгляд, предложенный вами путь правильный.

P.P.S .: Вы также можете оставить его в старом стиле и просто использовать среду chroot. Но сложнее в настройке, в обслуживании, на самом сервере.

0
ответ дан 1 December 2019 в 20:16

Вы можете использовать один контейнер, который изменяет размеры всех образов, расположенных в смонтированной папке. Вам необходимо внести изменения в слайд в файле 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.

0
ответ дан 1 December 2019 в 20:16

Другие вопросы по тегам:

Похожие вопросы: