温馨提示×

OpenSSL在Linux中的权限设置指南

小樊
33
2025-12-02 20:03:57
栏目: 云计算

OpenSSL 在 Linux 中的权限设置指南

一 核心原则

  • 最小权限:私钥仅对必要的服务账户可读,证书可适度放宽但避免全局可读。
  • 明确属主:私钥与 CA 相关文件由root或专用低权限系统账户持有,避免应用账户直接拥有私钥。
  • 目录隔离:将私钥证书分目录存放,私钥目录严格受限,证书目录可只读分发。
  • 合规基线:遵循系统安全基线(如私钥600、私钥目录700),并定期审计。

二 推荐权限矩阵

对象 建议权限 建议属主:属组 说明
服务器/客户端私钥(如 server.key、client.key) 600400 root:root 仅所有者可读;若进程以专用用户运行,可将属主改为该用户
私钥目录(如 /etc/ssl/private、/etc/pki/tls/private) 700 root:root 禁止其他用户进入与列目录
证书文件(.crt/.pem,含链) 644 root:root 可被服务读取与分发给客户端
证书目录(/etc/ssl/certs、/etc/pki/tls/certs) 755 root:root 允许读取与遍历
CA 根目录(/etc/ssl/CA 或自定义) 755 root:root 仅管理员可访问
CA 私钥(ca.key、cakey.pem) 600 root:root 最高保护
CA 私钥目录(…/CA/private) 700 root:root 仅根 CA 可访问
CA 数据库与索引(index.txt、serial、crlnumber) 640 root:root 防止被非授权用户篡改
应用配置引用证书/私钥 由进程最小权限决定 视服务而定 进程不应以 root 直接读取私钥

三 快速操作示例

  • 生成并保护服务器私钥与证书
    • 生成私钥(不加密输出,便于服务直接读取;若需口令保护,改为加密并妥善管控口令)
      • openssl genpkey -algorithm RSA -out /etc/ssl/private/server.key 2048
    • 设置权限
      • chown root:root /etc/ssl/private/server.key
      • chmod 600 /etc/ssl/private/server.key
    • 生成 CSR
      • openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/certs/server.csr
    • 由 CA 签发或放置已有证书后,设置证书权限
      • chown root:root /etc/ssl/certs/server.crt
      • chmod 644 /etc/ssl/certs/server.crt
    • 目录加固
      • chown root:root /etc/ssl/private /etc/ssl/certs
      • chmod 700 /etc/ssl/private
      • chmod 755 /etc/ssl/certs
  • 自建根 CA 的目录与权限
    • 搭建目录与数据库
      • mkdir -p /etc/ssl/CA/{certs,crl,newcerts,private}
      • touch /etc/ssl/CA/index.txt
      • echo 1000 > /etc/ssl/CA/serial
    • 权限与属主
      • chown -R root:root /etc/ssl/CA
      • chmod 700 /etc/ssl/CA/private
      • chmod 755 /etc/ssl/CA
      • chmod 640 /etc/ssl/CA/index.txt
    • 生成 CA 私钥与自签名证书
      • openssl genpkey -algorithm RSA -out /etc/ssl/CA/private/ca.key 4096
      • openssl req -x509 -new -nodes -key /etc/ssl/CA/private/ca.key -sha256 -days 3650 -out /etc/ssl/CA/certs/ca.crt
      • chmod 600 /etc/ssl/CA/private/ca.key
      • chmod 644 /etc/ssl/CA/certs/ca.crt
  • 使用 CA 签发服务器证书
    • 签发
      • openssl x509 -req -in /etc/ssl/certs/server.csr -CA /etc/ssl/CA/certs/ca.crt -CAkey /etc/ssl/CA/private/ca.key -CAcreateserial -out /etc/ssl/certs/server.crt -days 500 -sha256
    • 分发与权限
      • chown root:root /etc/ssl/certs/server.crt
      • chmod 644 /etc/ssl/certs/server.crt
  • 客户端证书校验示例
    • 服务端启用客户端证书校验(以 Nginx/Apache 为例)
      • SSLCACertificateFile /etc/ssl/certs/ca.crt
      • SSLVerifyClient require
      • SSLVerifyDepth 10
    • 离线验证
      • openssl verify -CAfile /etc/ssl/certs/ca.crt client.crt 以上命令与权限设置与常见发行版实践一致(如私钥 600、私钥目录 700、证书 644、证书目录 755、CA 索引 640 等)。

四 服务集成与访问控制

  • Web 服务器
    • 将证书与私钥路径配置到服务,并确保进程用户对证书有读权限、对私钥有读权限(通常属主为 root,权限 600/644 即可)。
    • 若服务以专用用户(如 www-data)运行,可将证书设为644、私钥保持600且属主仍为 root;必要时通过文件 ACL 或组权限授予专用用户读私钥的能力(谨慎评估)。
  • 双向 TLS(mTLS)
    • 在服务器启用客户端证书校验(如 SSLVerifyClient require),仅允许持有受信任 CA 签发证书的用户访问。
    • 使用 openssl verify 对客户端证书链进行离线校验,确保 CA 与证书匹配。
  • 最小权限运行
    • 禁止以 root 身份直接加载私钥;使用系统服务单元(systemd)的 User/Group 限制进程权限,私钥仅对必要进程可读。

五 审计与维护

  • 定期巡检
    • 查找世界可读/可写私钥:find /etc/ssl /etc/pki -type f ( -name “.key" -o -name ".pem” ) -perm -o=r
    • 查找私钥目录非 700:find /etc/ssl /etc/pki -type d -name “private” ! -perm 700
    • 校验证书与私钥匹配:openssl x509 -noout -modulus -in server.crt | openssl md5 与 openssl rsa -noout -modulus -in server.key | openssl md5 输出应一致
  • 变更管理
    • 证书轮换时,先生成新私钥与 CSR,验证无误后再替换并重启服务,保留旧证书短时间回滚。
    • 对 CA 与私钥目录的访问记录纳入系统审计(auditd),对异常访问及时告警。

0