docker安全设置
如果用户环境对docker的安全没有要求的话,尽量不要对docker的文件设置权限。不然后面运行容器的时候会报权限问题的错误,会很麻烦。如果安全要求非要给docker文件做权限设置,尽量先把需要安装的容器都先安装好了,
再对docker文件做权限限制
限制容器之间的网络流量 默认情况下,同一主机上的容器之间允许所有网络通信。 如果不需要,请限制所有容器间的通信。 将需要相互通信的特定容器链接在一起。默认情况下,同一主机上所有容器之间都启用了不受限制的网络流量。 因此,每个容器都有可能读取同一主机上整个容器网络上的所有数据包。 这可能会导致意外和不必要的信息泄露给其他容器。 因此,限制容器间的通信。 在守护程序模式下运行docker并传递'--icc = false'作为参数。 例如, ``` /usr/bin/dockerd --icc=false ``` 若使用systemctl管理docker服务则需要编辑` `` /usr/lib/systemd/system/docker.service ``` 文件中的`ExecStart`参数添加 `--icc=false`选项 确保可能包含敏感参数的文件和目录的安全对确保Docker守护程序的正确和安全运行至关重要 执行以下命令为docker相关文件配置权限: ``` chown root:root /usr/lib/systemd/system/docker.service chmod 644 /usr/lib/systemd/system/docker.service chown root:root /usr/lib/systemd/system/docker.socket chmod 644 /usr/lib/systemd/system/docker.socket chown root:root /etc/docker chmod 755 /etc/docker ``` 若文件路径与实际系统中不同可以使用以下命令获取文件路径: ``` systemctl show -p FragmentPath docker.socket systemctl show -p FragmentPath docker.service ``` 除了审核常规的Linux文件系统和系统调用之外,还审核所有与Docker相关的文件和目录。 Docker守护程序以“ root”特权运行。 其行为取决于某些关键文件和目录。如 /var/lib/docker、/etc/docker、docker.service、 docker.socket、/usr/bin/docker-containerd、/usr/bin/docker-runc等文件和目录 在/etc/audit/audit.rules与/etc/audit/rules.d/audit.rules文件中添加以下行: ``` -w /var/lib/docker -k docker -w /etc/docker -k docker -w /usr/lib/systemd/system/docker.service -k docker -w /usr/lib/systemd/system/docker.socket -k docker -w /usr/bin/docker-containerd -k docker -w /usr/bin/docker-runc -k docker ``` 然后,重新启动audit程序。 例如 ``` service auditd restart ```

默认情况下禁用内容信任。 您应该启用它。

   内容信任提供了将数字签名用于发送到远程Docker注册表和从远程Docker注册表接收的数据的功能。 这些签名允许客户端验证特定图像标签的完整性和发布者。 这确保了容器图像的出处

   

  要在bash shell中启用内容信任,请输入以下命令:`export DOCKER_CONTENT_TRUST=1`
  或者,在您的配置文件中设置此环境变量,以便在每次登录时启用内容信任。
  内容信任目前仅适用于公共Docker Hub的用户。 当前不适用于Docker Trusted Registry或私有注册表。

  启动上面这个命令后,在运行一个新的容器的时候又肯失败,这个时候可以关闭这个命令,运行export DOCKER_CONTENT_TRUST=0,然后再运行新的容器。容器启动成功后再设置这个命令


不要使用特权容器 使用--privileged标志将所有Linux内核功能赋予容器,从而覆盖--cap-add和--cap-drop标志。 确保不使用它。 限制容器的内存使用量 默认情况下,Docker主机上的所有容器均等地共享资源。 通过使用Docker主机的资源管理功能(例如内存限制),您可以控制容器可能消耗的内存量。 默认情况下,容器可以使用主机上的所有内存。 您可以使用内存限制机制来防止由于一个容器消耗主机的所有资源而导致的服务拒绝,从而使同一主机上的其他容器无法执行其预期的功能。 对内存没有限制可能会导致一个问题,即一个容器很容易使整个系统不稳定并因此无法使用。 仅使用所需的内存来运行容器。 始终使用'--memory'参数运行容器。 您应该按以下方式启动容器: ``` docker run --interactive --tty --memory 256m <Container Image Name or ID> ``` 将容器的根文件系统挂载为只读 容器的根文件系统应被视为“黄金映像”,并且应避免对根文件系统的任何写操作。 您应该显式定义用于写入的容器卷。 您不应该在容器中写入数据。 属于容器的数据量应明确定义和管理。 在管理员控制他们希望开发人员在何处写入文件和错误的许多情况下,这很有用。 添加“ --read-only”标志,以允许将容器的根文件系统挂载为只读。 可以将其与卷结合使用,以强制容器的过程仅写入要保留的位置。 您应该按以下方式运行容器: ``` docker run --interactive --tty --volume <writable-volume> <Container Image Name or ID> <Command> ``` docker启动postgres 启动如下命令时,postgres容器里面的/usr/lib/postgresql/12/lib 映射到宿主机后,里面的内容会为空,这个时候需要提前启动一个容器,不设置 --read-only,然后将该目录的内容复制到宿主机的一个目录, 当下面这个语句的容器启动后,可以将之前复制出来的lib目录里面的内容复制到/Software/docker_volums/postgres12/lib目录,然后重新启动该容器 docker run --interactive --tty --memory 1g --read-only -v /Software/docker_volums/postgres12/data:/var/lib/postgresql/data -v /Software/docker_volums/postgres12/run:/var/run/postgresql -v /Software/docker_volums/postgres12/lib:/usr/lib/postgresql/12/lib:rw --name postgres12 -p 13432:5432 -e POSTGRES_PASSWORD=Test@202303 -d 367676e04d30 将5432端口映射到宿主机的13432端口 docker启动nginx docker启动一个nginx容器时,如果要设置 --read-only 则需要将nginx.conf配置文件先放到/Software/jh/nginx/conf目录下面 docker run --interactive --tty --memory 1g --read-only --name nginx -v /Software/nginx/files:/add/upfiles -v /Software/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /Software/nginx/conf/conf.d:/etc/nginx/conf.d -v /Software/nginx/run:/var/run -d -p 8080:8080 -p 5443:443 55f4b40fe486

  

posted on 2023-04-03 11:32  james-roger  阅读(192)  评论(0编辑  收藏  举报