运行时安全
使用 Linux 安全机制限制容器的运行时能力,提高安全性。
Seccomp
Seccomp (Secure Computing Mode) 限制容器可用的系统调用。
默认配置
Docker 默认使用 Seccomp 配置文件,限制危险系统调用。
自定义配置
json
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": ["SCMP_ARCH_X86_64"],
"syscalls": [
{
"names": ["read", "write"],
"action": "SCMP_ACT_ALLOW"
}
]
}使用自定义配置
sh
docker run --security-opt seccomp=profile.json nginx禁用 Seccomp(不推荐)
sh
docker run --security-opt seccomp=unconfined nginxAppArmor
AppArmor 提供应用程序级别的访问控制。
创建配置文件
text
# /etc/apparmor.d/docker-nginx
#include <tunables/global>
profile docker-nginx flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
network,
capability,
deny /bin/** w,
deny /boot/** w,
deny /dev/** w,
deny /etc/** w,
deny /home/** w,
deny /lib/** w,
deny /lib64/** w,
deny /media/** w,
deny /mnt/** w,
deny /opt/** w,
deny /proc/** w,
deny /root/** w,
deny /sbin/** w,
deny /srv/** w,
deny /tmp/** w,
deny /sys/** w,
deny /usr/** w,
deny /var/** w,
}加载配置
sh
sudo apparmor_parser -r /etc/apparmor.d/docker-nginx使用配置
sh
docker run --security-opt apparmor=docker-nginx nginxSELinux
SELinux 提供强制访问控制。
使用 SELinux
sh
# 启用 SELinux
docker run --security-opt label:type:svirt_apache_t nginx只读文件系统
使用只读文件系统提高安全性:
sh
docker run --read-only nginx
# 允许写入特定目录
docker run --read-only \
--tmpfs /tmp \
--tmpfs /var/cache/nginx \
nginx禁用权限
禁用所有权限
sh
docker run --cap-drop=ALL nginx添加特定权限
sh
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx用户命名空间
使用用户命名空间隔离用户 ID:
sh
docker run --userns=host nginx最佳实践
- 使用默认安全配置 - 不要轻易禁用
- 只读文件系统 - 除非需要写入
- 最小权限 - 只授予必要权限
- 定期审查 - 审查安全配置
- 监控异常 - 监控安全事件
BSFC Tech Pro Tip
生产环境应该启用所有安全机制,并定期审查安全配置。