主题
第 15 章 安全与访问控制
15.1 NFS 导出权限控制
在 Ganesha 中,可以通过 Access_Type、Squash 等参数控制访问。
只读导出
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 --reload15.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.10015.5 TLS/SSL 加密传输(可选)
GlusterFS 支持 TLS/SSL 加密节点间通信。
基本步骤
- 生成 CA 和节点证书
- 配置
/etc/ssl/glusterfs.pem和/etc/ssl/glusterfs.key - 设置
secure-mgmt和auth.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 可选,用于加密传输
练习题
Root_Squash和No_Root_Squash有什么区别?- 如何限制只有特定网段能访问 NFS 导出?
- GlusterFS 的
auth.allow有什么作用? - 启用 TLS 有什么优缺点?