You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Docker Distribution的本地Registry安全加固咨询(RHEL7)

针对你在RHEL7上维护本地Docker Registry(进程为/usr/bin/registry serve /etc/docker-distribution/registry/config.yml)的安全加固需求,我来一步步帮你实现指定的两项功能,再补充一些实用的额外安全建议:


一、实现基于认证的Registry镜像拉取

Docker Registry支持HTTP基本认证,我们可以用htpasswd工具快速搭建用户密码认证体系:

  1. 安装依赖工具:

    yum install -y httpd-tools
    
  2. 创建认证信息存储目录和初始密码文件(这里以/etc/docker-distribution/auth为例):

    mkdir -p /etc/docker-distribution/auth
    htpasswd -Bc /etc/docker-distribution/auth/htpasswd <你的用户名>
    

    执行后会提示你输入密码,-B参数表示用更安全的bcrypt加密算法,-c表示创建新文件;后续添加新用户时去掉-c即可。

  3. 修改Registry配置文件/etc/docker-distribution/registry/config.yml,添加认证规则:
    在http配置块下插入auth节点:

    http:
      addr: :5000
      auth:
        htpasswd:
          realm: Registry Realm
          path: /etc/docker-distribution/auth/htpasswd
    

    如果原有http块已有内容,直接追加auth部分即可。

  4. 重启Registry服务使配置生效:

    systemctl restart docker-distribution
    
  5. 客户端验证:
    现在拉取/推送镜像前必须先登录,执行以下命令输入用户名密码即可:

    docker login <你的Registry地址,比如localhost:5000>
    

二、实现基于SSL的Docker镜像拉取

为了避免明文传输敏感数据,我们需要给Registry配置SSL证书,分两种场景实现:

场景1:使用自签证书(适合内部私有环境)

  1. 创建证书存储目录:

    mkdir -p /etc/docker-distribution/certs
    
  2. 生成自签SSL证书(替换<registry-domain>为你的Registry域名或IP,比如registry.internal.com或192.168.3.10):

    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /etc/docker-distribution/certs/domain.key -x509 -days 365 -out /etc/docker-distribution/certs/domain.crt
    

    执行过程中填写证书信息时,Common Name必须和Registry的访问地址完全一致(域名或IP)。

  3. 修改Registry配置文件启用SSL:
    更新http配置块为:

    http:
      addr: :443
      tls:
        certificate: /etc/docker-distribution/certs/domain.crt
        key: /etc/docker-distribution/certs/domain.key
    

    这里用了标准HTTPS端口443,如果你想保留原5000端口,把addr改成:5000即可,客户端访问时需要带上端口号。

  4. 调整证书权限确保Registry进程可读取:

    chown -R root:root /etc/docker-distribution/certs
    chmod 600 /etc/docker-distribution/certs/domain.key
    
  5. 重启Registry服务:

    systemctl restart docker-distribution
    
  6. 客户端信任自签证书:
    在需要访问Registry的客户端机器(RHEL7)上,创建证书目录并复制Registry的证书:

    mkdir -p /etc/docker/certs.d/<registry-domain>:<port>
    cp /path/to/registry/domain.crt /etc/docker/certs.d/<registry-domain>:<port>/ca.crt
    

    然后重启Docker服务:

    systemctl restart docker
    

    之后客户端就能通过HTTPS正常访问Registry了。

场景2:使用正式CA签发的证书(适合生产环境)

如果你有可信CA机构签发的证书,只需将证书文件(.crt)和私钥文件(.key)放到/etc/docker-distribution/certs目录,再按照上面步骤3-5配置并重启服务即可,客户端无需额外配置信任(因为CA是全球可信的)。


三、其他安全加固建议

除了上述两项核心需求,这些措施能进一步提升Registry的安全性:

  • 限制访问IP范围:用RHEL7的firewalld只允许指定IP段访问Registry端口:

    # 允许192.168.3.0/24段访问443端口
    firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.3.0/24" port port="443" protocol="tcp" accept' --permanent
    firewall-cmd --reload
    
  • 加固存储目录权限:确保Registry镜像存储目录(默认/var/lib/registry)权限严格:

    chown -R root:root /var/lib/registry
    chmod 700 /var/lib/registry
    
  • 定期清理无用镜像:避免存储资源浪费,同时减少攻击面:
    使用Registry自带的垃圾回收命令:

    registry garbage-collect /etc/docker-distribution/registry/config.yml
    

    建议通过crontab -e添加定时任务,定期执行清理。

  • 启用审计日志:在config.yml中添加日志配置,便于追踪操作行为:

    logging:
      level: info
      formatter: text
      fields:
        service: registry
    

    可以通过journalctl -u docker-distribution查看Registry的详细操作日志。

  • 及时更新Registry版本:定期修复已知漏洞:

    yum update docker-distribution
    
  • 使用专用用户运行(可选):如果安全要求极高,可以创建专用用户运行Registry进程,修改/usr/lib/systemd/system/docker-distribution.service中的User和Group字段,再调整相关目录权限。


内容的提问来源于stack exchange,提问作者Zama Ques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:08:11