Запуск контейнера без прав внесения изменений в корневой файловой системе#
В данном режиме запрещено запускать контейнер с правами внесения изменений в корневой файловой системе. При активации этого режима злоумышленник не сможет записать посторонние исполняемые файлы на диск в корневую файловую систему.
Режим настраивается в приложении и активируется настройками в скриптах запуска контейнера. В переменной окружения WRITABLE_PATH либо в параметре writable-path в файле keycloak.conf задается директория, в которую монтируется директория с правом записи файлов. По умолчанию данная переменная принимает значение "/tmp/kcse". Контейнер определяет режим запуска автоматически.
При запуске приложения в Docker при помощи утилиты docker-compose необходимо при определении сервиса указать параметр read_only: true и примонтировать том (см. volumes) в директорию заданную в переменной WRITABLE_PATH.
#docker-compose.yml
services:
keycloak:
image: keycloak.se:1.0
read_only: true
container_name: keycloak
environment:
KEYCLOAK_LOGLEVEL: "INFO"
...
volumes:
- ./tmp:/tmp
При запуске приложения в Kubernetes/Openshift необходимо при определении сервиса указать параметр "readOnlyRootFilesystem: true" и примонтировать том (см. volumeMounts) в директорию, заданную в переменной WRITABLE_PATH. Пример запуска в Openshift:
# pod_readonly.yml
apiVersion: v1
kind: DeploymentConfig
metadata:
name: keycloak
labels:
name: keycloak
spec:
containers:
- name: keycloak
image: <image_link>
env:
...
securityContext:
readOnlyRootFilesystem: true
runAsNonRoot: true
ports:
- containerPort: 80
volumeMounts:
- mountPath: /tmp
name: tmp
readonly: false
- name: shared-logs
mountPath: /opt/keycloak/log/
volumes:
- name: tmp
emptyDir: {}
- name: shared-logs
emptyDir: {}
При запуске в Kubernetes следует вместо DeploymentConfig указать Deployment.