首先需要保证客户端和服务器能相互Ping通,这是挂载nfs的前提条件。
sudo apt install nfs-kernel-server
也可以不创建新的目录,直接指定已存在的目录。后面客户端挂载时需要指定此目录
sudo mkdir -p /nfs
安装nfs-kernel-server
后会自动生成/etc/exports
配置文件
sudo vim /etc/exports #添加如下内容
/nfs 192.168.3*(rw,sync,no_root_squash,no_subtree_check)
# 192.168.3.* 3网段的所有ip都可以访问
# ro:默认选项,以只读的方式共享 rw:以读写的方式共享
# sync:默认选项,保持数据同步,数据同步写入到内存和硬盘
# async:异步,先将数据写入到内存,在将数据写入到硬盘
# secure:NFS客户端必须使用NFS保留端口(通常是1024以下的端口),默认选项。
# insecure:允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)。
# root_squash:将客户端使用的是root用户时,则映射到NFS服务器的用户为NFS的匿名用户(nfsnobody)
# no_root_squash:将客户端使用的是root用户时,则映射到FNS服务器的用户依然为root用户。
# subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
# no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
# anonuid=<UID>:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534)
# anongid=<GID>:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534)
client
以root
用户分别创建 root_squash
和 no_root_squash
,其中 no_root_squash
和 root_squash
的效果如下:
ruler@ruler-virtual-machine:/nfs$ ls -alh
total 12K
drwxrwxrwx 2 root root 4.0K 5月 31 22:12 .
drwxr-xr-x 25 root root 4.0K 5月 27 22:16 ..
-rw-r--r-- 1 root root 6 5月 31 22:05 client.txt
-rw-r--r-- 1 root root 0 5月 31 22:11 no_root_squash
-rw-r--r-- 1 nobody nogroup 0 5月 31 22:12 root_squash
exportfs
主要用于管理当前NFS服务器的文件系统,用法如下:
# 显示共享目录
sudo exportfs -v
# 全部挂载或者全部卸载
sudo exportfs -a
# 显示/etc/exportfs中共享的目录
sudo exportfs -s
# 重新挂载,可以不用重启nfs,而让配置文件生效
sudo exportfs -r
启动NFS服务
sudo /etc/init.d/nfs-kernel-server restart
如下提示即启动成功
[ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.
showmount -e # 显示NFS服务器的输出清单
Export list for ruler-virtual-machine:
/nfs 192.168.3*
showmount -a #以 host:dir 这样的格式来显示客户主机名和挂载点目录
使用如下命令挂载nfs,如果没有 nolock选项 终端会被阻塞。
192.168.3.13:/nfs
是server ip:server dir
的形式。
mkdir /nfs #clent创建挂载点,也可以指定其他目录作为挂载点
mount -t nfs -o nolock 192.168.3.13:/nfs ./nfs
服务器可以使用showmount -a
命令查看客户端挂载信息
ruler@ruler-virtual-machine:/nfs$ showmount -a
All mount points on ruler-virtual-machine:
192.168.3.12:/nfs
至此,客户端就可以访问服务器的/nfs
文件夹了。
实际上就是上面提到的root_squash
和no_root_squash
root_squash
:客户端以root
用户访问nfs
下的文件,在服务器看来都是nfsnobody
用户来访问的,文件的权限就是nfsnobody
用户具有的权限。
no_root_squash
:客户端以root
用户访问nfs
下的文件,在服务器看来还是以root
用户访问,所具有的权限也是root
权限。