NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

一、NFS介绍

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。NFS的数据传输基于RPC(remote procedure call)协议。

A,B,C三台机器上需要被访问到的文件是一样的,A共享数据出来,B和C分别取挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。

二、NFS服务端安装配置

准备两台虚拟机,一台作为服务端,一台作为客户端。

服务端
IP:192.168.8.130

安装NFS工具

[[email protected] ~]# yum install -y nfs-utils rpcbind

配置

[[email protected] ~]# vim /etc/exports
/home/nfstestdir 192.168.8.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#指定要进行分享的目录;指定要共享该目录的机器
 
创建分享目录并制定权限:
[[email protected] ~]# mkdir /home/nfstestdir
[[email protected] ~]# chmod 777 /home/nfstestdir

启动NFS服务

在yum安装完成后,系统会自动启动rpcbind服务(在服务端进程名称为systemd),默认监听的端口时111端口

[[email protected] ~]# systemctl start nfs
 
将NFS服务加入开机启动项:  
[[email protected] ~]# systemctl enable nfs

客户端
IP:192.168.8.132

安装NFS工具

[[email protected] ~]# yum install -y nfs-utils

客户端挂载
检查客户端是否有权限访问服务端文件:

[[email protected] ~]# showmount -e 192.168.8.130

报错: 无法连接到服务端机器(网络不通

解决办法:

检查服务端NFS服务是否开启(监听111端口)
如果确认服务端NFS服务已经开启,那么检查防火墙状态,关闭服务端和客户端firewalld和SELinux防火墙

解决完上述错误后再次执行命令:

[[email protected] ~]# showmount -e 192.168.8.130
Export list for 192.168.8.130:
/home/nfstestdir 192.168.8.0/24

客户端可以正常访问服务端机器
开始挂载

[[email protected] ~]# mount -t nfs 192.168.8.130:/home/nfstestdir /mnt/
 
[[email protected] ~]# df -h
文件系统                        容量  已用  可用 已用% 挂载点
192.168.8.130:/home/nfstestdir   18G  7.5G   11G   42% /mnt

测试
在客户机挂载目录创建文件:

[[email protected] ~]# cd /mnt/
[[email protected] mnt]# ll
总用量 0
-rw-r--r-- 1 mysql mysql 0 8月  23 19:50 test12

查看服务端共享目录:

[[email protected] ~]# ll /home/nfstestdir/
总用量 0
-rw-r--r--. 1 mysql mysql 0 8月  23 19:50 test123

同步共享

三、NFS配置选项

[[email protected] ](https://my.oschina.net/u/570656) ~]# vim /etc/exports
/home/nfstestdir 192.168.8.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#指定要进行分享的目录;指定要共享该目录的机器
#rw 读写;ro 只读
#sync 同步模式,内存数据实时写入磁盘
#async 非同步模式
#no_root_squash 客户端挂载NFS服务后,root用户不受约束,权限很大
#root_squash 与上面选项相对,客户端上的root用户受到约束,被限定成某个普通用户
#all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
#anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid

# 四、exportfs命令

exportfs命令用来管理当前NFS共享的文件系统列表。

Options:
-a:全部卸载或全部挂载
-r:重新挂载
-u:卸载某个目录
-v:显示共享目录

常用组合: exportfs -arv
服务端更改配置文件后,不重启服务,直接执行该命令就可以使更改后的配置文件生效。

注意: 在重启nfs服务之前需要先将所有挂载点卸载,否则将发生程序错误,严重者会拖垮系统

五、NFS客户端问题

针对NFS4版本在centos6中应用存在如下问题:
客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、数组为nobody。

解决方法:
方法1:在客户端进行挂载时加上选项-o nfsvers=3

[[email protected] ~]# monunt -t nfs -o nfsvers=3 192.168.8.130:/tmp/ /mnt/

如果目录已经挂载,而又不想卸载,执行如下命令:

[[email protected] ~]# monunt -t nfs -o remount,nfsvers=3 192.168.8.130:/tmp/ /mnt/

方法2:客户端和服务端都需要

[[email protected] ~]# vim /etc/idmapd.conf

把该配置文件中的“Domain = local.domain.com”改为“Domain = xxx.com”(此处xxx.com自定义),然后重启rpcidmapd服务(在centos7中直接重启rpcbind服务)

六、FTP介绍

FTP(file transfer protocol)文件传输协议,用于在Internet上控制文件的双向传输。FTP主要作用是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或把本地文件传送到远程计算机。
该服务在小公司用的比较多,由于FTP服务的安全性较差,所以大公司不使用该服务。

七、使用vsftpd搭建ftp服务

安装vsftpd工具
centos中默认自带vsftpd安装包。

[[email protected] ~]# yum install -y vsftpd

创建用户:

[[email protected] ~]# useradd -s /sbin/nologin virftp

说明: vsftpd可以使用系统级别的用户进行登录,但是这样做不安全,所以需要使用vsftpd创建一个虚拟用户。在此创建一个系统普通用户的作用是使vsftpd的虚拟用户来进行映射,然后完成数据的传输。

编辑虚拟用户密码文件

[[email protected] ~]# vim /etc/vsftpd/vsftpd_login
testuser1
123456
 
更改文件权限:
[[email protected] ~]# chmod 600 /etc/vsftpd/vsftpd_login

注: 该文件中内容奇数行为用户名,偶数行为用户密码。

文件转换: 将该密码文件转换成计算机能识别的二进制文件。

[[email protected] ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

创建虚拟用户配置文件

创建文件存放目录:
[[email protected] ~]# mkdir /etc/vsftpd/vsftpd_user_conf
 
[[email protected] ~]# cd /etc/vsftpd/vsftpd_user_conf
 
创建指定虚拟用户配置文件:  
[[email protected] vsftpd_user_conf]# vim testuser1
local_root=/home/virftp/testuser1
#定义虚拟用户家目录
anonymous_enable=NO
#是否允许匿名用户登录
write_enable=YES
#是否可写
local_umask=022
#定义创建新文件时的默认权限
anon_upload_enable=NO
#是否允许匿名用户上传文件
anon_mkdir_write_enable=NO
#是否允许匿名用户创建目录文件
idle_session_timeout=600
#空闲用户保留时间
data_connection_timeout=120
#数据传输超时时间
max_client=10
#客户端最大连接数量

注: 在此保持虚拟用户配置文件和虚拟用户名称一致。

创建虚拟用户家目录

[[email protected] vsftpd_user_conf]# mkdir /home/virftp/testuser1

创建一个文件:
[[email protected] vsftpd_user_conf]# touch /home/virftp/testuser1/adai.txt
[[email protected] vsftpd_user_conf]# chown -R virftp:virftp /home/virftp

虚拟用户密码匹配

[[email protected] vsftpd_user_conf]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

说明: 在该文件中添加这两行内容,用于指定用户密码文件位置。
注意: 在centos6中“/lib64/security/pam_userdb.so”该文件区分版本(32位、64位)。

编辑vsftpd主配置文件

[[email protected] vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.conf
……
anonymous_enable=NO
anon_upload_enable=NO
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_user_conf
allow_writeable_chroot=YES

启动服务:

[[email protected] vsftpd_user_conf]# systemctl start vsftpd
 
[[email protected] vsftpd_user_conf]# ps aux |grep vsftpd
root      3671  0.0  0.0  52708   564 ?        Ss   18:40   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[[email protected] vsftpd_user_conf]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::21                   :::*                    LISTEN      3671/vsftpd

说明: FTP服务监听21端口;sshd监听22端口;telnet监听23端口。

测试
如果在Windows系统进行测试,可以在Windows安装filezilla软件。在Linux中测试,安装lftp工具。

[[email protected] ~]# yum install -y lftp

用法:

[[email protected] ~]# lftp [email protected]
口令: 
#登录
lftp [email protected]:~> ls      
drwxr-xr-x    2 1002     1002           22 Aug 24 10:19 testuser1
lftp [email protected]:/> ?
#查询在lftp中可执行的命令
#常用命令:put、get
lftp [email protected]:/> get testuser1/adai.txt
lftp [email protected]:/> quit
 
[[email protected] ~]# ls
adai.txt  anaconda-ks.cfg

说明: 下载(get)的内容会保存到当前目录下。


八、xshell使用xftp传输文件

在xshell按快捷键 ctrl+alt+f ,会自动弹出一个xftp的提示下载界面
进入到下载界面
NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
选择下载以后,会进入一个填写资料的页面,上面的是免费的,下面的收费的,我们选择上面一个填写资料
NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
邮箱项,很重要。因为会在你的邮箱里有下载地址和使用教程,是通过邮箱发送,而且最好使用一些比较权威的邮箱;如果是qq邮箱国外发送邮件会有一些延迟
NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
获取到下载地址开始下载,就可以直接下载了
NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
下载完成后,直接默认安装,就可以使用了,这时再使用xshell登录主机,按下ctrl+alt+f;就会弹出一个xftp的页面
NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
打开之后会进入到root目录下,使用的是ssh协议
NFS介绍、NFS服务端安装配置、NFS配置选项、exportfs命令、NFS客户端问题 、FTP介绍、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
这时在虚拟机上暂停掉21端口,会发现仍然可以传输文件

systemctl stop vsftpd

若是需要下载linux系统里的文件,只需双击,或者直接拖动到左边(桌面)就会有下载的文件
总结
xftp走的是ssh协议,不属于ftp,这种只要是linux开启了sshd服务就可以用。
vsftp获取其他ftp软件实现的是ftp服务,windows上可以搭建,linux上也可以搭建


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

安装pure-ftpd
先安装扩展源:

[[email protected] ~]# yum install -y epel-release

安装pure-ftpd:

[[email protected] ~]# yum install -y pure-ftpd

配置

[[email protected] ~]# vim /etc/pure-ftpd/pure-ftpd.conf
……
PureDB                        /etc/pure-ftpd/pureftpd.pdb
#开启密码配置文件

启动pure-ftpd服务

先关闭vsftpd:
[[email protected] ~]# systemctl stop vsftpd
 
启动pure-ftpd:
[[email protected] ~]# systemctl start pure-ftpd

创建系统用户及目录

创建ftp测试目录:
[[email protected] ~]# mkdir /data/ftp
[[email protected] ~]# useradd -u 1010 pure-ftp
[[email protected] ~]# chown -R pure-ftp:pure-ftp /data/ftp
创建虚拟用户
[[email protected] ~]# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
#创建虚拟用户ftp_usera,并映射到系统用户pure-ftp
#-d指定虚拟用户的家目录(同系统用户的家目录)
Password: 
Enter it again: 
#设定密码123456
[[email protected] ~]# pure-pw -h
#查看pure-pw可执行的命令

登录 & 测试

[[email protected] ~]# pure-pw mkdb
#必须先执行该命令,否则无法登陆
 
[[email protected] ~]# touch /data/ftp/123.txt
#创建测试文件

登录:
[[email protected] ~]# lftp [email protected]
口令: 
lftp [email protected]:~> ls
drwxr-xr-x    2 1010       pure-ftp           21 Aug 25 12:25 .
drwxr-xr-x    2 1010       pure-ftp           21 Aug 25 12:25 ..
-rw-r--r--    1 0          0                   0 Aug 25 12:25 123.txt
lftp [email protected]:/> quit

ftp的主动模式与被动模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动模式和被动模式.

主动模式

主动模式的FTP工作原理:客户端从一个任意的非特权端口N连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
被动模式

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

从任何大于1024的端口到服务器的21端口(客户端初始化的连接)
服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)
从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同,

主动FTP:

命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 <- 服务器 20端口

被动FTP:

命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 -> 服务器 >1024端口

主动模式ftp与被动模式FTP优点和缺点:

主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉

扩展

vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.com/bbs/thread-342-1-1.html
ftp的主动和被动模式 http://www.aminglinux.com/bbs/thread-961-1-1.html