nfs

简介:

#######################

####### nfs ############

########################

一 NFS概念

   网络文件系统(NFS)是Unix系统和网络附加存储文件管理器常用的网络文件系统,允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。


   NFS协议有多个版本:Linux支持版本4、版本3和版本2, 而大多数系统管理员熟悉的是NFSv3。默认情况下,该协议并不安全,但是更新的版本(如NFSv4)提供了对更安全的身份验证的支持,甚至可以通过kerberos进行加密。


二 NFS服务器配置


    若要配置基本NFS服务器,您应该安装nfs-utils软件包。然后,您应该编辑/etc/exports以列出您希望通过网络与客户端系统共享的文件系统,并指出哪些客户端对导出具有何种访问权限。例如:

/var/ftp/pub  192.168.0.0/24(ro,sync)

    将目录/var/ftp/pub导出至192.168.0.0/24网络上的所有主机(对目录具有只读权限)。

/export/homes *.example.com(rw,sync)

    将目录/export/homes导出至exmaple.com中的所有主机(对目录具有读写权限)。


    当NFS服务器运行时,每次您编辑/etc/exports后,都应通过在保存更改后执行exportfs -r来确保应用这些更改。您可以使用exportfs -v显示所有导出。


    NFSv4还导出pseudo-root(所有导出的文件系统的root)。如果客户端挂载nfs-server:/ ,这将在NFS服务器上的/下面相对于其位置挂载所有导出文件系统。这对于浏览从客户端的服务器导出的所有文件系统有用。您仍可单独挂载文件系统。默认情况下,NFS服务器将NFS客户端上的root视为用户nfsnobody。即,如果root尝试访问挂载的导出中的文件,服务器会将其视作用户nfsnobody访问。在NFS导出被无磁盘客户端用作/和root需要被视作root的情况中,这种安全措施存在隐患。若要禁用此保护,服务器需要将no_root_squash添加到在/etc/exports中导出设置的选项列表:

/exports/root 192.168.0.1(rw,no_root_squash)

对于NFSv4,必须在服务器上打开端口2049/TCP(对于nfsd)。对于NFSv3和更早版本,必须为rpcbind、rpc.mountd、lockd和rpc.rquotad打开更多端口,而在“随机”选择的端口上启动其中许多服务这一事实又增加了复杂性。此外,NFSv2和NFSv3支持UDP传输,还要求打开相应的端口。


三 Demo

1.启动服务

yum install nfs-utils 

systemctl enbale nfs-server

systemctl start nfs-server 

firewall-cmd --permanent --add-service=nfs

firewall-cmd --permanent --add-service=rpc-bind

firewall-cmd --permanent --add-service=mountd


   95 yum install nfs-utils 

   96  systemctl status firewalld

   97  systemctl start firewalld

   98  systemctl status firewalld

   99  firewall-cmd --list-all

  100  systemctl status nfs-server

  101  systemctl start nfs-server

  102  systemctl status nfs-server

  103  firewall-cmd --permanent --add-service=nfs

  104  firewall-cmd --permanent --add-service=rpc-bind

  105  firewall-cmd --permanent --add-service=mountd

  106  firewall-cmd --reload

wKioL1k6l-CCgbxNAAEVLo666-E699.png-wh_50

wKiom1k6l-GTrRYiAADn8mnwibI529.png-wh_50

wKioL1k6l-LxAMiZAACuGVrp878039.png-wh_50

[student@localhost mnt]$ showmount -e 172.25.254.244

Export list for 172.25.254.244:


2.共享目录

server:

systemctl  start nfs-server  ###开启服务

mkdir /public   ###建立共享目录

chmod 777 /public ####给共享目录设置权限


 vim /etc/exports  配置文件   ###man 5 exportfs 查看exports怎么写

 exportfs -rv   ###使/etc/exports文件生效


(1)/public   *(sync)    ####public共享给所有人并且数据同步

(2)/public   172.25.254.0/24(sync)  ####public共享给172.25.254.0网段并且数据同步

(3)/public   *.example.com(sync)###public共享给example.co域的所有主机

(4)/public   172.25.254.144(ro,sync)   172.25.254.44(rw,sync)

###public共享给144是只读。44是读写。

(5)/public   *(rw,sync,no_root_squash) #####public共享给所有人,当客户端使用root挂载不改变用户身份。

(6)/public   *(sync,anonuid=1001,anongid=1000) ###public共享给所有人以1001为uid,以1000为gid。


(1-3)操作

server:

   16  vim /etc/exports

/public   *(sync)  ###public共享给所有人并且数据同步

   17  exportfs -rv

   18  mkdir /public

   19  exportfs -rv

   20  touch /public/file{1..4}

   21  vim /etc/exports

/public   172.25.254.0/24(sync)  ####public共享给172.25.254.0网段并且数据同步

   22  exportfs -rv

   23  vim /etc/exports

/public   *.example.com(sync)###public共享给example.co域的所有主机

   24  exportfs -rv

wKiom1k6l-LxcbFYAACjqoqBVkA454.png-wh_50

desktop:测试

   mount 172.25.254.244:/public /mnt  ####临时挂载

    2  mount 172.25.254.244:/public /mnt  ###public共享给所有人并且数据同步

    3  cd /mnt

    4  ls

    5  touch westos

    9  umount /mnt

   10  mount 172.25.254.244:/public /mnt####public共享给172.25.254.0网段并且数据同步

   11  df

   12  umount /mnt

   13  mount 172.25.254.244:/public /mnt#####public共享给example.co域的所有主机

   14  df

   15  hostname

wKioL1k6l-PCtnccAABebJlX2UY286.png-wh_50

wKioL1k6mOyQRCwvAAC2HCGDARs327.png-wh_50

wKioL1k6mOzREcoFAACoSx07gTg030.png-wh_50

(4)

[root@server ~]# vim /etc/exports

[root@server ~]# exportfs -rv

exporting 172.25.254.144:/public

exporting 172.25.254.44:/public###public共享给144是只读。44是读写

[root@server ~]# chmod 777 /public 

测试:

[root@desktop ~]# mount 172.25.254.244:/public /mnt

[root@desktop ~]# cd /mnt

[root@desktop mnt]# ls

file1  file2  file3  file4

[root@desktop mnt]# touch westos

touch: cannot touch ‘westos’: Read-only file system

[root@foundation44 ~]# mount 172.25.254.244:/public /mnt

[root@foundation44 ~]# cd /mnt

[root@foundation44 mnt]# ls

file1  file2  file3  file4

[root@foundation44 mnt]# touch westos

[root@foundation44 mnt]# ls

file1  file2  file3  file4  westos

[root@foundation44 mnt]# ll

total 0

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file1

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file2

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file3

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file4

-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  8 23:39 westos

(5)

[root@server ~]# vim /etc/exports

/public   *(rw,sync,no_root_squash) #####public共享给所有人,当客户端使用root挂载不改变用户身份

[root@server ~]# exportfs -rv

exporting *:/public  


[root@desktop ~]# mount 172.25.254.244:/public /mnt

[root@desktop ~]# cd /mnt

[root@desktop mnt]# ll

total 0

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file1

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file2

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file3

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file4

-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  8 11:39 westos

[root@desktop mnt]# touch westos1

[root@desktop mnt]# ll

total 0

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file1

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file2

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file3

-rw-r--r--. 1 root      root      0 Jun  8 10:52 file4

-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  8 11:39 westos

-rw-r--r--. 1 root      root      0 Jun  8 11:51 westos1

(6)

[root@server ~]# vim /etc/exports

/public   *(sync,anonuid=1001,anongid=1000) ###public共享给所有人以1001为uid,以1000为gid。

[root@server ~]# exportfs -rv

exporting *:/public

[root@server ~]# useradd westoos

[root@server ~]# id student

uid=1000(student) gid=1000(student) groups=1000(student),10(wheel

[root@server ~]# id westoos

uid=1001(westoos) gid=1001(westoos) groups=1001(westoos)


[root@foundation44 ~]# mount 172.25.254.244:/public /mnt

[root@foundation44 ~]# cd /mnt

[root@foundation44 mnt]# ll

total 0

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file1

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file2

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file3

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file4

-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  8 23:39 westos

-rw-r--r--. 1 root      root      0 Jun  8 23:51 westos1

[root@foundation44 mnt]# touch file

[root@foundation44 mnt]# ll

total 0

-rw-r--r--. 1 westos    kiosk     0 Jun  9 00:13 file

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file1

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file2

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file3

-rw-r--r--. 1 root      root      0 Jun  8 22:52 file4

-rw-r--r--. 1 nfsnobody nfsnobody 0 Jun  8 23:39 westos

-rw-r--r--. 1 root      root      0 Jun  8 23:51 westos1


四 保护NFS输出

Demo:

在serverx和desktopx上运行脚本,加入kerberos认证域:

# lab nfskrb5 setup

安装kerberos服务所需的keytab:(以下操作都在server0上进行)

# wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/server0.keytab

激活NFS v4.2版本,可以输出selinux标签,编辑/etc/sysconfig/nfs修改如下选项:

RPCNFSDARGS="-V 4.2"

启动nfs-secure-server服务:

# systemctl start nfs-secure-server; systemctl enable nfs-secure-server

配置NFS输出:

# mkdir /securenfs

# echo '/securenfs desktop0(sec=krb5p,rw)' >> /etc/exports

# exportfs -r

安装kerberos服务所需keytab:(以下操作都在dekstop0进行)

# wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/desktop0.keytab

启动nfs-secure服务:

# systemctl start nfs-secure; systemctl enable nfs-secure

配置客户端挂载:

# mkdir /mnt/secureshare

# echo 'server0:/securenfs /mnt/secureshare

/etc/fstab

nfs defaults,v4.2,sec=krb5p 0 0' >>

# mount -a


在server上;

(1)开启kerberos认证,得到ldap用户

wKiom1k6mO6wRfKyAAO_WxOSvAM225.png-wh_50

wKiom1k6mPODvSUTAAIE0997STk140.png-wh_50

wKioL1k6mPjyn5xoAAGaeWZxkow378.png-wh_50

wKioL1k6mPrhwWUsAADdlNJdqiE733.png-wh_50


wKioL1k6mQrj4OHnAAEqz_f1_Gg402.png-wh_50

(2)wegt http://172.25.254.254./pub/keytabs/server0.keytab -O  

/etc/krb5.keytab 

ktutil

wKioL1k6m0aj4sCMAAQVrZ67kWA188.png-wh_50

激活NFS v4.2版本,可以输出selinux标签,编辑/etc/sysconfig/nfs修改如下选项:

RPCNFSDARGS="-V 4.2"

wKiom1k6m37TjYmbAAIZtPU4RfM786.png-wh_50

systemctl start nfs-secure-server;

systemctl enable nfs-secure-server


vim /etc/exports

/public    *(rw,sec=krb5p)

exportfs -rv


在desktop上:

开启kerberos认证,得到ldap用户

wKiom1k6mQHwYB8dAAI12WguQ24713.png-wh_50

wKiom1k6mQaTXtUAAAGMZm1jr8I928.png-wh_50

wKioL1k6mRmR_EZfAAR_CDPKOJE188.png-wh_50

wegt http://172.25.254.254./pub/keytabs/server0.keytab -O  

/etc/krb5.keytab 

ktutil

systemctl start nfs-secure-server;

systemctl enable nfs-secure-server

wKiom1k6m0jSnV9BAANNy6ftqFE724.png-wh_50

mount 172.25.254.244:/public /mnt  -o  sec=krb5p

su - kiosk/student

cd /mnt

su - ldapuser1

klist

wKioL1k6m3_QZjNuAAIzNpdkv0c164.png-wh_50

wKiom1k6m4HDK6fCAANiD7pPKME557.png-wh_50










本文转自 如何何如  51CTO博客,原文链接:http://blog.51cto.com/12778805/1933944,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Unix
|
8月前
|
网络协议 网络安全
|
8月前
|
网络安全
nfs autos
nfs autos
113 0
|
8月前
|
域名解析 网络协议 Unix
NFS服务器详解
NFS服务器详解
1132 0
|
存储 网络协议 Linux
NFS服务配置
NFS会经常用到,用于在网络上共享存储。这样讲,你对NFS可能不太了解,举一个例子来说明一下NFS是用来做什么的。假如有三台机器A, B, C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到A, B, C. 但是使用NFS只需要放到A上,然后A共享给B和C即可。访问的时候,B和C是通过网络的方式去访问A上的那个目录的。
348 0
NFS服务配置
|
测试技术
|
Oracle 关系型数据库 网络安全