Skip to content

运行时安全

使用 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 nginx

AppArmor

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 nginx

SELinux

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

最佳实践

  1. 使用默认安全配置 - 不要轻易禁用
  2. 只读文件系统 - 除非需要写入
  3. 最小权限 - 只授予必要权限
  4. 定期审查 - 审查安全配置
  5. 监控异常 - 监控安全事件

BSFC Tech Pro Tip

生产环境应该启用所有安全机制,并定期审查安全配置。


由 BSFC Tech 提供技术支持