第十四章 NFS服务搭建 && FTP服务搭建

一、 NFS介绍
二、NFS服务端安装配置
三、NFS配置选项
四、exportfs命令
五、NFS客户端问题
六、FTP介绍
七、使用vsftpd搭建ftp
八、xshell使用xftp传输文件
九、使用pure-ftpd搭建ftp服务
十、扩展

一、 NFS介绍

NFS是Network File System的缩写,中文意思是网络文件系统。

NFS的主要功能是通过网络(一般是局域网)让不同的主机系统之间共享文件或目录。

NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本

NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。

NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。

NFS虽然开启了服务,但是它是不监听端口的,最终监听端口实现TCP/IP通信过程的是由RPCbind服务产生的rpc协议实现的,监听111端口。

NFS工作原理流程

扫描二维码关注公众号,回复: 4657147 查看本文章

当访问程序通过NFS客户端向NFS服务器端存取文件时,其请求数据流程大致如下:

1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端的RPC服务就会通过网络向NFS服务器端的RPC服务端的111端口发起NFS文件存取功能的请求。

2)NFS服务器端的RPC服务找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。

3) NFS客户端获取到正确的端口,并与NFS服务器联机读取数据

4)NFS客户端数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。

二、NFS服务端安装配置

实验环境基本配置:

两台主机:

192.168.239.128(服务端)

192.168.239.135(客户端)

1. NFS服务器的安装

[root@Linux01 ~]# yum -y install nfs-utils rpcbind(rpcbind可以不加,安装nfs-utils时会自动安装)

[root@Linux01 ~]# rpm -qa nfs-utils rpcbind      //验证是否安装

2. 修改配置文件vim /etc/exports ,加入以下内容

/home/nfstestdir 192.168.239.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

3. 创建共享目录,设置权限

[root@Linux01 ~]# mkdir /home/nfstestdir
[root@Linux01 ~]# chmod 777 /home/nfstestdir       //为了方便实验,先将共享目录设置为777的权限

4. 启动nfs和rpcbind服务并设置开机自启动

[root@Linux01 ~]# systemctl start rpcbind(必须先于nfs主程序启动)
[root@Linux01 ~]# systemctl start nfs
[root@Linux01 ~]# systemctl enable rpcbind
[root@Linux01 ~]# systemctl enable nfs

5. 查看一下nfs和rpc进程

[root@Linux01 ~]# ps aux |grep rpcbind
[root@Linux01 ~]# ps aux |grep nfs

rpc相关进程。一般启动nfs服务的时候会自动启动rpc相关的服务

6. 查看一下系统监听的端口

[root@Linux01 ~]# netstat -lntp

注:一般显示为rpcbind,这里显示的是systemd,centos7特性问题,不影响。

三、NFS配置选项

1. NFS选项:

rw 读写

ro 只读

sync 同步模式,内存数据实时写入磁盘

async 非同步模式

no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大

root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户

all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户

anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid

2. NFS客户端配置及共享挂载

① [root@Linux01 ~]# yum -y install nfs-utils         //客户端也安装nfs-utils包(安装nfs-utils包的时候会自动的安装rpcbind包)

② 使用showmount查看服务端共享的目录

[root@Linux01 ~]# showmount -e 192.168.239.128

如果出现上面的错误,需要将服务端所有rpc进程的端口都在防火墙允许通过;也可以直接关闭防火墙。 192.168.239.128 是服务端的ip

③这里为了方便就直接关闭服务端的防火墙和SELINUX

[root@Linux01 ~]# systemctl stop firewalld
[root@Linux01 ~]# setenforce 0

④再使用showmount查看服务端的共享目录

[root@Linux01 ~]# showmount -e 192.168.239.128

这里查看到的就是先前在服务端 /etc/exports 文件中设置的目录

⑤客户端使用mount命令挂载共享的目录

[root@Linux01 ~]# mount -t nfs 192.168.239.128:/home/nfstestdir /mnt

//mount -t指定挂载的文件系统,服务端ip:共享目录; /mnt/     本地挂载路径

df -h 查看当前挂载的目录

3. 确认

①挂载完成后,在客户端的/mnt目录创建一个文件1.txt

②在服务端上查看/home/nfstestdir目录下是否有test.txt

注:这里看到在服务端和客户端上文件的uid和gid是不一样的,这就是anonuid/anungid的作用。

四、exportfs命令

exportfs命令是安装nfs包的时候自动安装的一个命令 ,它的作用是在修改了nfs配置文件时不需要重启nfs和rpcbind, 
就可以让新的配置生效。

因为在客户端挂载nfs服务器共享文件的时候,如果重启或停止nfs服务, 会让客户端的连接进程挂起无法结束或者重启进程,进程状态为D ,只有重启系统才能恢复正常 ,这样就只有客户端卸载了nfs后,服务端再重启rpc服务和nfs服务才不会出问题 。
但是如果有很多客户端挂载这个nfs服务器就非常麻烦了。 这时exportgs就可以体现它的用处了。

常用选项:

-a 全部挂载或者全部卸载

-r 重新挂载

-u 卸载某一个目录

-v 显示共享目录

exportfs实现nfs服务的平滑重启

实验:

1. 在nfs服务端上面编辑配置文件/etc/exports,添加一行配置

2. 这时在客户端上showmount -e获取服务端共享的目录还是只有一个/home/nfstestdir

这时如果直接挂载新添加共享的/tmp目录,挂载后需要重启nfs和rpc,可能导致客户端的连接服务异常,需要重启系统,并卸载nfs后重新挂载。很麻烦,这时就体现出了exportfs的作用。

在服务端上:[root@Linux01 ~]#  exportfs -arv    //平滑的重启nfs

再次在客户端查看有哪些共享文件: (已经共享了)

测试:

在客户端/tmp目录下创建个文件,在服务端查看

服务器端:

一个目录下只能挂在一个目录。

五、NFS客户端问题

NFS 4版本会有该问题 :
客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nfsnobody

一种解决办法是:客户端挂载时加上 -o nfsvers=3

[root@Linux01 ~]# umount /mnt     //先卸载
[root@Linux01 ~]# mount -t nfs -o nfsvers=3 192.168.239.128:/tmp /mnt          //再挂载,指定nfs版本
或者重新挂载,不用卸载:[root@Linux01 ~]# mount -t nfs -oremount,nfsvers=3 192.168.239.128:/tmp /mnt

第二种办法是:客户端和服务端都需要修改 /etc/idmapd.conf 这个配置文件 
把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com可以随意定义) 
然后再重启rpcidmapd服务(如果没有,重启rpcbind服务)

六、FTP介绍

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。

FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

ftp小公司用的多,大企业不用FTP,因为不安全.

七、使用vsftpd搭建ftp

Centos本身自带的ftp软件是vsftp。

实验环境基本配置:

两台主机:

192.168.239.128(服务端)

192.168.239.135(客户端)

1. vsftp的安装

[root@Linux01 ~]# yum -y install vsftpd

2. 创建FTP虚拟的用户和密码文件

vsftp,是可以使用系统用户来登录ftp服务的,但是这样很不安全。

所以可以采用虚拟用户的形式来登录ftp服务器,可以将一个或多个虚拟用户映射给一个普通的系统用户。

[root@Linux01 ~]# useradd -s /sbin/nologin virftp     //创建用户,不能登录系统(虚拟用户映射的本地用户)
[root@Linux01 ~]# vim /etc/vsftpd/vsftpd_login        //创建虚拟用户的用户密码文件,奇数行为用户名,偶数行为密码,多个用户就写多行

3. 再使用这个文件转换出一个二进制的用户密码文件

[root@Linux01 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
这时就有两个自己创建的文件了,vsftpd_login vsftpd_user.db

4. 创建虚拟用户配置文件

[root@Linux01 ~]# mkdir /etc/vsftpd/vsftpd_user_conf    //创建一个存放虚拟用户配置文件的目录

进入创建好的目录,创建虚拟用户的配置配件;  这个配置文件的文件名需要与虚拟用户的用户名相同

# 注意:这里两个虚拟用户的配置文件只有local_root目录不一样,
# local_host指定的目录就是虚拟用户登录FTP服务后的根目录
# anonymous=NO  表示不允许匿名用户登录
# write_enable=YES 表示可写,可以上传、新建文件或目录
# local_umask=022 创建文件或目录的默认权限,和系统的umask保持一致即可
# anon_upload_enable=NO 表示不允许匿名用户上传,YES表示允许
# anon_mkdir_write_enable=NO  表示不允许匿名用户的创建和写入权限,如果为YES表示允许
# idle_session_timeout=600    空闲超时时间,链接超过指定的时间(单:位秒)自动断开
# data_connection_timeout=120 表示数据传输的超时时间。
# max_clients=10   表示这个用户可以同时登陆的客户端数量
5. 创建虚拟用户的家目录,然后在这两个目录下分别创建一个文件,用于之后的测试

[root@Linux01 vsftpd_user_conf]# mkdir /home/virftp/testuser1
[root@Linux01 vsftpd_user_conf]# mkdir /home/virftp/testuser2
[root@Linux01 vsftpd_user_conf]# touch /home/virftp/testuser1/1.txt
[root@Linux01 vsftpd_user_conf]# touch /home/virftp/testuser2/2.txt
再将目录的属主和属组修改为virftp:

[root@Linux01 vsftpd_user_conf]# chown -R virftp:virftp /home/virftp

6. 编辑vsftpd用户认证配置文件,指定前面自定义的用户密码文件路径

7. 编辑vsftpd主配置文件 /etc/vsftpd/vsftpd.conf

[root@Linux01 vsftpd_user_conf]# vim  /etc/vsftpd/vsftpd.conf
# 将 anonymous_enable=YES         改为 anonymous_enable=NO
# 将 #anon_upload_enable=YES      改为 anon_upload_enable=NO 
# 将 #anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO

再增加如下内容:

chroot_local_user=YES

guest_enable=YES

guest_username=virftp

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

allow_writeable_chroot=YES

8. 启动vsftpd服务,查看进程和监听端口

[root@Linux01 vsftpd_user_conf]#  systemctl start vsftpd 

[root@Linux01 vsftpd_user_conf]# ps -ef  | grep vsftpd | grep -v 'grep'

[root@Linux01 vsftpd_user_conf]# netstat -lntp | grep 'vsftpd'

9. 测试

①在nfs-client上安装 lftp 包进行测试

[root@Linux01 ~]# yum install -y lftp
②连接服务端

 [root@Linux01 ~]# lftp [email protected]  //连接格式 lftp 用户名@服务器ip

Password:                                                                       //此处输入密码

ftp界面下执行一个问号 ? 可以查看在ftp下可以使用的命令有哪些 ; 常用的命令也只有 cd ls put上传 get下载 等等 ;put指定一个本地文件路径就可以上传到ftp服务器了;get 指定一个ftp服务器上面的文件就可以把文件下载到本地,默认存放在当前目录。

FileZilla客户端测试:

八、xshell使用xftp传输文件

在xshell窗口按ctrl+alt+F,调出xftp安装下载提示界面,根据提示下载安装好xftp软件

在登录的机器上,ctrl+alt+F,会把选中的终端和windows终端放到一起,可以进行数据文件传输

九、使用pure-ftpd搭建ftp服务

搭建服务端

1. 安装pure-ftpd服务需要先安装上epel扩展源

安装pure-ftpd服务 

[root@Linux01 ~]#   yum install -y epel-release
[root@Linux01 ~]# yum install -y pure-ftpd
2. 编辑配置文件/etc/pure-ftpd/pure-ftpd.conf , 找到pureftpd.pdb这行,把行首的#删除

[root@Linux01 ~]#  vim /etc/pure-ftpd/pure-ftpd.conf
 

3. 重启pure-ftp服务

由于先前我们启动了vsftpd服务,占用了21端口,  这里需要先关闭vsftpd服务,否则pure-ftpd服务不能启动

[root@Linux01 ~]# systemctl stop vsftpd
[root@Linux01 ~]# systemctl start pure-ftpd

4. 创建ftp目录及虚拟用户映射的本地用户

[root@Linux01 ~]# mkdir -p /data/ftp
[root@Linux01 ~]# useradd -u 1050 pure-ftp
将ftp根目录的属主和属组更改为pure-ftp

[root@Linux01 ~]# chown -R pure-ftp:pure-ftp /data/ftp
 

5. 添加ftp虚拟用户,并映射到刚才创建的普通用户。

[root@Linux01 ~]# pure-pw useradd ftp_usera -u pure-ftp  -d /data/ftp
pure-pw是pure-ftpd创建用户的一个命令

useradd 添加用户

ftp_tusera是添加的虚拟用户名 

-u 指定映射到系统的那个普通用户

-d 指定ftp的根目录

6. 创建用户认证数据文件,不进行这一步无法登陆

[root@Linux01 ~]# pure-pw mkdb
pure-pw list/userdel/usermod/passwd 分别是查看,删除,该权限,改密码

7. 测试

登陆FTP服务器

查看FTP根目录的文件

上传一个文件到FTP服务器

再次查看

退出 lftp客户端

查看 /data/ftp目录下有没有刚才上传的文件。

windows下测试:

十、扩展

vsftp使用mysql存放虚拟用户并验证

http://www.aminglinux.com/bbs/thread-342-1-1.html

ftp的主动和被动模式

http://www.aminglinux.com/bbs/thread-961-1-1.html

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/85235286