【发布时间】:2017-10-09 14:00:21
【问题描述】:
Docker states 它的容器是
"...默认情况下,非常安全;特别是如果您注意在 容器作为非特权用户(即非 root)”
因此,我尝试了:
- 使用适当处理用户执行的官方图像
- 避免在生产中挂载主机卷,而是使用
COPY
当我 COPY 将代码和配置文件添加到我的容器卷时,所有目录和文件都创建为“...UID 和 GID 为 0”(root 所有权),如文档 here 中所述.
问题:
如果文件和目录由 root 拥有,但正在运行的进程由非 root 用户拥有,例如www-data,是否仍然存在安全风险?例如,php-fpm:
root@7bf71145c18c:/var/www/html# ls -l
total 1220
-rw-rw-r-- 1 root root 5931 May 10 12:28 index.php
drwxrwxr-x 3 root root 4096 May 10 12:28 logs
-rw-rw-r-- 1 root root 28 May 10 12:28 robots.txt
root@7bf71145c18c:/var/www/html# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:14 ? 00:00:00 php-fpm: master process (/usr/lo
www-data 5 1 0 14:14 ? 00:00:00 php-fpm: pool www
www-data 6 1 0 14:14 ? 00:00:00 php-fpm: pool www
root 7 0 0 14:19 ? 00:00:00 bash
root 12 7 0 14:19 ? 00:00:00 ps -ef
如果是这样,我想知道如何(以及在哪里)正确地 chown 和 chmod 我的文件。根据我的研究,如果您使用的是 docker-compose,这似乎不那么简单,我正在使用 docker-compose YAML 文件(版本 3)和特定于容器的 Dockerfile。似乎当我在容器的 Dockerfile 末尾chown 时,更改不会生效 - 可能是因为卷(在 docker-compose.yml 中定义)是之后创建的。以下是两种配置的一些 sn-ps:
docker-compose.yml:
version: '3'
services:
fpm:
build: ./fpm
container_name: "fpm"
volumes:
- data_volume:/var/www/html
ports:
- "9000"
restart: always
volumes:
data_volume:
./fpm Dockerfile:
FROM php:7-fpm
RUN mkdir -p /var/www/html/
COPY . /var/www/html/
RUN find /var -exec chown www-data:www-data {} \;
RUN find /var -type d -exec chmod 755 {} \;
RUN find /var -type f -exec chmod 644 {} \;
使用不同的 docker-compose 版本,很难对围绕该主题的各种网络文章、错误修复和功能请求进行分类。我希望在这里得到一些明确的方向/答案,面向 docker-compose 版本 3。
【问题讨论】:
标签: docker permissions docker-compose file-permissions user-permissions