终于搞懂Linux中的vsftp服务------------(原理+实验)

大家好呀,今天介绍的是基于FTP协议Linux中的VSFTP服务
  Vsftp(Very Secure FTP)是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,是一款小巧而又易用FTP服务器程序,Vsftpd 在安全性、高性能及稳定性三个方面有很好的表现。它提供的主要功能包括虚拟IP设置、虚拟用户、Standalone、inetd操作模式、强大的单用户设置能力及带宽限流等。在安全方面,它从原理上修补了大多数Wu-FTP、ProFTP,乃至BSD-FTP的安装缺陷,使用安全编码技术解决了缓冲溢出问题,并能有效避免“globbing”类型的拒绝服务攻击。
Vsftp的特点:

  • 它是一个安全、高速、稳定的FTP服务器

  • 它可以做基于多个IP的虚拟FTP主机服务器

  • 匿名服务设置十分方便

  • List item

  • 匿名FTP的根目录不需要任何特殊的目录结构,或系统程序或其它的系统文件

  • 不执行任何外部程序,从而减少了安全隐患

  • 支持虚拟用户,并且每个虚拟用户可以具有独立的属性配置

  • 可以设置从inetd中启动,或者独立的FTP服务器两种运行方式

  • 支持两种认证方式(PAP或xinetd/ tcp_wrappers)

  • 支持带宽限制

Ftp原理

  FTP Transfer Protocol 件传输协议的缩写,FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的, PI称为控制连接

  数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
  FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式,DTP称为数据连接
PASV模式(被动方式)
  在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送 PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。

PORT模式(主动方式)
  FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

  如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
以下是vsftp的实验

匿名用户

准备一台初始化完成的虚拟机,之前文章有详细介绍。一台做服务器,另一台做客户端
服务器地址:192.168.158.20 server
客户器地址:192.168.158.30 client
服务器部署

  • 首先rpm安装vsftp服务

在这里插入图片描述

  • 在目录下准备文件以备后续下载文件验证

在这里插入图片描述

  • 设置目录文件的权限和所属

在这里插入图片描述

[root@server1 pub] vi /etc/vsftpd/vsftpd.conf 
[root@server1 pub] grep -v "#" /etc/vsftpd/vsftpd.conf | grep -v "^$"
anonymous_enable=YES            #允许匿名用户登录
anon_mkdir_write_enable=YES     #允许匿名用户其他写权限
anon_umask=022                  #设置匿名用户的权限755
anon_upload_enable=YES          #允许匿名用户上传
anon_other_write_enable=YES     #允许匿名用户新建目录、文件
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES                      #监听ipv4地址的请求
listen_ipv6=NO                  #不监听ipv6地址
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
  • 启动ftp服务
[root@server1 pub] systemctl start vsftpd

客户端

[root@client ~] yum -y install ftp        #启动服务
[root@client ~] ftp 192.168.158.20        #连接服务器地址
Connected to 192.168.158.20 (192.168.158.20).
220 (vsFTPd 3.0.2)
Name (192.168.158.20:root): ftp            #登录名
331 Please specify the password. 
Password:                                  #无需输入密码,直接回车就可  
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -lh                                #ftp服务进入的默认是   
227 Entering Passive Mode (192,168,158,20,160,44).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50             32 Sep 17 03:31 pub
226 Directory send OK.
ftp> cd pub                                #进入目录
250 Directory successfully changed.
ftp> ls -lh
227 Entering Passive Mode (192,168,158,20,157,66).
150 Here comes the directory listing.
-rwxr-xr-x    1 14       50              5 Sep 17 03:31 a.txt
-rwxr-xr-x    1 14       50              5 Sep 17 03:31 b.txt
226 Directory send OK.
ftp> get a.txt                             #下载文件
local: a.txt remote: a.txt
227 Entering Passive Mode (192,168,158,20,222,120).
150 Opening BINARY mode data connection for a.txt (5 bytes).
226 Transfer complete.
5 bytes received in 3.5e-05 secs (142.86 Kbytes/sec)
ftp> put anaconda-ks.cfg                   #上传文件
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,158,20,85,152).
150 Ok to send data.
226 Transfer complete.
1907 bytes sent in 0.00765 secs (249.41 Kbytes/sec)

查看效果

 - 客户机上

a.txt已经下载成功
![在这里

插入图片描述](https://img-blog.csdnimg.cn/20200917140320694.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3F5ZjE1ODIzNg==,size_16,color_FFFFFF,t_70#pic_center)

  • 服务器上

pub目录里已经存在anaconda-ks.cfg在这里插入图片描述

普通用户登录

[root@server ftp] useradd qyqy
[root@server ftp] passwd qyqy
更改用户 qyqy 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ftp] vi /etc/vsftpd/user_list 

在这里插入图片描述

[root@server ~] mkdir /opt/qyqy
[root@server ~] cd /opt/qyqy/
[root@server qyqy] echo 4321 > qyqy.txt     #在宿主目录下新建文件,用于上传验证
[root@server qyqy] ls -lh
总用量 4.0K
-rw-r--r--. 1 root root 5 9月  17 14:22 qyqy.txt
[root@server qyqy] chown -R qyqy:qyqy /opt/qyqy/   
[root@server qyqy] chmod -R 755 /opt/qyqy/
[root@server qyqy]# ls -lh
总用量 4.0K
-rwxr-xr-x. 1 qyqy qyqy 5 9月  17 14:22 qyqy.txt
  • 修改配置文件
[root@server qyqy] vi /etc/vsftpd/vsftpd.conf 
[root@server qyqy] grep -v "#" /etc/vsftpd/vsftpd.conf | grep -v "^$"
anonymous_enable=YES
local_enable=YES                # 允许本地用户登录 
local_root=/opt/qyqy            #指定本地用户的权限为755    
write_enable=YES
local_umask=022                 #设置本地用户的权限为755                    
anon_upload_enable=YES                   
anon_umask=022
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES            #锁定宿主目录
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
allow_writeable_chroot=YES       #允许宿主目录的写权限
tcp_wrappers=YES
  • 重启vsftp服务
[root@server qyqy] systemctl restart vsftp
  • 切换到客户机,连接服务器
[root@client ~]# ftp 192.168.158.20
Connected to 192.168.158.20 (192.168.158.20).
220 (vsFTPd 3.0.2)
Name (192.168.158.20:root): qyqy                 #登录名
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -lh
227 Entering Passive Mode (192,168,158,20,27,222).
150 Here comes the directory listing.
-rwxr-xr-x    1 1001     1001            5 Sep 17 06:22 qyqy.txt
226 Directory send OK.
ftp> get qyqy.txt                                 #下载文件                                 
local: qyqy.txt remote: qyqy.txt
227 Entering Passive Mode (192,168,158,20,221,154).
150 Opening BINARY mode data connection for qyqy.txt (5 bytes).
226 Transfer complete.                              
5 bytes received in 2.8e-05 secs (178.57 Kbytes/sec)
ftp> put anaconda-ks.cfg                          #上传文件
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,158,20,45,28).
150 Ok to send data.
226 Transfer complete.
1907 bytes sent in 5.8e-05 secs (32879.31 Kbytes/sec)
  • 服务器已收到文件

在这里插入图片描述

  • 客户机已下载到qyqy.txt文件

在这里插入图片描述
如出现问题,先查看防火墙和核心防护是否关闭。
若实验中出现任何问题,可以私信博主哈。
欢迎大家点赞收藏呀!!!

猜你喜欢

转载自blog.csdn.net/qyf158236/article/details/108646289