RHCE:NFS网络文件系统服务端,客户端安装配置

RHCE网络文件系统(NFS)

服务端:

安装:

[root@server exports.d]# yum install nfs-utils

Loaded plugins: langpacks

Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version

启动服务:

[root@server exports.d]# systemctl status nfs-server

 

NFS服务添加到防火墙放行规则内:

[root@server exports.d]# firewall-cmd --permanent --add-service=nfs

success

[root@server exports.d]# firewall-cmd --reload

success

[root@server exports.d]# firewall-cmd --list-all

public (default, active)

  interfaces: eth0 eth1 eth2

  sources:

  services: dhcpv6-client dns mountd nfs rpc-bind samba smtp ssh

  ports: 3260/tcp

  masquerade: no

  forward-ports:

  icmp-blocks:

  rich rules:

 

配置文件:

[root@server exports.d]# cat /etc/exports

/nfs1 *(rw,sync)

/nfs2 *(rw,sync,sec=krb5p)

#/nfs1 *.example.com(ro,sync)

/nfs2 *.example.com(rw,sync,sec=krb5p)

/nfs3*.example.com(rw,sync)

 

也可以在/etc/exports.d目录下创建*.exports文件,在里面写入要导出系统上的目录即可

服务端配置:

[root@server exports.d]# pwd

/etc/exports.d

[root@server exports.d]# cat nfs3.exports

/nfs3*.example.com(rw,sync)

 

客户端配置:

[root@desktop misc]# showmount -e 172.25.0.11

Export list for 172.25.0.11:

/nfs1 *

/nfs3 *.example.com

/nfs2 (everyone)

 

修改配置文件后使配置文件生效:重新加载/etc/exports配置文件

[root@server exports.d]# exportfs -r

 

 

 

配置文件内容参数详解:

       # sample /etc/exports file

       /               master(rw) trusty(rw,no_root_squash)

       /projects       proj*.local.domain(rw)

       /usr            *.local.domain(ro) @trusted(rw)

       /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)

       /pub            *(ro,insecure,all_squash)

       /srv/www        -sync,rw server @trusted @external(ro)

       /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

       /build          buildhost[0-9].local.domain(rw)

语法:

      系统导出的目录允许客户端来访问的条件(导出目录的属性)

 

/myshareserver0.example.com#只允许server0.example.com来挂载目录/myshare

/myshare*.example.com#允许example.com域中的所有子域来访问/myshare目录下的文件

/myshareserver[0-10].example.com #允许server0.example.com - server10.example.com来访问

/myshare172.25.0.10#只允许172.25.0.10来访问

/myshare172.25.0.10/24#只允许172.25.0.x网络下的所有主机来访问

/myshare2000:472:18:b51:c32:a21 #只允许这个IPV6地址的客户端来访问

/myshare2000:134:234:234:234::/64#只允许这个IPV6子网下的主同来访问

 

/myshare*.example.com 172.25.0.0/24  #允许多个匹配的客户端来访问

 

导出目录的属性:

Ro:只读

RW读写

no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!

root_squash(默认):在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID GID 都会变成 nobody 那个系统账号的身份。

 

客户端:root_squash(默认)

默认情况下如果客户端是root用户,将无法创建文件,因为以root用户创建文件时,使用的用户权限是nfsnobody:nfsnobody,而服务器的默认文件夹是禁止其它用户(nfsnobody)有写权限:

所以在客户端root用户无法创建文件

[root@desktop nfs3]# >rsc

-bash: rsc: Permission denied

将服务端的文件夹修改在其它用户也可以写时,客户端才可以创建文件,创建文件的所属用户和组为nfsnobody:nfsnobody

服务端:

[root@server nfs3]# ls -dl /nfs3

drwxr-xr-x. 2 root root 6 Dec 18 13:55 /nfs3

[root@server nfs3]# chmod o+w /nfs3

[root@server nfs3]# ls -dl /nfs3

drwxr-xrwx. 2 root root 6 Dec 18 13:55 /nfs3

 

客户端:

[root@desktop nfs3]# >rscpass

[root@desktop nfs3]# ls

rscpass

[root@desktop nfs3]# ll

total 0

-rw-r--r--. 1 nfsnobody nfsnobody 0 Dec 18 14:37 rscpass

 

也可以在服务端就创建以nfsnobody为用户的文件夹,这样用默认配置,客户端如果以root用户登录的话,就可以创建和删除文件了

[root@server /]# chown nfsnobody /nfsshare/

[root@server /]# ls -dl /nfsshare/

drwxr-xr-x. 2 nfsnobody root 6 Dec 18 14:47 /nfsshare/

 

[root@desktop nfsshare]# >rscgmy

[root@desktop nfsshare]# ll

total 0

-rw-r--r--. 1 nfsnobody nfsnobody 0 Dec 18 14:51 rscgmy

 

在客户端查看服务端导出的目录列表:

[root@desktop misc]# showmount -e 172.25.0.11

Export list for 172.25.0.11:

/nfs1 *

/nfs3 *.example.com

/nfs2 (everyone)

在客户端挂载服务端导出的目录:

[root@desktop ~]# mount -t nfs 172.25.0.11:/nfs3 /mnt/nfs3

[root@desktop ~]# mount

172.25.0.11:/nfs3 on /mnt/nfs3 type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.25.0.10,local_lock=none,addr=172.25.0.11)

[root@desktop ~]# df -Th

Filesystem        Type      Size  Used Avail Use% Mounted on

/dev/vda1         xfs        10G  3.1G  6.9G  31% /

devtmpfs          devtmpfs  734M     0  734M   0% /dev

tmpfs             tmpfs     750M     0  750M   0% /dev/shm

tmpfs             tmpfs     750M   17M  733M   3% /run

tmpfs             tmpfs     750M     0  750M   0% /sys/fs/cgroup

172.25.0.11:/nfs3 nfs4       10G  3.5G  6.6G  35% /mnt/nfs3

 

 

保护NFS导出:

默认情况下,nfs不需要身份验证,仅根据客户端的IP地址或主机名来强制实施访问权限限制

通过krb5p来保护对文件的访问:

 

NFS客户端必须使用为已导出共享规定的方法之一连接到该共享,该方法以挂载选项sec=method 的形式指定

 

安全性方法: sec=none|sys|krb5|krb5i|krb5p

None:可对文件进行匿名访问,对服务器的写入将分配UID GIDnfsnobody,这需要selinux的布尔值nfsd_anon_wirte处于活动状态:

[root@desktop ~]# getsebool -a | grep nfsd

nfsd_anon_write --> off

 

Sys:文件访问权限基于UIDGID值的标准linux文件权限,如果没有指定,是信认客户端的任何UID

 

Krb5:客户端必须使用kerberos证明身份,再使用标准的linux权限来访问

Krb5i:添加加密性的保证,确保每个请求的数据未被篡改

Krb5p:为客户端和服务器的所有请求加密,防止数据泄露

 

配置前题条件:

时间同步:

Server端,desktop端,以及classroom端时间一定要同步,server,desktop一起同步classroom的时间

Server端:

[root@mail ~]# cat  /etc/chrony.conf  | grep server

server classroom.example.com iburst

[root@mail ~]# chronyc sources -V

210 Number of sources = 1

MS Name/IP address         Stratum Poll Reach LastRx Last sample

===============================================================================

^* classroom.example.com         8   6   377    52    +14us[  +26us] +/-  303us

 

Desktop端:

[root@desktop ~]# cat /etc/chrony.conf | grep server

server classroom.example.com iburst

[root@desktop ~]# chronyc sources -V

210 Number of sources = 1

MS Name/IP address         Stratum Poll Reach LastRx Last sample

===============================================================================

^* classroom.example.com         8   6   377    22    +68us[ +461us] +/-  196us

 

服务端server和客户端desktop的主机名要与kerberos上面认证的主机名要相同

 

服务端安装:

1.安装nfs-utils

[root@mail ~]# yum install nfs-utils

Loaded plugins: langpacks

Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version

2启动以下两个服务:

[root@mail ~]# systemctl start  nfs-secure-server.service

nfs-secure-server.service - Secure NFS Server

   Loaded: loaded (/usr/lib/systemd/system/nfs-secure-server.service; enabled)

   Active: active (running) since Mon 2017-12-18 13:59:39 CST; 6 days ago

[root@mail ~]# systemctl start nfs-server.service

nfs-server.service - NFS Server

   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled)

   Active: active (exited) since Mon 2017-12-18 13:59:39 CST; 6 days ago

 

3./etc/sysconfig/nfs中声明使用nfs4以上版本:RPCNFSDARGS="-V 4.2"

Cat /etc/sysconfig/nfs

# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)

RPCNFSDARGS="-V 4.2"

 

4.下载用于服务端认证的keytab,并将密钥存入/etc下,如下:

[root@mail ~]# wget http://classroom.example.com/pub/keytabs/server0.keytab -O /etc/krb5.keytab

[root@mail ~]# file /etc/krb5.keytab

/etc/krb5.keytab: data

 

验证krb5.keytab配置文件是否有效:

[root@server0 ~]# klist -k

Keytab name: FILE:/etc/krb5.keytab

KVNO Principal

---- --------------------------------------------------------------------------

   2 host/server0.example.com@EXAMPLE.COM

   2 host/server0.example.com@EXAMPLE.COM

   2 host/server0.example.com@EXAMPLE.COM

   2 host/server0.example.com@EXAMPLE.COM

   2 host/server0.example.com@EXAMPLE.COM#服务端的主机名一定是server0.example.com

 

5./etc/exports中进行共享目录的设置,需要声明使用的认证方式,如下:

创建要共享的目录:

Mkdir -p /public

Mkdir -p /protected

编写配置文件

[root@server0 etc]# cat /etc/exports

/public 172.25.0.0/24(ro)

/protected172.25.0.0/24(rw,sec=krb5p,sync)

使配置文件生效:

[root@server0 etc]# exportfs -r

6. 防火墙进行放行

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

#firewall-cmd --reload

7.重启服务,注意,此处需要重启 nfs-server.servicenfs-secure-server.service两个服务

[root@mail exports.d]# systemctl restart nfs-server.service  

[root@mail exports.d]# systemctl restart nfs-secure-server.service

8. 查看本地导出的目录:

[root@server0 /]# showmount -e localhost

Export list for localhost:

/protected 172.25.0.0/24

/public    172.25.0.0/24

 

客户端安装:

1.安装nfs-utils

[root@desktop ~]# yum install nfs-utils

重启服务

[root@desktop0 ~]# systemctl restart nfs-secure

[root@desktop0 ~]# systemctl status nfs-secure

 

2.下载和服务器匹配的密钥认证,如下:

[root@desktop ~]# wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/desktop0.keytab

[root@desktop ~]# file /etc/krb5.keytab

/etc/krb5.keytab: data

验证krb5.keytab配置文件是否有效:

[root@desktop0 ~]# klist -k

Keytab name: FILE:/etc/krb5.keytab

KVNO Principal

---- --------------------------------------------------------------------------

   2 host/desktop0.example.com@EXAMPLE.COM

   2 host/desktop0.example.com@EXAMPLE.COM

   2 host/desktop0.example.com@EXAMPLE.COM#客户端的主机名一定是desktop0.example.com

 

/etc/sysconfig/nfs中声明使用nfs4以上版本:RPCNFSDARGS="-V 4.2"

Cat /etc/sysconfig/nfs

# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)

RPCNFSDARGS="-V 4.2"

 

 

3. 通过krb5p加密的方式挂载服务端的NFS文件系统:

[root@desktop ~]# mount -t nfs -o sync,rw,sec=krb5p 172.25.0.11:/protected   /mnt/protected

 

添加到/etc/fstab

server0:/public/mnt/publicnfsdefaults,v4.20   0

server0:/protected/mnt/protectednfsdefaults,sec=krb5p,v4.20 0

验证/etc/fstab文件,并自动挂载

[root@desktop0 ~]# mount -a

 

4.查看已挂载的目录:

[root@desktop0 ~]# df -Th

Filesystem         Type      Size  Used Avail Use% Mounted on

/dev/vda1          xfs        10G  3.2G  6.9G  32% /

devtmpfs           devtmpfs  734M     0  734M   0% /dev

tmpfs              tmpfs     750M  140K  749M   1% /dev/shm

tmpfs              tmpfs     750M   17M  733M   3% /run

tmpfs              tmpfs     750M     0  750M   0% /sys/fs/cgroup

/dev/sda           xfs      1014M   33M  982M   4% /iscsidisk

server0:/public    nfs4       10G  3.7G  6.4G  37% /mnt/public

server0:/protected nfs4       10G  3.7G  6.4G  37% /mnt/protected

 

5.查看挂载的参数:

server0:/public on /mnt/public type nfs4 server0:/public on /mnt/public type nfs4 (rw,relatime,seclabel,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.25.0.10,local_lock=none,addr=172.25.0.11)

server0:/protected on /mnt/protected type nfs4 (rw,relatime,seclabel,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=krb5p,clientaddr=172.25.0.10,local_lock=none,addr=172.25.0.11)

注意:/mnt/public是以sec=sys的方式挂载,可以通过正常的系统用户权限来配置

      /mnt/protected是以sec=krb5p的方式挂载,只有krb5p认证的用户才有写权限,其它用户只有读权限

SELinux 和标记NFS

NFS挂载具有nfs_tselinux上下文,与其在提供导出的服务器上的selinux上下文无关

服务端:

修改服务器的NFS版本为4.2版本,以提供selinux导出到客户端的功能:

[root@server0 ~]# cat /etc/sysconfig/nfs | grep RPCNFSDARGS

RPCNFSDARGS="-V 4.2"

重启服务:

[root@server0 ~]# systemctl restart nfs-server.service

[root@server0 ~]# systemctl restart nfs-secure-server.service

 

客户端:

修改客户端导出的SELinux上下文

[root@desktop0 ~]#

mount -o context="system_u:object_r:public_content_rw_t:s0",sec=krb5p,v4.2 server0:/protected /mnt/protected

 

[root@desktop0 ~]# ll -Z /mnt/protected/testfile.txt

-rwxr-xr-x. ldapuser1 ldapuser1 system_u:object_r:public_content_rw_t:s0 /mnt/protected/testfile.txt

 

关于selinux的权限:

默认NFS可以对系统上所有文件进行读写

默认启动的值为:nfs_export_all_ro   nfs_export_all_rw

对于NFS可以读取的内容,应该具有以下selinux上下文:public_content_t nfs_t

对于NFS可以读写的内容:应该具有以下SELINUX上下文:public_content_rw nfs_t

如果使用public_content_rw上下文,则必须启用nfsd_anon_write布尔值以允许写入

 

 

 

扩展配置:

NFS服务器与客户端的搭建与配置

nfs用于linux之间共享文件目录,客户端可以将nfs服务器上共享的目录挂载到客户端本地,当作一个磁盘分区。

nfscentos7.0中默认版本为3,但是在centos7.0中已经添加了了nfs4nfs4版本中新增加了更安全的身份验证支持以及kerberos加密,由于默认还是使用版本3,所以如果客户端希望使用kerberos加密,则需要在服务器端和客户端同时进行配置

服务器端:在/etc/sysconfig/nfs内声明一下nfs版本,RPCNFSDARGS="-V 4.2"

注意:nfs的主要配置文件是/etc/exports,辅助配置文件是/etc/sysconfig/nfs

客户端:在挂载时声明版本:nfs server:/nfs2   /mnt/nfs2       nfs     defaults,v4.2,sec=krb5p   0   0

 

不加密的nfs服务器配置:

1.安装nfs-utils

2./etc/exports文件内进行共享文件路径、权限、允许访问网段等参数配置,格式如下:

共享目录路径      允许访问的网段(权限参数)

/nfs1   172.25.0.0/24(ro,sync)    #表示/nfs1可以由172.25.0.0/24网段内主机访问,read onlysync

★关于权限参数的下关系说明(如:rorwsync)

ro:该主机对该共享目录有只读权限

rw:该主机对该共享目录有读写权限

root_squash:客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户

no_root_squash:客户机用root访问该共享文件夹时,不映射root用户

all_squash:客户机上的任何用户访问该共享目录时都映射成匿名用户

anonuid:将客户机上的用户映射成指定的本地用户ID的用户

anongid:将客户机上的用户映射成属于指定的本地用户组ID

sync:资料同步写入到内存与硬盘中

async:资料会先暂存于内存中,而非直接写入硬盘

insecure:允许从这台机器过来的非授权访问

3.nfs所需要的服务在防火墙放行

firewall-cmd --permanent --add-server=nfs

firewall-cmd --permanent --add-server=mountd

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

简单说一下rpcrpc服务的主要功能就是指定每个nfs功能所对应的端口号,并通知给客户端,让客户端连接正确的端口号,因为nfs启动时端口号不固定,nfs服务启动时会随机选择一个可用的端口,然后向rpc服务报告,说明nfs服务现在所占用的端口,所以,rpc必须在nfs启动前启动,没有rpcnfs服务无法正常使用。

 

不加密nfs客户端配置方式:

1.安装nfs-utils

2.防火墙放行相关服务

3.本地fstab中挂载共享目录,如下:

server0:/nfs1   /mnt/nfs1       nfs     defaults        0 0

注意:

之前学习时,在挂载samba服务时的方式为://samba server/smb1

而在挂载nfs时为:nfs server:/nfs1,不要搞错。

4.mount -a

5.df查看挂载是否成功。

 

使用kerberos加密的nfs服务器配置方式:

1.安装nfs-utils

2./etc/sysconfig/nfs中声明使用nfs4以上版本:RPCNFSDARGS="-V 4.2"

3.下载用于认证的keytab,并将密钥存入/etc下,如下:

wget http://classroom.example.com/pub/keytabs/server.keytab -O(字母大写O) /etc/krb5.keytab

4./etc/exports中进行共享目录的设置,需要声明使用的认证方式,如下:

/nfs2   172.25.0.0/24(rw,sync,sec=krb5p)

5.防火墙进行放行

6.重启服务,注意,此处需要重启 nfs-server.servicenfs-secure-server.service两个服务

 

使用kerberos加密的nfs客户端配置方式:

1.安装nfs-utils

2.下载和服务器匹配的密钥认证,如下:

wget http://classroom.example.com/pub/keytabs/client.keytab -O(字母大写O) /etc/krb5.keytab

3.进行挂载,需要声明使用的kerberos类型以及nfs版本

server0:/nfs2   /mnt/nfs2       nfs     defaults,v4.2,sec=krb5p 0 0    #注意v4.2sec=krb5p这两个选项

4.mount -a

5.df

 

稍微说一下krb5p这个东西,nfs加密的方式,一共有三种方式krb5krb5ikrb5pkrb5 基于Kerberos票据的认证;krb5i 挂载时校验数据完整性;krb5p通过kerberos认证,并且对数据进行加密。正常的下载的kerberos密钥均包含这三种方式,自己选择即可。

kerberos的作用其实就是利用客户端和服务器两端对称的密钥,在客户端发送给服务器请求时,用客户端这面的证书密钥进行加密,然后传到服务器端,用对称的证书密钥解析后,得到服务器的验证,证明确实是客户端发过来的,并且在传递过程中没有被改动过,这就是kerberos的作用。

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS