NFS 服务
作者:互联网
NFS服务
课程目标
- 了解NFS服务器的应用场景及特点
- 掌握NFS服务器实现读/写文件共享
- 掌握NFS Client访问及挂载
一、NFS服务介绍
NFS(Network File System)网络文件系统
- 主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux
- 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用
- 支持多节点同时挂载及并发写入
企业应用:为集群中的web server提供后端存储
该服务包括的组件:
RPC(Remote Procedure Protocol):
远程过程调用协议:它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
rpcbind // 负责NFS的数据传输,远程过程调用 tcp协议 端口111
nfs-utils // 控制共享哪些文件,权限管理
二、NFS服务器搭建
[root@server ~]# rpm -q rpcbind
rpcbind-0.2.0-11.el6.x86_64
[root@server ~]# rpm -qa |grep ^nfs
nfs-utils-1.2.3-39.el6.x86_64 // nfs服务的一个脚本控制工具(服务端与客户端)
nfs-utils-lib-1.1.5-6.el6.x86_64 // nfs库文件
nfs4-acl-tools-0.3.3-6.el6.x86_64 // acl工具包
/etc/exports man 5 exports
共享目录 共享选项
/share/nfs *(ro,sync)
共享主机:
* :代表所有主机
192.168.0.0/24:代表共享给某个网段
192.168.0.0/24(rw) 192.168.1.0/24(ro):代表共享给不同网段
192.168.0.254:共享给某个IP
*.itcast.com:代表共享给某个域下的所有主机
共享选项:
ro:只读
rw:读写
sync:实时同步,直接写入磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置服务nfs服务的用户的uid,uid需要在/etc/passwd中存在
anongid:设置服务nfs服务的用户的gid
root_squash:默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人server端是它自己,client端是nobody。
no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。
all_squash:不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody
nfs服务端的用户会影响客户端访问。
在文件系统中,区别用户看UID。
no_root_squash,客户端创建了一个文件,在nfs服务端没有对应的用户,那么显示属主的时候显示和客户端文件创建者UID相同的用户为属主。
需求1:共享本地/share/nfs目录给所有人,以读写方式共享
1、mkdir /share/nfs -p
2.vim /etc/exports
/share/nfs *(rw)
3.启动服务
[root@server ~]# service rpcbind restart
Stopping rpcbind: [ OK ]
Starting rpcbind: [ OK ]
[root@server ~]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@server ~]# netstat -nltp|grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 4428/rpcbind
tcp 0 0 :::111 :::* LISTEN 4428/rpcbind
4.客户端测试
[root@client ~]# mkdir /u01
[root@client ~]# mount.nfs 10.1.1.2:/share/nfs /u01 // 挂载到本地/u01
[root@client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 16G 3.7G 12G 25% /
tmpfs 491M 72K 491M 1% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/sda3 2.0G 37M 1.8G 2% /home
/dev/sr0 4.2G 4.2G 0 100% /media
10.1.1.2:/share/nfs 16G 3.8G 12G 26% /u01
测试写入
[root@client ~]# cd /u01
[root@client u01]# ls
file1 file2 file3 file4 file5
[root@client u01]# touch file6
touch: cannot touch `file6': Permission denied // 目录权限拒绝
原因:server端的共享目录权限不够
解决:[root@server ~]# chmod o+w /share/nfs
重新测试,touch file6,在server端ls /share/nfs 显示如下
-rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 22 23:04 file6
练习:
1.搭建一个NFS 服务,将本机的/share/nfs 目录共享给192.168.91.0/24网段(以读写方式)和10.1.1.2,10.1.1.3主机(以只读方式)
server端:
1. mkdir /share/nfs
2. vim /etc/exports
/share/nfs 192.168.91.0/24(rw) 10.1.1.2(ro) 10.1.1.3(ro)
client端
1. 创建一个空目录作挂载点 /u01
2. mount.nfs 10.1.1.2:/share/nfs /u01或者
mount -t nfs 10.1.1.2:/share/nfs /u01
示例1:NFS自动挂载目录
首先:
1. A主机上:
需要创建相应的用户user1~3, eg:user1 --> /user1(挂载点)
2. B主机上:
搭建nfs服务,将/share/nfs共享出来
3. A主机上:
挂载B主机上的共享目录到指定挂载点上
测试验证:
在A主机进行
环境:ftp-server:10.1.1.2 (主机名是server,临时作为ftp-server搭建nfs共享目录的挂载点)
nfs-server:10.1.1.3 (主机名是client,临时修改hostname为此)
client:10.1.1.4 (主机名是web2,临时作为客户端测试验证)
第一步.ftp-server:
创建用户并且指定用户家目录
[root@server ~]# useradd -d /rhome/user01 -M user01
[root@server ~]# useradd -d /rhome/user02 -M user02
[root@server ~]# useradd -d /rhome/user03 -M user03
这些用户不能直接登录ftp,没有家目录
[root@server ~]# echo 123|passwd --stdin user01
Changing password for user user01.
passwd: all authentication tokens updated successfully.
[root@server ~]# echo 123|passwd --stdin user02
Changing password for user user02.
passwd: all authentication tokens updated successfully.
[root@server ~]# echo 123|passwd --stdin user03
Changing password for user user03.
passwd: all authentication tokens updated successfully.
第二步.nfs-server
搭建一个nfs服务,共享目录/data
[root@client ~]# mount /dev/sdb /data
[root@client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 16G 3.7G 12G 25% /
tmpfs 491M 72K 491M 1% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/sda3 2.0G 37M 1.8G 2% /home
/dev/sr0 4.2G 4.2G 0 100% /media
/dev/sdb 9.9G 151M 9.2G 2% /data //提前准备一块空间来测试
[root@client ~]# cat /etc/exports
/data 10.1.1.2(rw)
[root@client ~]# service nfs start
[root@client ~]# mkdir /data/user0{1..3}
第三步. ftp-server
[root@server ~]# mkdir /rhome/user0{1..3}
[root@server ~]# mount.nfs 10.1.1.3:/data/user01 /rhome/user01
[root@server ~]# df -h
10.1.1.3:/data/user01 9.9G 151M 9.2G 2% /rhome/user01
测试验证:
[root@web2 ~]# ftp 10.1.1.2
Connected to 10.1.1.2 (10.1.1.2).
220 (vsFTPd 2.2.2)
Name (10.1.1.2:root): user01
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,1,2,47,71).
150 Here comes the directory listing.
226 Directory send OK.
ftp>
此时目录里面是空,现在到nfs-server的/data/user01里面创建一个文件
[root@client user01]# echo hello world > file1
[root@client user01]# ll
total 4
-rw-r--r-- 1 root root 12 Apr 23 15:13 file1
再到客户端去查看
ftp> ls
227 Entering Passive Mode (10,1,1,2,21,40).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 12 Apr 23 07:13 file1
226 Directory send OK.
出现file1文件
到ftp-server端查看
[root@server ~]# ls /rhome/user01
file1
[root@server ~]# su - user01
-bash-4.1$ ls
file1
-bash-4.1$ pwd
/rhome/user01
-bash-4.1$ touch file2
touch: cannot touch `file2': Permission denied // 没有权限
说明:正常情况下,user01只能访问ftp服务器,但是不能上传文件,原因是nfs-sercer的共享目录没有权限
[root@client user01]# ll -d /data/user01 //查看共享存储,对其他人没有写权限
drwxr-xr-x 2 root root 4096 Apr 23 15:13 /data/user01
此时修改/data的权限,(高级权限o+t,加一个粘滞位,一般作用在公共目录上,777,加上后只允许root和文件创建者可以删除,其他人不可以删除不属于自己的文件),再到ftp-server端测试
[root@client user01]# ll -d /data/user01
drwxr-xr-x 2 root root 4096 Apr 23 15:13 /data/user01
[root@client user01]# chmod 1777 /data/ -R
发现能够创建文件
-bash-4.1$ touch file2
-bash-4.1$
再去客户端web2测试,发现可以上传文件,文件存在共享存储/data/user01中
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (10,1,1,2,73,8).
150 Ok to send data.
226 Transfer complete.
51880 bytes sent in 0.0601 secs (863.54 Kbytes/sec)
[root@client user01]# ll
total 56
-rwxrwxrwt 1 root root 12 Apr 23 15:13 file1
-rw-rw-r-- 1 503 503 0 Apr 23 15:25 file2
-rw-r--r-- 1 503 503 51880 Apr 23 15:28 install.log
自始至终,客户端上传文件都是在共享目录中进行的,解决了由于ftp-server空间不够无法服务的情况。
家不完整怎么解决?
创建一个用户后,默认系统会将以下隐藏文件拷贝到家目录,所以第一个猜测是,家不完整的时候,手动拷贝就能解决。
[root@server ~]# ls -a /etc/skel/.
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
[root@server ~]# cp /etc/skel/. /rhome/user01
拷贝之后会报无权操作错误,但是去nfs-server的共享目录里查看,发现已经有了这些文件,但是返回ftp-server端切换user01还是会报权限拒绝,第二个猜测是因为用root进行cp,隐藏文件权限600,此时在nfs-server端的共享目录给所有隐藏文件修改权限chmod 777 .,在ftp-server切换user01还是不行,第三个猜测大概是属主、属组的问题。
cd /etc/skel --> cp -a .bash* /data/uu1
方式2实现:
ftp-server:10.1.1.2
nfs-server:10.1.1.3
client:10.1.1.4
步骤:
第一步:
ftp-server端:
创建用户
useradd uu1 --> /home/uu1
useradd uu2 --> /home/uu2
nfs-server端:
在data目录里给用户创建相应的目录
mkdir /data/uu1
mkdir /data/uu2
给共享目录设置相应权限
chmod 1777 /data -R
发布共享目录
vim /etc/exports
/data 10.1.1.2(rw)
重启服务
service nfs restart
ftp-server端:
uu1用户为例,挂载
mount.nfs 10.1.1.3:/data/uu1 /home/uu1
这样uu1用户上传文件就到了/data/uu1里面,实现目的
示例2:实现web集群后端存储
NFS-SERVER端:共享目录,并且创建一个首页文件
1. mkdir /share/web -p
2. echo "hello world" > /share/web/index.html
3. vim /etc/exports
/share/web 10.1.1.0/24(ro)
4. 重启服务(nfs)
service nfs restart
或者
exportfs -rv
WEB1和WEB2服务端:必须先关闭防火墙iptables和selinux
1. 安装httpd软件
2. 挂载nfs-server端的共享目录到/var/www/html
mount.nfs 10.1.1.2:/share/web /var/www/html
3. 启动服务
service httpd start
web1测试验证:
(此处client为web1,IP为10.1.1.3,web2为10.1.1.4)
[root@client ~]#
[root@client ~]# rpm -q httpd
httpd-2.2.15-29.el6.centos.x86_64
[root@client ~]# ls /var/www/html
[root@client ~]# mount -t nfs 10.1.1.2:/share/web /var/www/html
[root@client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 16G 3.7G 12G 25% /
tmpfs 491M 72K 491M 1% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/sda3 2.0G 37M 1.8G 2% /home
/dev/sr0 4.2G 4.2G 0 100% /media
10.1.1.2:/share/web 16G 3.8G 12G 26% /var/www/html
[root@client ~]# ls /var/www/html
index.html
[root@client ~]# service httpd start
Starting httpd: Syntax error on line 292 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory [FAILED]
纠错:
[root@client ~]# setenforce 0
[root@client ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.1.3 for ServerName
[ OK ]
web2测试验证
[root@web2 ~]# rpm -q httpd
httpd-2.2.15-29.el6.centos.x86_64
[root@web2 ~]# ls /var/www/html
[root@web2 ~]# mount.nfs 10.1.1.2:/share/web /var/www/html
[root@web2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 16G 3.7G 12G 25% /
tmpfs 491M 72K 491M 1% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/sda3 2.0G 37M 1.8G 2% /home
/dev/sr0 4.2G 4.2G 0 100% /media/CentOS_6.5_Final
10.1.1.2:/share/web 16G 3.8G 12G 26% /var/www/html
[root@web2 ~]# ls /var/www/html/
index.html
[root@web2 ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for web2
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
Windows:
IE:
http://10.1.1.3/
http://10.1.1.4/
标签:10.1,服务,server,client,nfs,NFS,root,user01 来源: https://www.cnblogs.com/liuwei-xd/p/11022111.html