這篇文章為大家帶來了docker中安全基線的相關知識,其中包括服務配置和文件權限以及安全審計的相關問題,希望對大家有幫助。
說明:
預設情況下,同一主機上的容器之間允許所有網路通訊。如果不需要,請限制所有容器間的通訊。將需要相互通訊的特定容器連結在一起。預設情況下,同一台主機上所有容器之間都啟用了不受限制的網路流量。因此,每個容器都有可能讀取同一主機上整個容器網路上的所有資料包。這可能會導致意外和不必要的資訊洩漏給其他容器。因此,限制容器間的通訊。
加固建議:
在守護程式模式下執行docker並傳遞**–icc = false**作為參數。例如,
/usr/bin/dockerd --icc=false
#若使用systemctl管理docker服務則需要編輯
/ usr/lib/systemd/system/docker.service
檔案中的ExecStart參數新增–icc=false項目然後重啟docker服務
systemctl daemon-reload systemctl restart docker
描述:
使用–privileged標誌將所有Linux核心功能賦予容器,從而覆蓋–cap-add和–cap-drop標誌。確保不使用它。 --privileged標誌為容器提供了所有功能,並且還解除了設備cgroup控制器強制執行的所有限制。換句話說,容器可以完成主機可以做的幾乎所有事情。存在此標誌是為了允許特殊用例,例如在Docker中運行Docker
#加固建議:
#不要使用--privileged
標誌運行容器
描述:
預設情況下,Docker主機上的所有容器均等地共享資源。透過使用Docker主機的資源管理功能(例如記憶體限制),您可以控制容器可能消耗的記憶體量。預設情況下,容器可以使用主機上的所有記憶體。您可以使用記憶體限制機制來防止因一個容器消耗主機的所有資源而導致的服務拒絕,從而使同一台主機上的其他容器無法執行其預期的功能。對記憶體沒有限制可能會導致一個問題,即一個容器很容易使整個系統不穩定並因此無法使用。
加固建議
僅使用所需的記憶體來運行容器。始終使用--memory
參數運行容器。您應該以以下方式啟動容器:docker run --interactive --tty --memory 256m <Container Image Name or ID>
描述:
容器的根檔案系統應被視為“黃金映像”,並且應避免對根檔案系統的任何寫入操作。您應該明確定義用於寫入的容器磁碟區。您不應該在容器中寫入資料。屬於容器的資料量應明確定義和管理。在管理員控制他們希望開發人員在何處寫入文件和錯誤的許多情況下,這很有用。
加固建議:
新增「 --read-only」標誌,以允許將容器的根檔案系統掛載為唯讀。可以與磁碟區結合使用,以強制容器的程序僅寫入要保留的位置。您應該以以下方式執行容器:
docker run --interactive --tty --read-only --volume <writable-volume> <Container Image Name or ID> <Command>
如果您是k8s或其他容器編排軟體編排的容器,請依照對應的安全性原則配置或忽略。
描述:
設定適當的日誌級別,將Docker守護程式配置為記錄您以後想要查看的事件。基本日誌等級為“ info”及更高版本將捕獲除調試日誌以外的所有日誌。直到且除非有必要,否則您不應在「debug」日誌層級執行Docker守護程序
加固建議:
執行Docker守護程序,如下所示:
dockerd --log-level=info
若以systemctl管理docker服務則需要編輯/usr/lib/systemd/system/docker.service
的ExecStart參數新增--log-level="info"
,並重啟docker
systemctl stop docker systemctl start docker
描述:
iptables用於在Linux核心中設置,維護和檢查IP封包過濾器規則表。允許Docker守護程序對iptables進行更改。如果您選擇這樣做,Docker將永遠不會對您的系統iptables規則進行更改。如果允許,Docker伺服器將根據您為容器選擇網路選項的方式自動對iptables進行所需的變更。建議讓Docker伺服器自動對iptables進行更改,以避免網路配置錯誤,這可能會妨礙容器之間以及與外界的通訊。此外,每次選擇運行容器或修改網路選項時,它都可以避免更新iptables的麻煩。
加固建議:
不使用’–iptables = false’参数运行Docker守护程序。 若以systemctl管理docker服务则需要编辑/usr/lib/systemd/system/docker.service
的ExecStart参数删除--iptables = false
, 重启docker服务
systemctl daemon-reload systemctl restart docker
描述:
“aufs”存储驱动程序是最早的存储驱动程序。 它基于Linux内核补丁集,该补丁集不太可能合并到主要Linux内核中。 并且已知“ aufs”驱动程序会导致一些严重的内核崩溃。 'aufs’刚刚获得了Docker的支持。 最重要的是,许多使用最新Linux内核的Linux发行版都不支持’aufs’驱动程序。
加固建议:
不要明确使用“ aufs”作为存储驱动程序。 例如,请勿按以下方式启动Docker守护程序: 若以systemctl管理docker服务则需要编辑/usr/lib/systemd/system/docker.service
的ExecStart参数删除--storage-driver aufs
重启docker服务
systemctl daemon-reload systemctl restart docker
描述:
不允许将以下敏感的主机系统目录作为容器卷挂载,尤其是在读写模式下。
/boot /dev /etc /lib /proc /sys /usr
如果敏感目录以读写模式挂载,则可以对那些敏感目录中的文件进行更改。 这些更改可能会降低安全隐患或不必要的更改,这些更改可能会使Docker主机处于受损状态
如果您是k8s或其他容器编排软件编排的容器,请依照相应的安全策略配置或忽略。
加固建议:
不要在容器上挂载主机敏感目录,尤其是在读写模式下
描述
进程ID(PID)命名空间隔离了进程ID号空间,这意味着不同PID命名空间中的进程可以具有相同的PID。 这是容器和主机之间的进程级别隔离。
PID名称空间提供了流程分离。 PID命名空间删除了系统进程的视图,并允许进程ID重复使用,包括PID1。如果主机的PID命名空间与容器共享,则它将基本上允许容器内的进程查看主机上的所有进程。 系统。 这破坏了主机和容器之间的进程级别隔离的好处。 有权访问容器的人最终可以知道主机系统上正在运行的所有进程,甚至可以从容器内部杀死主机系统进程。 这可能是灾难性的。 因此,请勿与容器共享主机的进程名称空间。
加固建议:
不要使用--pid = host
参数启动容器。
描述:
默认情况下禁用内容信任。 您应该启用它。 内容信任提供了将数字签名用于发送到远程Docker注册表和从远程Docker注册表接收的数据的功能。 这些签名允许客户端验证特定图像标签的完整性和发布者。 这确保了容器图像的出处
加固建议:
要在bash shell中启用内容信任,请输入以下命令:export DOCKER_CONTENT_TRUST=1
或者,在您的配置文件中设置此环境变量,以便在每次登录时启用内容信任。 内容信任目前仅适用于公共Docker Hub的用户。 当前不适用于Docker Trusted Registry或私有注册表。
描述:
确保可能包含敏感参数的文件和目录的安全对确保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
描述:
docker.sock挂载的容器容易被获取特殊权限,一旦危险进入到docker中,严重影响了宿主机的安全.
加固建议:
按照提示<image name>
<container name>
查找启动的docker容器 , 以非docker挂载docker.sock的形式重新启动容器
docker stop <container name>
docker run [OPTIONS] <image name>或docker run [OPTIONS]
描述:
除了审核常规的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安全基線的詳細內容。更多資訊請關注PHP中文網其他相關文章!