全套学习资料移步至公众号【学神来啦】更多学习资料添加扣扣资源群:661308959
本节所讲内容:
4.1 VSFTP服务器概述
4.2 安装配置VSFTP
4.3 实战:匿名访问VSFTP
4.4 实战:用户名密码方式访问VSFTP
服务器信息:
FTP服务端:xuegod63 IP:192.168.1.63
FTP客户端:xuegod64 IP:192.168.1.64
4.1 VSFTP服务器概述
4.1.1 FTP服务概述
FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
FTP(File Transfer Protocol: 文件传输协议)作用:Internet 上用来传送文件的协议。
常见FTP服务器:
Windows:Serv-U 、FTP Server、filezilla_server
Linux:ProFTPD:(Professional FTP daemon)一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序。
4.1.2 本节主讲:VSFTP
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。
特点:
它是一个安全、高速、稳定的FTP服务器。
VSFTP模式: C/S 模式
监听端口:20、21
[root@xuegod64 ~]# vim /etc/services #查看services文件,如图 4-1 所示。
图 4-1 FTP端口
FTP监听的端口有两个:
端口20:用于传输数据
端口21:用于传输指令
4.1.3 工作流程(原理)分为两种模式:
主动和被动模式:
FTP会话包含了两个通道,控制通道和数据传输通道,FTP的工作有两种模式,一种是主动模式,一种是被动模式,以FTP Server为参照,主动模式,服务器主动连接客户端传输,被动模式,等待客户的连接。
主动模式(PORT)的工作原理:
FTP客户端连接到FTP服务器的21号端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送PORT命令到FTP服务器,告知服务器客户端采用主动模式并开放端口,FTP服务器收到PORT主动模式命令和端口后,通过服务器的20号端口和客户端开放的端口连接,发送数据,原理如图 4-2 所示,(无论是主动还是被动模式,首先的控制通道都是先建立起来,只是在数据传输模式上的区别)
图 4-2 FTP主动模式工作原理图
被动模式的工作原理:
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器所监听的21号端口,发送用户名和密码,发送PASV命令到FTP服务器,服务器在本地随机开放一个端口(1024以上),然后把开放的端口告知客户端,而后客户端再连接到服务器开放的端口进行数据传输,原理如图 4-3 所示。
图 4-3 FTP被动模式工作原理图
被 21 1024以上
4.2 安装vsftp服务器端、客户端
使用rpm安装本地光盘中的vsftp程序包:
[root@xuegod63 ~]# rpm -ivh /mnt/cd/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
或:
使用yum直接安装(两种安装方法,选取其中一种即可):
[root@xuegod63 ~]# yum -y install vsftpd
4.2.1 安装客户端:
[root@xuegod64 ~]# yum install -y lftp #使用yum安装ftp客户端。
lftp
Linux客户端:
lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp、ftps、http、https、hftp(其中ftps和https需要在编译的时候包含openssl库),lftp的界面非常类似一个Shell,有命令补全、历史记录、允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载、等功能。
4.2.2 配置文件位置:
vsftpd 相关文档:
/etc/vsftpd/vsftpd.conf #vsftpd 的核心配置文件。
/etc/vsftpd/ftpusers #用于指定哪些用户不能访问FTP 服务器,即黑名单。
/etc/vsftpd/user_list #指定允许使用VSFTP的用户列表文件,即白名单。
[root@xuegod63 ~]# vim /etc/vsftpd/user_list #查看user_list文件,如图 4-4 所示。
图 4-4 VSFTP的用户列表文件
图4-4中的说明:如果userlist_deny= YES(默认),绝不允许在这个文件中的用户登录ftp,甚至不提示输入密码。
/etc/vsftpd/vsftpd_conf_migrate.sh #是vsftpd 操作的一些变量和设置脚本
/var/ftp/ #默认情况下匿名用户的根目录
4.2.3 启动服务
[root@xuegod63 vsftpd]# systemctl start vsftpd #启动FTP服务。
[root@xuegod63 vsftpd]# systemctl enable vsftpd #设置开启自动启动FTP服务。
#注意关闭iptables 和SElinux
[root@xuegod63 ~]# netstat -antup | grep ftp #查看FTP服务监听的端口。
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11725/vsftpd
思考:以上内容中说明FTP监听两个端口,但目前FTP已经启动了,但经过查看,只查看到21号端口,还有20号端口没有查看到?
是因为没有数据传输,20号端口是用于传输数据的,所以20号端口是尚未开启,如有数据传输时,20号端口则会开启。
4.2.4 FTP服务的使用方法
Linux系统:以xuegod63主机示例(即服务端、客户端为一台主机)
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/lftp-4.4.8-8.el7_3.2.x86_64.rpm #安装FTP客户端
[root@xuegod63 ~]# lftp 192.168.1.63 #连接FTP服务器。
ctrl+d 或 exit退出
? 帮助
Windows系统:
通过浏览器访问或 打开文件夹,在地址栏输入地址:ftp://192.168.1.63/,如图 4-5 所示。
图 4-5 Windows系统FTP客户端连接服务器
4.2.5 修改配置文件,实战举例匿名访问
例4.1:公司技术部准备搭建一台功能简单的FTP 服务器,允许所有员工上传和下载文件,并允许创建用户自己的目录。
分析:
允许所有员工上传和下载文件需要设置成允许匿名用户登录并且需要将允许匿名用户上传功能开启。
4.3 允许匿名用户访问
anon_mkdir_write_enable 字段可以控制是否允许匿名用户创建目录。
[root@xuegod63 ~]# cd /etc/vsftpd/ #切换工作目录至FTP工作目录下。
[root@xuegod63 vsftpd]# cp vsftpd.conf{,.bak} #使用命令展开式,FTP配置文件备份,便于后期恢复还原。
[root@xuegod63 vsftpd]# vim vsftpd.conf #编辑FTP配置文件,修改以下内容。
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
允许匿名用户上传文件并可以创建目录,如图 4-6、4-7 所示。
图 4-6 允许匿名用户上传文件并可以创建目录
图 4-7 允许匿名用户上传文件并可以创建目录
重启FTP服务,使配置文件生效:
[root@xuegod63 vsftpd]# systemctl restart vsftpd
测试:提示不能写,如图 4-8所示。
图 4-8 测试连接FTP服务器
[root@xuegod63 vsftpd]# chown ftp.ftp /var/ftp/pub/ #修改FTP共享目录属主、属组为ftp用户。
再次测试,结果:可以新建文件夹,但是不能重命名,不能删除!
[root@xuegod63 vsftpd]# vim vsftpd.conf #编辑FTP配置文件,修改以下内容。
anon_other_write_enable=YES #默认没有,需要手动添加下这行(匿名帐号可以有写的权限)。
重启FTP服务,使配置文件生效:
[root@xuegod63 vsftpd]# systemctl restart vsftpd
可以删除文件夹了,这个参数对匿名用户来说权限太大,不安全,使用这个参数需要考虑安全性。
注意,默认匿名用户家目录的权限是755,这个权限是不能改变的。切记!
4.4 用户名密码方式访问VSFTP
例4.2:
公司内部现在有一台FTP 和WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文
件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别使用team1和team2
帐号进行管理。先要求仅允许team1 和team2 帐号登录FTP 服务器,但不能登录本地系统,并将两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。
ftp 和www web服务器相结合。
www web服务器根目录:/var/www/html
只允许:team1和team2两用户 可以上传,vsftp禁止匿名。
分析:
将FTP 和WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安全性,首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用chroot 功能将team1和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限。
解决方案:
建立维护网站内容的ftp 帐号team1 和team2 并禁止本地登录,然后设置其密码。
[root@xuegod63 ~]# useradd -s /sbin/nologin team1 #创建team1用户,并禁止登录系统。
[root@xuegod63 ~]# useradd -s /sbin/nologin team2 #创建team2用户,并禁止登录系统。
[root@xuegod63 ~]# echo "123456" | passwd --stdin team1 #设置team1用户密码。
Changing password for user team1.
passwd: all authentication tokens updated successfully.
[root@xuegod63 ~]# echo "123456" | passwd --stdin team2 #设置team2用户密码。
。。。同上
#vsftp判定是否是有效用户还要判定是否为系统用户。所以要在此文件中添加创建用户的shell类型。
配置vsftpd.conf 主配置文件并作相应修改
[root@xuegod63 vsftpd]# cp vsftpd.conf.bak vsftpd.conf #恢复此前备份的FTP配置文件覆盖当前的FTP配置文件。
cp:是否覆盖"vsftpd.conf"? y #输入y确认覆盖当前配置文件。
[root@xuegod63 vsftpd]# vim /etc/vsftpd/vsftpd.conf #编辑FTP配置文件,修改如图 1-11 所示内容。
anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #允许本地用户登录
图 4-11 禁止匿名用户、允许本地用户登录
修改如图 4-12 所示的内容为如图 4-13 所示内容:
图 4-12
图 4-13
local_root=/var/www/html #设置本地用户的根目录为/var/www/html。
chroot_list_enable=YES #开启chroot 功能。
chroot_list_file=/etc/vsftpd/chroot_list #设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名。
allow_writeable_chroot=YES #允许锁定的用户有写的权限。
修改完成后保存并退出。
建立/etc/vsftpd/chroot_list 文件,添加team1 和team2 帐号
[root@xuegod63 vsftpd]# touch /etc/vsftpd/chroot_list #创建chroot_list文件。
[root@xuegod63 vsftpd]# ll !$
ll /etc/vsftpd/chroot_list
-rw-r--r-- 1 root root 0 Nov 10 17:08 /etc/vsftpd/chroot_list
[root@xuegod63 vsftpd]# vim /etc/vsftpd/chroot_list #写入以下内容,一行一个用户名。
team1
team2
修改本地权限
[root@xuegod63 vsftpd]# ll -d /var/www/html/ #以长格式查看/var/www/html/目录,-d选项用于查看目录本身,不包含目录下的文件。
drwxr-xr-x. 2 root root 4096 Oct 6 2011 /var/www/html/
[root@xuegod63 vsftpd]# chmod -R o+w /var/www/html/ #赋予/var/www/html/目录和该目录下所有文件的写权限。
[root@xuegod63 vsftpd]# ll -d /var/www/html/
drwxr-xrwx. 2 root root 4096 Oct 6 2011 /var/www/html/
重启vsftpd 服务使配置生效
[root@xuegod63 vsftpd]# systemctl restart vsftpd
[root@xuegod63 vsftpd]# cp /etc/passwd /var/www/html/
测试
客户端用lftp登陆查看:
root@xuegod64 ~]# lftp 192.168.1.63 -u team1,123456
lftp team1@192.168.0.63:~> ls
-rw-r--r-- 1 0 0 1384 Jul 30 01:56 passwd
lftp team1@192.168.0.63:/> ?(查看帮助信息)
或通过filezilla测试连接及创建上传文件等
扩展: 配置vsftpd,***L证书加密数据传输
FTP与HTTP一样缺省状态都是基于明文传输,希望FTP服务器端与客户端传输保证安全,可以为FTP***L
4.4.1 使用OpenSSL生成自签证书
[root@xuegod63 vsftpd]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650
Generating a 2048 bit RSA private key
..........................................................................................+++
.....................+++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ZH
State or Province Name (full name) []:JS
Locality Name (eg, city) [Default City]:NJ
Organization Name (eg, company) [Default Company Ltd]:XS
Organizational Unit Name (eg, section) []:XS
Common Name (eg, your name or your server's hostname) []:XS.COM
Email Address []:XS@163.COM
OpenSSL 简单参数解释:
req #是 X.509 Certificate Signing Request (CSR,证书签名请求)管理的一个命令。
x509 #X.509 证书数据管理。
days #定义证书的有效日期。
newkey #指定证书密钥处理器。
keyout #设置密钥存储文件。
out #设置证书存储文件,注意证书和密钥都保存在一个相同的文件
4.4.2 创建证书文件存放目录
[root@xuegod63 ~]# cd /etc/vsftpd
[root@xuegod63 vsftpd]# mkdir .sslkey #创建隐藏目录存放证书文件。
[root@xuegod63 vsftpd]# mv vsftpd.pem .sslkey/ #移动证书文件到.sslkey目录下。
[root@xuegod63 vsftpd]# chmod 400 .sslkey/vsftpd.pem #赋予证书文件400权限。
4.4.3 修改配置文件,支持SSL
[root@xuegod63 vsftpd]# vim vsftpd.conf #编辑配置文件,添加配置如图 4-14 所示。
图 4-14 添加支持ssl配置
ssl_enable=YES #启用SSL支持。
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
#上面四行force 表示强制匿名用户使用加密登陆和数据传输。
ssl_tlsv1=YES #指定vsftpd支持TLS v1。
ssl_sslv2=YES #指定vsftpd支持SSL v2。
ssl_sslv3=YES #指定vsftpd支持SSL v3。
require_ssl_reuse=NO #不重用SSL会话,安全配置项 。
ssl_ciphers=HIGH #允许用于加密 SSL 连接的 SSL 算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者。
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem
#定义 SSL 证书和密钥文件的位置。
注意:上面的配置项不要添加到vsftpd.conf 文件最后也不要加注释,否则启动报错。而且配置后不能有多余的空格。
修改完配置文件后,重启服务:
[root@xuegod63 vsftpd]# systemctl restart vsftpd
4.4.4 配置FileZilla客户端验证
图 4-15 配置FileZilla客户端验证
提示证书认证,点击“在以后的会话中始终信任该证书”---》点击“确定”如图 4-16 所示。
图 4-16 未知证书
连接成功,可以使用TLS加密传输了,如图 4-17 所示。
如图 4-17 使用TLS加密传输
4.5 NFS概述-配置NFS服务器并实现开机自动挂载
4.5.1 NFS服务端概述:
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS.NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,如图 4-18 所示。
图 4-18 NFS网络文件系统拓扑图
NFS的模式: C/S 模式
NFS监听的端口: 2049
CentOS7是以NFSv4作为默认版本,NFSv4使用TCP协议(端口号是2049)和NFS服务器建立连接。
NFS是通过网络进行数据传输的,传输数据的端口为2049。但是由于文件系统非常复杂,因此NFS还有其他程序去启动额外的端口。NFS默认使用传输的端口是随机选择的小于1024的端口。将端口告知客户端是需要依赖于RPC(remote procedure call,RPC)协议。
当NFS服务启动时,会随机选取数个端口,并向RPC注册,因此RPC就可以知道每个端口对应的NFS功能。
RPC最主要的功能就是指定每个NFS功能所对应的端口号,并告知客户端。以便客户端连接至正确的端口号。
[root@xuegod63 ~]# vim /etc/services #查看services文件,如图 4-19 所示。
图 4-19 NFS监听端口号
4.5.2 安装NFS:
[root@xuegod63 ~]# yum -y install rpcbind nfs-utils #使用yum安装NFS。
1. 配置文件位置:
[root@xuegod63 ~]# ls /etc/exports #NFS的共享主目录。
/etc/exports
2. 启动NFS服务
[root@xuegod63 ~]# netstat -antpu | grep 2049 #先查看2049端口是否开放。
[root@xuegod63 ~]# systemctl start rpcbind #启动rpcbind 。
[root@xuegod63 ~]# systemctl start nfs-server.service #启动NFS。
#在启动NFS之前要先启动RPC,否则NFS就无法向RPC进行注册。另外如果RPC重新启动,原来的注册数据就会消失。所以,在重启RPC之后,它所管理的服务都要重启以重新向RPC注册。
[root@xuegod63 ~]# netstat -antpu | grep 2049 #再次查看端口监听状态
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 :::2049 :::* LISTEN +
[root@xuegod63 ~]# systemctl enable nfs-server.service #设置NFS开机自动启动。
3. 服务的使用方法
showmount -e NFS服务器IP
例:
[root@xuegod64 ~]# showmount -e 192.168.1.63
Export list for 192.168.1.63:
4. 客户端尝试挂载:
[root@xuegod64 ~]# mount 192.168.1.63:/tmp /opt
mount.nfs: access denied by server while mounting 192.168.1.202:/tmp
因为还没有共享
5. 修改配置文件,举例:
[root@xuegod63 ~]# vim /etc/exports
/media *(rw)
注意:
/media 表示共享的目录。
* 表示对所有网段开放权限,也可以设置指定特定的网段。
(rw) 表示访问权限。
NFS支持动态装载配置文件:
[root@xuegod63 ~]# exportfs -rv #重新读取配置文件不中断服务。
客户端查看:
[root@xuegod64 ~]# showmount -e 192.168.1.63
Export list for 192.168.1.63:
/media *
6. 客户端挂载NFS服务的共享设备:
[root@xuegod64 ~]# mount -t nfs 192.168.1.63:/media/ /opt/
[root@xuegod64 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.7G 4.0G 5.2G 44% /
tmpfs 996M 80K 996M 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt
192.168.0.63:/media/ 9.7G 4.0G 5.3G 43% /opt
7. 实现开机自动挂载NFS服务共享设备:
[root@xuegod64 ~]# vim /etc/fstab #编辑/etc/fstab文件,在文件最后添加自动挂载的信息如图 4-20 所示。
图 4-20 开机自动挂载
可以重启验证
8. 验证写入权限:
[root@xuegod64 ~]# touch /opt/a.txt #在NFS共享设备上创建文件。
touch: 无法创建"/opt/a.txt": 权限不够
9. 解决方法:
设置访问权限一般包含2部分
服务本身权限
目录访问权限
nfs默认使用nfsnobody用户
[root@xuegod63 ~]# grep nfs /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
10. 修改权限
[root@xuegod63 ~]# chmod 777 -R /media/ 不建议
或
[root@xuegod63 ~]# chown nfsnobody.nfsnobody -R /media/
11. 再次验证写入权限:
[root@xuegod64 ~]# touch /opt/a.txt
[root@xuegod64 ~]# ll !$
ll /opt/a.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 5月 24 2016 /opt/a.txt
扩展:
以下是一些NFS共享的常用参数:
ro #只读访问。
rw #读写访问。
sync #资料同步写入到内存与硬盘当中。
async #资料会先暂存于内存当中,而非直接写入硬盘。
secure #NFS通过1024以下的安全TCP/IP端口发送。
insecure #NFS通过1024以上的端口发送。
wdelay #如果多个用户要写入NFS目录,则归组写入(默认)。
no_wdelay #如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide #在NFS共享目录中不共享其子目录。
no_hide #共享NFS目录的子目录。
subtree_check #如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)。
no_subtree_check #和上面相对,不检查父目录权限。
all_squash #共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash #保留共享文件的UID和GID(默认)。
root_squash #root用户的所有请求映射成如anonymous用户一样的权限(默认)。
no_root_squash #root用户具有根目录的完全管理访问权限。
选项使用方法示例:
[root@xuegod63 ~]# cat /etc/exports
/tmp/a/no_root_squash *(rw,no_root_squash)
/tmp/a/sync 192.168.0.0/24(rw,sync)
/tmp/a/ro 192.168.1.64(ro)
/tmp/a/all_squash 192.168.0.0/24(rw,all_squash,anonuid=500,anongid=500)
/tmp/a/async 192.168.3.0/255.255.255.0(async)
/tmp/a/rw 192.168.3.0/255.255.255.0(rw) 192.168.4.0/255.255.255.0(rw)
/tmp/a/root_squash *(rw,root_squash)
更多学习资料请移步至公众号【学神来啦】