2015-06-22 3 views
4

Я собираюсь вставить последние штрихи в веб-приложение, которое позволяет пользователям запускать сеансы Docker, в которых размещаются различные приложения. Когда я рассматриваю безопасность, одна из мыслей, которая произошла со мной, заключается в том, что пользователи могут привести всю систему - все размещенные сеансы для всех пользователей - к остановке заземления, просто записав слишком много данных в файловую систему.Улучшение безопасности докеров

Чтобы избежать этой меры, я решил настроить виртуальный диск с ограниченным пространством, который используется для сопоставления (через Docker) папок, к которым пользователь может получить доступ. Точные папки, которые отображаются, зависят от того, что размещается в контейнере Docker. Например, при размещении базы данных MySQL я сопоставляю папку /var/lib/mysql, чтобы предотвратить разрастание БД в неконтролируемом режиме.

До сих пор так хорошо, однако, я понял всего несколько часов назад, что другая, универсальная, слабая ссылка - это папка /tmp. Поэтому я попытался сопоставить эту папку и с виртуальным диском. Наивно сначала - принадлежало www-данным и chmod'd - 775: это быстро остановило все. Я не мог запускать контейнеры с php5, mysql, memcached или даже большинством вещей.

После ковыряться на моем «реальном» сервере я изменил отображенный /tmp папку для принадлежащего корня и chmod'd его до 777, который имел все снова работает.

В процессе я обнаружил кое-что еще:

  • Docker использует AUFS файловую систему. Так, например, «обычная» папка /tmp в сеансе Docker будет находиться в AUFS.
  • Не проблема, которую вы могли бы сказать. Однако AUFS не обладает такими же возможностями, как, например, EXT4.
  • Приведу лишь один пример: Я хотел бы использовать расширенную файловую систему атрибутов apt-get install attr, а затем setfattr -n... на некоторые из файлов, которые входят в мою /tmp папку

Аккуратный вещь - если сопоставить объем Докер сохраняет файловую систему в папке, которая была сопоставлена. Таким образом, если я настрою свой виртуальный диск как EXT4 и нарисую на нем папку /tmp в сеансе Docker, то папка /tmp внутри сессии будет EXT4.

Однако все это брошено больше вопросов, чем он ответил

  1. Каковы точные риски, порождаемые позволяя пользователям докер сессии для записи на диск бесконтрольно?
  2. Открыв выпуск AUFS vs EXT4, я googl'd и нашел this в качестве первого удара. Похоже, просто место, чтобы понять все проблемы, но, как вы увидите, эта ссылка никуда не ведет.
  3. Что такое Право собственности и листы для папки '/tmp?
  4. Я сохраняю другие проблемы картирования /tmp, сменив его владельца и chmod'ing?
  5. И, наконец, существуют ли другие папки ОС, которые могут стать жертвами злоупотреблений и достойными соперниками за сопоставление с виртуальным диском ограниченного размера?

Я должен также упомянуть:

  • Все эти приключения находятся на 14.10 установки Ubuntu.
  • Что происходит, когда на виртуальном диске заканчивается дисковое пространство? - Я запускаю задание CRON, которое предупреждает пользователя, когда их дисковое пространство работает на низком уровне.

Я многому научился о Docker и Linux за последние несколько месяцев, но я далек от того, чтобы быть экспертом. Я был бы наиболее обязан всем, кто мог бы заполнить пробелы здесь и ответить на некоторые из этих вопросов.

+0

У меня нет точных ответов на ваш вопрос, потому что я все еще учусь об этих деталях сам, но я пришел, чтобы понизиться то, что я думаю, что может быть полезным. Чтение через следующий документ помогло обучить меня рискам запуска демона докеров и его конфигурации, а также конфигурации хост-машины: https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.11.0_Benchmark_v1.0.0.pdf Очевидно, что код приложения также должен быть уязвимым. – rdgd

ответ

0

Некоторые ответы на ваши сообщения;

  1. Это одна из самых больших проблем Докера. Но распространенная практика в этой ситуации состоит в создании устройства NAS (Network Attached Storage) и монтирования контейнера внутри этого диска, так что хост будет покрывать время безотказной работы, если хранилище заполнено.
  2. Об этом, да, это проблема с меньшими накладными расходами, потому что в AUFS существует только система слоев, которая «сохраняет только изменения». Вот почему вы можете столкнуться с такими проблемами.
  3. Для /tmp правильные разрешения будут прочитаны + писать для всех.
  4. Я не могу ответить на этот вопрос
  5. Постарайтесь не подключать контейнеры к корневому тому таким образом, чтобы предотвратить многие вещи с самого начала. Но всегда будьте осторожны с этими папками;

    /bin /tmp /boot /proc