Skip to content

第 15 章 安全与访问控制

15.1 NFS 导出权限控制

在 Ganesha 中,可以通过 Access_TypeSquash 等参数控制访问。

只读导出

conf
EXPORT {
    Export_Id = 1;
    Path = "/gv0";
    Pseudo = "/gv0";
    Access_Type = RO;
    ...
}

客户端 IP 限制

conf
EXPORT {
    Export_Id = 1;
    Path = "/gv0";
    Pseudo = "/gv0";
    Access_Type = RW;
    Squash = Root_Squash;
    
    CLIENT {
        Clients = 10.0.0.0/24;
        Access_Type = RW;
    }
    CLIENT {
        Clients = *;
        Access_Type = None;
    }
    ...
}

15.2 IP 白名单与网络隔离

通过网络层隔离

  • 将 NFS 流量放在独立 VLAN/子网
  • 防火墙仅允许业务服务器访问 2049 端口
  • 禁止使用公网直接访问 NFS

防火墙示例

bash
# 仅允许 10.0.0.0/24 访问 NFS
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="2049" accept'
firewall-cmd --reload

15.3 root_squash 与 no_root_squash

Squash 策略

策略root 用户映射适用场景
No_Root_Squash保持 root受信任环境
Root_Squash映射为 nfsnobody默认安全策略
All_Squash所有用户映射为匿名公共只读共享

推荐配置

生产环境推荐 Root_Squash,除非明确需要 root 权限:

conf
Squash = Root_Squash;

15.4 GlusterFS 认证机制

GlusterFS 默认基于 IP 地址信任(trusted storage pool)。对于更严格的访问控制,可以使用:

auth.allow / auth.reject

bash
# 仅允许特定 IP 挂载
gluster volume set gv0 auth.allow 10.0.0.11,10.0.0.12,10.0.0.13

# 拒绝特定 IP
gluster volume set gv0 auth.reject 10.0.0.100

15.5 TLS/SSL 加密传输(可选)

GlusterFS 支持 TLS/SSL 加密节点间通信。

基本步骤

  1. 生成 CA 和节点证书
  2. 配置 /etc/ssl/glusterfs.pem/etc/ssl/glusterfs.key
  3. 设置 secure-mgmtauth.ssl-allow
bash
gluster volume set gv0 client.ssl on
gluster volume set gv0 server.ssl on
gluster volume set gv0 auth.ssl-allow node1,node2,node3

启用 TLS 会增加 CPU 开销,仅在安全要求高的场景使用。

15.6 本章小结

  • NFS 导出权限通过 Ganesha 配置控制
  • IP 白名单和网络隔离是基础安全措施
  • root_squash 可以防止客户端 root 滥用权限
  • GlusterFS 提供 auth.allow/auth.reject 控制访问
  • TLS/SSL 可选,用于加密传输

练习题

  1. Root_SquashNo_Root_Squash 有什么区别?
  2. 如何限制只有特定网段能访问 NFS 导出?
  3. GlusterFS 的 auth.allow 有什么作用?
  4. 启用 TLS 有什么优缺点?