Безопасный вычислительный режим , также известный как Seccomp, представляет собой функцию ядра Linux, которая улучшает несколько функций безопасности, чтобы помочь запустить Docker в более безопасной среде.
Это больше похоже на среду песочницы, которая не только действует как брандмауэр для Syscalls Но также позволяет вам ограничивать действия, доступные в контейнерах Docker, к ядру Linux Host.
В этом руководстве вы узнаете, как запустить контейнер с профилем TESCOMP.
Чтобы начать работу с этим руководством, вам нужно следующее:
- Хозяин Linux с привилегиями Sudo.
- TESCOMP включен в ядре Linux.
- Последний докер
Чтобы проверить, если Seccomp поддерживает следующую команду Kernel, выполните следующую команду в терминале вашего хоста:
$ grep SECCOMP /boot/config-$(uname -r) CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y CONFIG_SECCOMP=y
Кроме того, вы также можете запустить:
$ grep CONFIG_SECCOMP= /boot/config-$(uname -r) CONFIG_SECCOMP=y
В обоих направлениях вы видите Config_seccomp = y
В окне Host Terminal. Это означает, что он поддерживает это.
Вернуться в 2016 году, с версией 1.10, Docker применил профиль Seccomp по умолчанию. С тех пор профиль продолжал обновлять, а теперь есть 51 Системные звонки или SESCalls И не заставляет по умолчанию беледно и эффективно заблокирован. Однако вы можете использовать свой пользовательский профиль для разблокировки нужных SESCalls, которые мы будем охватывать позже в этом руководстве.
Теперь есть пара способов запуска контейнера Docker с профилем Seccomp, либо вы можете запустить контейнер Docker с профилем по умолчанию через командную строку, или указать определенный пользовательский профиль в .json Формат, или вы можете указать свой профиль Seccomp в файле конфигурации Daemon.
Secomp Profile Profile:
Если вы не укажете профиль Seccomp, то Docker использует встроенный Seccomp и конфигурацию ядра. Чтобы проверить это, вы можете запустить следующую команду:
$ docker run -it --rm --name alpine-test alpine /bin/sh Unable to find image 'alpine:latest' locally latest: Pulling from library/alpine e6b0cf9c0882: Pull complete Digest: sha256:2171658620155679240babee0a7714f6509fae66898db422ad803b951257db78 Status: Downloaded newer image for alpine:latest
Чтобы увидеть, если фильтр TESCOMP загружен внутри альпийского контейнера:
/ # grep Seccomp /proc/$$/status Seccomp: 2
Вот у вас есть Греп
Псевдо-файловая система для доступа к данным ядра, которая указывает на то, что фильтр Seccomp по умолчанию был нанесен внутри бегового контейнера.
Пользовательский профиль Seccomp:
Существуют сценарии, где вы хотите переопределить профиль по умолчанию, который дает вам дополнительный контроль и возможности для воспроизведения. В следующем примере вы собираетесь использовать свой собственный пользовательский профиль.
Мы собираемся загрузить официальный профиль Docker по умолчанию и внесите изменения в него:
$ wget https://raw.githubusercontent.com/docker/labs/master/security/seccomp/seccomp-profiles/default.json -O /path/to/file/your-custom-profile.json
Как только у вас есть .json Файл с вами, пришло время вносить изменения в файл Ваш пользовательский профиль .JSON . Для этого руководства мы просто будем ограничивать мкдир
Команда внутри контейнера. Чтобы сделать это, откройте файл и найдите Мкдир
Системный вызов и удалите все ссылки на Мкдир
В файл, который мог бы выглядеть что-то вроде этого:
... { "name": "mkdir", "action": "SCMP_ACT_ALLOW", "args": [] }, ...
Как только вы редактируете профиль, попробуйте запустить контейнер Docker с ним:
$ docker run -it --rm --security-opt seccomp=/path/to/file/your-custom-profile.json --name alpine-custom-seccomp alpine /bin/sh
/ # mkdir test mkdir: can't create directory 'test': Operation not permitted / #
Вновь созданный контейнер профиля не позволяет вам запустить Мкдир
Syscall Отказ
Таким образом, вы можете создать свой собственный пользовательский профиль и вносить изменения в него согласно вашему требованию, так как есть ряд опеределей, которые вы можете ограничить как Chowne
, камин
и так далее..
Запустите контейнер без TESCOMP:
По какой-то причине, если вы хотите запустить контейнер без профиля Seccomp, вы можете переопределить это, используя --security-opt
Флаг с неверно
флаг:
$ docker run -it --rm --security-opt seccomp=unconfined --name alpine-wo-seccomp alpine /bin/sh
Чтобы посмотреть, бежит ли ваш контейнер Docker без профиля Seccomp, используйте это:
/ # grep Seccomp /proc/$$/status Seccomp: 0
Вы увидите Seccomp: 0
Это означает, что контейнер работает без профиля Seccomp по умолчанию. Обратите внимание, что не рекомендуется делать, если вы не знаете, что вы делаете, так как определенная контур защиты будет широко открыта и может быть использовано.
В качестве альтернативы вы можете использовать --привили
Флаг, который также может отключить Seccomp, даже если вы укажете пользовательский профиль Seccomp.
Оригинал: «https://dev.to/appfleet/hardening-docker-container-using-seccomp-security-profile-f5p»