[TOC]

0x01 NFS环境安装

(1)Ubuntu下安装NFS
适用系统:Debian/Ubuntu

#Step1、Install Required Packages(Server)
apt-get update
apt-get install nfs-kernel-server rpcbind nfs-common
# Client Side SetUp (Client端)
apt-get install nfs-common rpcbind


#Step2、Make Configuration
​配置文件 修改:
nano /etc/default/rpcbind
OPTIONS=""

#设置允许连接的ip
nano /etc/hosts.allow
portmap: 192.168.1. #Example Allow 192.168.1.0/24 to be Accessed on Network

#Configure idmapd
nano /etc/default/nfs-common
NEED_IDMAPD=YES #插入
-----------------------------------------------------
nano /etc/idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain

[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

# Configure NFS
nano /etc/exports
/exports 192.168.1.0/255.255.255.0(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)

#Step3、配置共享目录
mkdir -p /exports/home
#进行绑定共享目录
cd /exports
mount --bind /home ./home

#配置的共享目录
nano /etc/fstab
/home /exports/home none bind

#Step4、启动RPC服务于nfs共享服务;
/etc/init.d/nfs-kernel-server start
/etc/init.d/rpcbind star


(2)Centos下安装NFS

#安装nfs
yum –y install rpcbind nfs-utils dos2unix
chkconfig rpcbind on
chkconfig nfs off #nfs不需要设置开机自动启动,因为nfs的启动由heartbeat管理
service rpcbind start
#确认NFS服务器启动成功:
rpcinfo -p

#设置共享目录以及读写权限(可以添加多台主机)
vi /etc/exports
/data/ 192.168.1.0/255.255.255.0(rw,sync,root_squash,anonuid=500,anongid=500,insecure)
/home/share 192.168.8.0/24(rw,no_root_squash)
/home/zhidata 192.168.8.7(rw)
/home/upload 192.168.8.0/24(rw,all_squash,anonuid=1001,anongid=1001)
/home/nfs 192.168.8.0/24(ro) *(ro,all_squash)

#参数说明
1. async / sync 异步或者通步写入磁盘()
2. fsid=0 表示将/data找个目录包装成根目录
3. ro 只读权限 /rw读写权限
4. no_root_squash 访问共享目录时用户如果是root权限,对共享目录也具有root权限(即使共享目录没有写入的权限也能写入)
5. root_squash 如果访问共享目录是root的权限用户对共享目录的权限会被压缩为nfsnobody用户的权
6. all_squash 不管你访问共享目录的用户是谁都必须压缩为nfsnobody用户的权限
7. anonuid与anongid设置组

exportfs -av #导入生效


#注:nfs其实还依赖nfs-lock、nfs-idmap两个服务,但是无需我们去做相关配置。
#防火墙配置
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --permanent --zone=public --add-service=mountd
firewall-cmd --permanent --zone=public --add-service=rpc-bind
firewall-cmd --reload


#建立一个共享目录(注意权限貌似windwos上必须要x权限)
$ chmod 777 /data/ #方式1
$ chmod o+w /data/ #方式2

使用windows连接linux上面的NFS服务进行共享数据:

telnet nsf_ip 111  #查看是否本分ping通

#安装完成后会有mount命令
mount #查看挂载情况
mount -h #挂载帮助

#查看nfs挂载的目录(windows与linux相同)
showmount -e 10.10.107.221 #显示指定NFS服务器上的共享目录列表(或者叫输出列表)
导出列表在 10.10.107.221:
/data 10.10.107.0/255.255.255.0

#查看已被挂载的客户端信息
[[email protected] data]# showmount -a
All mount points on Security-221:
10.10.107.112:/data


#挂载命令
#mount \\NFS的IP地址或者主机名\nfs目录名 挂载点
mount \\10.10.107.221\data x:
x: 现已成功连接到 \\10.10.107.221\data
命令已成功完成。

#取消挂载
umount x:
正在断开 x: \\10.10.107.221\data
命令已成功完成。

WeiyiGeek.windows安装NFS客户端

实现文件上传的nfs中:
方式1:就是将共享文件的权限设置为777,但是这样是极不安全的
WeiyiGeek.Windwos连接NFS客户端

方式2:修改win7对nfs分区只读属性
Win7 NFS客户端使用mount命令挂载NFS服务之后,文件系统对Win7只读,无法写入文件,无法新建文件夹,此时使用mount命令可以查看到如下状态:

本地    远程                                 属性
-------------------------------------------------------------------------------
x: \\10.10.107.221\data UID=-2, GID=-2
rsize=32768, wsize=32768
mount=soft, timeout=1.6
retry=1, locking=no
fileaccess=755, lang=GB2312-80
casesensitive=no
sec=sys
#UID=-2由于在存储设备上共享出来的NFS文件系统归属于root权限,并且无法修改该所属用户,而Windows通过UID=-2的用户去写,肯定写不进去。
解决办法: 让Win7在挂载NFS的时候将UID和GID改成0即可
打开注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
增加两项:AnonymousUid,AnonymousGid

WeiyiGeek.register



使用linux连接到nfs服务器:

#NFS客户端安装:
yum install nfs-utils -y

#使用mount命令挂载
mount –t nfs X.X.X.X:/data /mnt
#对于不同的网络情况,有针对地选择 UDP 或 TCP 传输协议。传输协议可以自动选择,也可以手动设置。
#一般情况下,使用 TCP 的 NFS 比较稳定,使用 UDP 的 NFS 速度较快。
#在机器较少,网络状况较好的情况下,使用 UDP 协议能带来较好的性能。
# 当机器较多,网络情况复杂时,推荐使用 TCP 协议(V2 只支持 UDP 协议)。
# 在局域网中使用 UDP 协议较好,因为局域网有比较稳定的网络保证,使用 UDP 可以带来更好的性能。
# 在广域网中推荐使用 TCP 协议,TCP 协议能让 NFS 在复杂的网络环境中保持最好的传输稳定性。

mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR

#查看客户端挂载信息
df -h

#与windows相同取消挂载使用
umount /mnt

0x02 NFS安全配置

NFS安全配置:

#限制客户机数量
## 1. 修改 /etc/hosts.allow 和 /etc /hosts.deny 来限制客户机数量。
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow
/etc/hosts.deny
portmap: ALL : deny

## 2. 配置 nosuid 和 noexec
#SUID (Set User ID) 或 SGID (Set Group ID) 程序可以让普通用户以超过自己权限来执行。很多 SUID/SGID 可执行程序是必须的,但也可能被一些恶意的本地用户利用,获取本不应有的权限。
#尽量减少所有者是 root,或是在 root 组中却拥有 SUID/SGID 属性的文件。

#如禁止 set-UID 程序与直接执行其中的二进制文件在 NFS 服务器上运行,可以在 /etc/exports 加入一行
/www www.abc.com(rw, root_squash, nosuid,noexec)

## 3. 密码验证(建立一个认证用户)
useradd nfs -s /sbin/nologin
passwd nfs

$cat /etc/passwd|grep nfs #查看uid与guid
nfs:x:1001:1001::/home/nfs:/sbin/nologin

#设置NFS配置文件(建立的文件就是用户权限)
/home/upload 192.168.8.0/24(rw,all_squash,anonuid=1001,anongid=1001)