CentOS7搭建NFS服务器
测试主机信息:
| 主机信息 | 操作系统 | IP |
|---|---|---|
| 服务端 | CentOS7 | 192.168.56.101 |
| 客户端 | CentOS7 | 192.168.56.102 |
1. NFS Server服务端配置
1.1 安装包
| |
1.2 启动服务
| |
1.3 修改配置文件/etc/exports
配置文件/etc/exports 用于设置哪些目录可以共享给哪些客户端。
| |
将以上内容加入到/etc/exports文件中,然后查看文件内容:
| |
配置参数说明:
- /home/reader/source: 共享目录位置
- 192.168.56.102: 客户端IP范围, *代表所有,即没有限制
- rw: 权限设置,可读可写
- sync: 同步共享目录
- no_root_squash: 可以使用root授权
- no_all_squash: 可以使用普通用户授权
1.4 重启服务
| |
1.5 检测本地的共享目录
| |
可以看到共享目录已经配置成功。
2. NFS Client客户端配置
像服务端一样安装nfs-utils包并启动服务:
| |
2.1 创建挂载点
| |
2.2 挂载共享目录
| |
2.3 查看挂载信息
| |
可以看到挂载成功。
2.4 测试文件共享
在服务端创建目录和文件:
| |
客户端查看共享文件,并尝试写人文件:
| |
可以看到:
- 显示的共享文件的
UID:GID是1004:1004,而不是显示reader:reader。 - 写人文件时提示
Permission denied权限拒绝。
出现这种情况是因为在服务端和客户端用户的UID、GID信息不一致。
查看服务端reader的ID信息:
| |
查看客户端reader的ID信息:
| |
参考:nfs permissions problems/same username different uid/gid
Make the uid/gid match the user ON THE SERVER and add the ‘all_squash’ option.
Here is my /etc/exports on the server:
1/share 192.168.1.2(rw,all_squash,anonuid=100,anongid=102)Now I can rw to the nfs share… the owner still appears as 100:102 but oh well.
我这边这应该这么修改:
| |
参数说明:
- all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nobody)。
- anonuid: 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx) 。
- anongid: 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx) 。
此处的anonuid=1004,anongid=1004对应的uid=1004和gid=1004就是我们服务端reader对应的uid他gid。
客户端再重启服务:
| |
重新测试。
现在服务端新建文件和文件夹:
| |
可以看到是我们想使用的reader账号。
再在客户端进行查看:
| |
此时,在客户端都显示的是nobody:nobody。
尝试写文件:
| |
可以看到能够正常写入。
此时在服务端检查一下:
| |
可以看到,客户端的数据正常在服务端显示出来了。
通过这种方式可以在NFS客户端进行正常的文件读写操作,并且在NFS服务端也能够正常显示文件权限信息。唯一的缺陷是在客户端上面显示的文件所属者和文件所属组是nobody:nobody。
2.5 其他说明
可以通过usermod和groupmod来修改用户的UID他GID信息:
| |
在系统部署时,没有运行很多服务的时候可以使用usermod和groupmod来修改用户ID信息,后期就不建议修改了,因为改变用户UID和GID会对运行的服务产生影响。
3. NFS参数说明
访问权限选项
- 设置输出目录只读:
ro - 设置输出目录读写:
rw
- 设置输出目录只读:
用户映射选项
- all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nobody
- no_all_squash:与all_squash取反(默认设置)
- root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
- no_root_squash:与rootsquash取反
- anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
- anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)
其它选项
- secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)
- insecure:允许客户端从大于1024的tcp/ip端口连接服务器
- sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
- async:将数据先保存在内存缓冲区中,必要时才写入磁盘
- wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
- no_wdelay:若有写操作则立即执行,应与sync配合使用
- subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
- no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
