NFS部署
CentOS
yum install -y nfs-utils rpcbind编辑配置文件 设置共享目录权限,/share为共享目录 *表示所有地址都可以访问,括号中的内容表示权限,rw为读写,ro为只读,sync表示同步写入,no_root_squash表示客户机以root身份访问时赋予本地root权限,默认为nfsnobody用户权限
vim /etc/exports
/data/app-data *(rw,sync,no_root_squash)
/data1 *(rw,sync,no_subtree_check,no_root_squash)service rpcbind start
# centos6
service nfs start
# centos7
systemctl start nfs
# 8
systemctl start nfs-server
showmount -e 127.0.0.1 #查看本机共享的目录
mount 1.1.1.1:/share /mnt #挂载指定共享目录开机自动挂载(先设置开机自启)
vim /etc/fstab
……
1.1.1.1:/share /mnt nfs defaults,sw 0 0iptables 开放NFS端口 TCP 20049 2020 662 892 32769 32803 2049 111 4046 UDP 32769 32803 2049 4046 111
iptables -I INPUT -s 1.1.1.1 -d 2.2.2.2 -p tcp -dport 1 -j ACCEPT #限制源跟目标IP开放端口
iptables -I INPUT -p tcp -dport 80 -j ACCEPT #对所有访问IP开放其它客户端要连接NFS服务器需要安装 yum install -y nfs-utils 或 apt install nfs-common 判断方法,如果下面命令能成功执行,则不需要安装
ls /sbin/mount.nfs如果客户端为k8s pod,则pod所在的宿主机上也需要安装nfs-common,否则就算在容器内安装了nfs-utils 和 nfs-common。容器挂载时也会报错
Ubuntu
22.04 x64
# 服务端 nfs-kernel-server
sudo apt install nfs-kernel-server
cat /etc/exports
/data *(rw,sync,no_subtree_check,no_root_squash)
sudo chmod -R 777 /data/
# 重新加载 /etc/exports 中的配置
sudo exportfs -a
systemctl status nfs-kernel-server
systemctl restart nfs-kernel-server
# 客户端 nfs-common
sudo apt install nfs-common目录权限
共享目录权限是指在 NFS 或其他文件共享服务中,控制客户端对共享目录的访问权限。这些权限定义了客户端可以对共享目录执行的操作,例如读取、写入或执行文件。在 NFS 中,权限主要由 /etc/exports 文件上的规则定义。以下是共享目录权限的详细解释:
读写权限 (rw):
rw表示读写权限。拥有读写权限的客户端可以读取和写入共享目录中的文件,也可以在目录中创建、修改和删除文件。
只读权限 (ro):
ro表示只读权限。拥有只读权限的客户端可以读取共享目录中的文件,但无法对目录进行写入或修改。
同步写入 (sync):
sync选项表示 NFS 服务器在客户端发起写入请求时会立即执行写入操作并返回确认。这样做确保了数据的同步性,但可能导致性能较慢。
异步写入 (async):
async选项表示 NFS 服务器在客户端发起写入请求时先将数据缓存,然后立即返回确认。服务器稍后再执行实际的写入操作。这样可以提高性能,但在服务器崩溃时可能导致一些数据丢失。
允许访问的客户端:
在 /etc/exports 文件中,通过指定客户端的 IP 地址或 IP 地址段来定义哪些客户端可以访问共享目录。例如:
client_ip1(rw)或192.168.1.0/24(ro)。
允许所有客户端访问:
通过指定
*或*(),可以允许所有客户端访问共享目录。例如:*(rw)。
no_subtree_check:这个选项允许 NFS 服务器不进行子树检查,即不检查客户端是否正在访问共享目录的子目录。当客户端访问共享目录的子目录时,通常需要进行子树检查,以确保客户端有权访问这些子目录。但在某些情况下,特别是当客户端的访问权限已在上级目录层级上得到控制时,执行子树检查可能会导致问题。因此,在某些特定场景下,可以使用
no_subtree_check选项来跳过子树检查,提高性能并避免潜在的访问问题。
no_root_squash:这个选项用于解除对根用户(root)的权限限制。默认情况下,NFS 服务器会将根用户的权限限制为普通用户,即将根用户映射为匿名用户,以防止潜在的安全漏洞。这种映射被称为 root squashing(根用户挤压)。当使用
no_root_squash选项时,NFS 服务器将允许根用户在客户端上拥有与根用户相同的权限,即拥有完整的读写权限。这通常用于允许特定的服务器进行备份等操作,但需要注意的是,开启此选项可能增加安全风险,因为根用户的权限在客户端上得到了放开。
root_squash:这个选项与之前提到的
no_root_squash相对应。默认情况下,NFS 服务器会将根用户(root)映射为匿名用户,限制其权限,防止潜在的安全问题。root_squash选项用于显式开启根用户的挤压,以确保根用户在客户端上没有特权权限。
all_squash:
all_squash是一个综合性的选项,用于将所有用户(包括根用户)映射为匿名用户。这意味着所有客户端用户的权限将受到限制,类似于root_squash的效果,但对所有用户都生效。
anonuid和anongid:
这两个选项用于设置匿名用户的用户 ID 和组 ID。当 NFS 客户端上的用户没有对应的用户 ID 和组 ID 时(或者在
all_squash模式下),这些选项指定用于映射匿名用户的用户 ID 和组 ID。
secure和insecure:
secure选项用于确保只允许来自小于 1024 的特权端口的客户端连接。这样可以增加安全性,防止某些网络攻击。相反,insecure选项允许来自任意端口的客户端连接,但会降低一定的安全性。
crossmnt:
crossmnt选项用于允许客户端跨越挂载点进行访问。如果某个共享目录中包含其他共享目录的挂载点,启用此选项可以使客户端能够访问这些挂载点。
请注意,不同的 NFS 实现和版本可能具有不同的权限选项,而某些选项可能只在特定的操作系统或版本中有效。在进行权限配置时,最好参考相关文档和官方指南,以确保正确理解每个选项的含义和影响,并选择最适合你需求的设置。
请注意,在配置这些选项时,务必考虑系统的安全性和访问控制需求。如果没有充分的理由和了解,不建议随意启用 no_subtree_check 和 no_root_squash,以免导致安全漏洞或数据泄漏。在大多数情况下,使用默认的权限设置和合理的客户端访问控制是较为安全的选择。
当修改了 /etc/exports 文件之后,需要重新加载导出的配置,可以使用 exportfs -a 命令来实现。此外,为了确保共享目录权限的安全性,请确保只授予必要的客户端访问权限,并避免将共享目录开放给不必要的主机。
最后更新于