关于nfs:
cifs与nfs相同点:
nfs和cifs的功能一样,都是用来解决数据的安全问题。
cifs与nfs不同点:
cifs可以用于windows和linux之间的目录共享,也可以用于linux与linux之间。
nfs只适用于linux与linux之间的文件共享。
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本 地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
一、NFS的配置
关闭时,先关客户端,原因,sync属于硬访问,当服务端先关闭,客户端就会一直访问,可能出现,关闭不了的现象。
前提知道:
async : 时实同步到服务器。
sync:时实同步到内存与硬盘里,完了之后,再传输到服务器。
实验准备:客户端IP:172.25.254.123,存储服务器端IP:172.25.254.223
步骤如下:
- 服务端的配置:
- yum install nfs-utils 安装
- systemctl start nfs-server 打开
- 创建共享目录 mkdir /westos
- vim /etc/exports 编辑文件,将目录同步到内存与硬盘里
- exportfs -rv 刷新文件,可以看到共享目录
- showmount -e 172.25.254.223 显示服务端/etc/exports 所共享的目录文件(没有刷新服务之前是看不到的)
- 添加防火墙服务
- firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
firewall-cmd --list-all
防火墙添加的作用如下:
showmount问rpc-bind(存储服务端)是否有共享,然后找mount,知道了是否有共享目录,允许后告诉客户端
然后去找nfs,nfs决定了是否给可客户端共享。
- 客户端
- mount 172.25.254.223:/westos /mnt
- df 挂载显示
- umount /mnt卸载挂载
二、客户端对目录的自动挂载,与自动卸载时间的修改
1、自动挂载:系统自动挂载到客户端的/net下。
实验步骤如下:
- 客户端:
- yum install autofs.x86_64 -y 安装autofs软件
- systemcl start autofs 重启服务
- ls -ld /net 此时会自动生成/net目录,并且自动挂载到该目录下(重启服务之前不显示)
验证是否可以自动挂载:
用ls命令看到这个/net目录中什么也没有,但是可以直接进172.25.254.223
看到我们共享的目录/westos,进入共享目录后,df查看已经自动挂载
也可以直接进入,/net/172.25.254.223/westos下,进行查看挂载。
2、自动卸载时间修改
- 退出共享目录后,默认经过300s秒后自动卸载
- 可以进入文件/etc/sysconfig/autofs,对卸载时间进行修改。
- systemctl restart autofs.service 重启服务
- 再次进入共享目录,/net/172.25.254.223/westos,此时自动挂载
- 推出目录cd / 3s后,df查看挂载,此时自动卸载
三、户端指定目录自动挂载
1、指定目录的自动挂载
步骤如下:
- 客户端操作:
- 编辑主配置文件/etc/auto.master,添加挂载点的上层目录,以及添加子配置文件。内容如下:/pub表示挂载点的上层目录,/etc/auto.pub 为子配置文件
- 编辑子配置文件:vim /etc/auto.pub ,内容如下: 挂载的最终目录 服务端共享IP:共享目录
- 重启服务
测试:进入挂载点:cd /pub/mount_catalog/ ,df显示,是否挂载上。
2、挂载参数的修改
- 客户端进入挂载点,mount命令显示其挂载模式的权限,刚开始都是ro只读的权限。
- vim /etc/auto.pub 修改挂载目录的权限,为只读挂载,版本为3 内容如下:westos -ro,vers=3 172.25.254.223:/westos
- 重启服务
- 再次进入挂载点,mount显示其挂载权限,已经修改。
四、指定用户端可写:
总的来说,就三个操作。
步骤如下:
- 客户端:1、给挂载目录rw权限。
- 存储服务器:2、给共享目录权限,3、给sync rw权限。
下面对相应步骤,作出分析。
1、在客户端给挂载目录rw权限
给了之后,还是不可以对在共享目录下创建文件。显示只读权限。
westos -rw,vers=3 172.25.254.223:/westos
2、存储服务器端给共享目录权限
- chmod 777 /westos 便于测试,就直接给了777权限
3、给sync rw权限
- vim /etc/exports 内容如下: /westos *(sync,rw)
- exportfs -rv 刷新文件
测试:在客户端,进入该共享目录,可以最该目录进行操作。
ls -l 可以看到,客户端新建的文件身份是nfsnobody匿名用户
指定客户端uid的身份
步骤如下:
存储服务器:
- vim /etc/exports 内容如下:/westos *(sync,rw,anonuid=1001)
客户端进入挂载点:
重新建立一个文件,可见身份是uid为1001(客户端没有id为1001的用户时,用id查看)
假如客户端,1001对应的用户时student那么,ls -l现实的文件对应的uid就是student
总结:其实就是在那个端看文件的身份,uid就对应的是哪个端的用户,该端没有uid对应的用户,则直接显示uid。
指定客户端gid身份
存储服务端操作:
使创建文件的所有人和所有组具有身份,而不是匿名用户
在服务端创建用户并修改文件
useradd westos
id westos
1001 1001 1001
vim /etc/exports
/westos_nfs *(sync,rw) 172.25.254.123 (rw,anonuid=1001,anongid1001)
exportfs -rv 刷新
中间加上的IP表示,只有该主机才可以使用223的共享目录
在客户端测试
指定客户端新建文件是root身份
步骤如下:
存储服务器:
- vim /etc/exports 内容如下:/westos *(sync,rw,no_root_squash)
即加上no_root_squash
含义:当客户端是root时,不做用户身份转换,沿用服务器端的root用户。
测试:在客户端进入共享目录,重新创建文件,ls -l显示,其用户身份为root,此时参数起作用,不进行root的身份转换。
当客户端用其它用户对共享目录进行操作时:
客户端创建用户:
useradd student id是1001
cd /pub/mount_catalog
touch
只允许指定主机对共享目录可写,具有相应的用户身份,其他用
/westos_nfs *(sync,rw) 172.25.254.64(rw,anonuid=1001,anongid1001)
all_squash表示所有的用户都转换成匿名匿名用户,
如果什么都不加,没有squash,不进行转换,只有root用户转换成匿名用户。
实验准备:客户端创建student用户,id是1000
服务端创建kiosk用户,id也是1000
exports里,只添加noneuid=1001,noneuid=1002,
步骤:客户端:切换到student用户,创建文件,在客户端显示
服务端:ls -l 显示文件的uid。
NFS服务的主配置文件:
/etc/exports:
格式:[共享的目录] [主机名或IP(参数,参数)]
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
第一列:欲共享出去的目录,
也就是想共享到网络中的文件系统;
第二列:可访问主机
192.168.152.13 指定IP地址的主机
nfsclient.test.com 指定域名的主机
192.168.1.0/24 指定网段中的所有主机
*.test.com 指定域下的所有主机
* 所有主机
第三列:共享参数
下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
例如可以编辑/etc/exports为:
/tmp *(rw,no_root_squash)
/home/public 192.168.0.*(rw) *(ro)
/home/test 192.168.0.100(rw)
/home/linux *.the9.com(rw,all_squash,anonuid=40,anongid=40)