前言

环境:centos 7.9

什么是FTP

文件传输协议(file transfer protocol,FTP),基于该协议 FTP 客户端与服务端可以实现共享文件、上传文件、下载文件。FTP 基于 TCP 协议生成一个虚拟的连接,主要用于控制 FTP 连接信息,同时再生成一个单独的 TCP 连接用于 FTP 数据传输。用户可以通过客户端向 FTP 服务器端上传、下载、删除文件,FTP 服务器端可以同时提供给多人共享使用。FTP 服务是 client/server(简称 C/S)模式,基于 FTP 协议实现 FTP 文件对外共享及传输的软件称之为 FTP 服务器源端,客户端程序基于 FTP 协议,则称之为 FTP 客户端,FTP 客户端可以向 FTP 服务器上传、下载文件。

FTP 传输模式

FTP 基于 C/S模式,FTP 客户端与服务器端有两种传输模式,分别是 FTP 主动模式、 FTP 被动模式。
FTP 主动模式:客户端从一个任意的端口 N(N>1024)连接到 FTP 服务器的 21 端口,客户端开始监听端口 N+1,并发送 FTP 命令“port N+1”到 FTP服务器,FTP 服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
FTP 被动模式:客户端从一个任意的端口 N(N>1024)连接到 FTP 服务器的 21 命令端口,客户端开始监听端口 N+1,客户端提交 PASV 命令,服务器会开启一个任意的端口(P>1024),并发送 PORT P 命令给客户端。客户端发起从本地端口N+1 到服务器的端口 的连接用来传 送数据。

简单来说就是,以服务端为参考点,服务端主动向客户端发起传输数据请求就是主动模式,客户端向服务器发传输数据请求,对服务端来说就是被动模式。

在企业实际环境中,一般使用被动模式,ftp默认也是被动模式。

端口

ftp主要使用到两个端口,一个是21端口,21端口被称为命令端口,用于发送ftp请求建立链接,另外一个是20端口,20端口被称为数据端口,用于传输数据。

Vsftpd 服务器简介

目前主流的 FTP 服务器端软件包括 Vsftpd,ProFTPD.PureFTPd、Wuftpd、ServerU、FTP、Filezilla Server等,其中 UNIX/Linux使用较为广泛的 FTP 服务器端软件为 Vsftpd。
FTP的客户端链接工具有很多,主要有:Linux平台下的ftp、lftp,Windows平台下的资源管理器、浏览器、Filezilla客户端等等。

Vsftpd全称为非常安全的 FTP 服务进程(very secure FTP daemon, Vsftpd),Vsftpd 是在 UNIX/Linux发行版中最主流的 FTP 服务器程序,优点是小巧轻快、安全易用、稳定高效、满足企业跨部门、多用户的使用等。
Vstpd 基于 GPL 开源协议发布,在中小企业中得到广泛的应用。Vsftpd可以快速上手,基于 Vsftpd 虚拟用户方式,访问验证更加安全。Vaftpd 还可以基于 MySQL数据库作安全验证,多重安全防护。

ftp支持同时使用一个账号进行多次登录。

Vsftpd 服务器安装配置

Vsftpd 服务器端安装有两种方法:一是基于 YUM 方式安装;二是基于源码编译安
装,最终实现效果完全一样,本文采用 YUM 安装 Vsftpd,具体步骤如下:

yum  -y install vsftpd

查看Vsftpd 安装后的配置文件路径、启动 Vsftpd 服务及查看进程是否启动:

rpm -ql vsftpd | more
systemctl restart vsftpd.service
ps -ef Igrep vsftpd

Vsftpd. conf默认配置文件详解

Vsftpd. conf默认配置文件详解,如下:

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES                       #开启匿名用户访问
local_enable=YES                         #启用本地系统用户访问,root用户不被允许使用,默认进入登录用户的家目录,
local_root=/home/ftp_dir/                  #该选项是自己新加的,作用是让所有登录的用户都默认登录到/home/ftp_dir/目录
write_enable=YES                           #本地系统用户写入权限
local_umask=022                            #本地用户创建文件及目录默认权限掩码
dirmesage_enabile=YES                       #打印目录显示信息,通常用于用户第一次访问目录时,信息提示
xferlog_enable=YES                          #启用上传/下载日志记录
conneet_from_port_20=YES FTP                #使用 20 端口进行数据传输
xferlog_std_format=YES                      #日志文件将根据 xferlog 的标准格式写人
listen=NO                                   #Vsftpd 不以独立的服务启动,通过 Xinetd 服务管理,建议改成 YES
listen_ipv6=YES                             #启用 IPv6 监听
pam_service_name=vsftpd                     #登录 FTP 服务器,依据/etc/pam.d/vsftpd 中内容进行认证
userlist_enable=YES                            #vsftpd.user_list和ftpusers配置文件里的用户禁止访问ftp,俗称黑名单
tcp_wrappers=YES                           #限制IP登录开关
local_max_rate=0                           #限流,默认0不限制,默认单位字节
chroot_local_user=YES                      #锁住用户默认目录,即不允许用户进入非该用户的上一层目录,只允许在他自己的目录活动
chroot_list_enable=YES                     #开启用户列表文件FTP 主被动模式的选择,默认为主动模式,设置为被动模式的方法如下:
pasv_enable = YES
pasv_min_Port =60000
pasv_max_port=60100

网络访问控制(限IP+限流)

ftp可以限制IP访问,也可以限流,参数tcp_wrappers=YES表示开启限制IP登录功能,而/etc/hosts.allow文件是允许IP访问、/etc/hosts.deny是限制IP访问,但注意/etc/hosts.allow文件和/etc/hosts.deny文件并不是vsftpd服务专有的文件,也就是说,这两个文件是系统服务专用的用来限制IP访问的文件,我们一般使用/etc/hosts.deny文件来限制IP访问,具体书写规则如下:

[root@iflytek ~]# vim  /etc/hosts.deny
服务程序:主机
vsftpd:all                                          #拒绝所有IP访问
vsftpd:all EXCEPT 192.168.1.200                     #拒绝所有IP访问,192.168.1.200除外
vsftpd:192.168.1.100                                #拒绝192.168.1.100

限制FTP流量使用参数:local_max_rate=0,默认值为0表示不限制

Windows 客户端资源管理器访问 Vsftpd 服务器端

启动 Vsttpd 服务后,通过 Windows 客户端资源管理器访问 Vsftpd 服务器端,在顶部栏输入协议地址进行访问 Vsftpd 服务器端,如下:

ftp://192.168.111.131/                       #不写端口默认就是21端口

Linux链接Vsftpd 服务器端

前面我们说了Linux平台下链接ftp主要使用的ftp、lftp工具,这两个命令需要自己安装,如下:

[root@iflytek ~]# yum -y install ftp lftp                           #安装ftp、lftp两个客户端工具
[root@iflytek ~]# ftp 192.168.44.132                                #ftp客户端用于用户账号密码登录
Connected to 192.168.44.132 (192.168.44.132).
220 (vsFTPd 3.0.2)
Name (192.168.44.132:root):
530 Permission denied.
Login failed.
ftp> quit
[root@iflytek ~]# lftp 192.168.44.132                              #lftp主要用于匿名登录
lftp 192.168.44.132:~> help!<shell-command>                     (commands)alias [<name> [<value>]]             attach [PID]bookmark [SUBCMD]                    cache [SUBCMD]cat [-b] <files>                     cd <rdir>chmod [OPTS] mode file...            close [-a][re]cls [opts] [path/][pattern]      debug [<level>|off] [-o <file>]du [options] <dirs>                  exit [<code>|bg]get [OPTS] <rfile> [-o <lfile>]      glob [OPTS] <cmd> <args>help [<cmd>]history -w file|-r file|-c|-l [cnt]  jobs [-v] [<job_no...>]kill all|<job_no>                    lcd <ldir>lftp [OPTS] <site>                   ln [-s] <file1> <file2>ls [<args>]                          mget [OPTS] <files>mirror [OPTS] [remote [local]]       mkdir [-p] <dirs>module name [args]                   more <files>mput [OPTS] <files>                  mrm <files>mv <file1> <file2>                   [re]nlist [<args>]open [OPTS] <site>                   pget [OPTS] <rfile> [-o <lfile>]put [OPTS] <lfile> [-o <rfile>]      pwd [-p]queue [OPTS] [<cmd>]                 quote <cmd>repeat [OPTS] [delay] [command]      rm [-r] [-f] <files>rmdir [-f] <dirs>                    scache [<session_no>]set [OPT] [<var> [<val>]]            site <site-cmd>source <file>                        torrent [-O <dir>] <file|URL>...user <user|URL> [<pass>]             wait [<jobno>]zcat <files>                         zmore <files>
lftp 192.168.44.132:~>

Vsftpd 匿名用户配置

vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器发布端路径是/var/ftp/pub,匿名用户只有查看权限,无法创建,删除、修改。如需关闭 FTP 匿名用户访问,需修改配置文件/ete/vstftpd/vsftpd. conf,将 anonymous_enable= YES 修改为 anonymous_enable= NO,重启 Vsftpd 服务即可。

如果允许匿名用户能够上传、下载、删除文件,需在/ete/vsftpd/vsftpd. conf配置文件中加入以下代码,详解如下:

anon_upload_enable=YES                          #允许匿名用户上传文件
ahon_mkdit_write_emable=YES                        #允许匿名用户创建目录
anon_other_write_emable=YES                        #允许匿名用户其他写人权限

匿名用户完整的 vsftpd. conf 配置文件代码如下:

anon_upload_enable = YES
anon_mkdir_write_enable= YES
anon_other_write_enable = YES
connect_from_port_20 = YBS
xferlog_std_format = YBS
listen_ipv6 = YES
pam_ service_name = vsftpd
userlist_enable= YES
tcp_wrappers = YBS

由于默认 Vsftpd 匿名用户有两种:anonymous、ftp,所以匿名用户如果需要上传文件,删除及修改等权限,需要 Vsftpd 用户对/var/ftp/pub 目录有写人权限,使用 chown 和chmod 任意一种命令均可设置权限,具体设置命令如下:

chown -R ftp pub/
chmod o+ w pub/

如上 vsftpd. conf 配置文件配置完毕,同时权限设置完毕,重启 Vsttpd服务即可,通过Windows 客户端访问,能够上传文件、删除文件、创建目录等操作。

Vsfipd 系统用户配置

Vstpd 匿名用户设置完毕,任何人都可以查看 FTP 服务器端的文件,目录,甚至可以修改、删除、文件和目录,如何存放私密文件在 FTP 服务器端,并保证文件或者目录专属于拥有者呢?Vsftpd 系统用户可以实现该需求,解决上述问题。
实现 Vsftpd 系统用户方式验证,只需在 Linux 系统中创建多个用户即可,创建用户便用 useradd 指令,同时给用户设置密码,即可通过用户和密码登录 FTP,进行文件上传,下载、删除等操作。
Vsftpd 系统用户实现方法步骤如下:
(1)、 Linux 系统中创建系统用户 jfedul、jfedu2,分别设置密码为 123456。

useradd jfedul
useradd jfedu2
echo 123456|passwd --stdin jfedul
echo 123456|passwd -- stdin jfedu2

(2)、修改 vsftpd. conf 配置文件代码如下:

anonymous_enable = NO
local_enable = YES
write_enable= YES
local_umask = 022
dirmessage_enable= YES
xferlog_enable = YBS
connect_from_port_20 = YBS
xferlog_std_format = YBS
listen = NO
listen_ipv6= YBS
pam_service_name = vsftpd
userlist_enable = YES
tcp_wrappers= YBS

(3)、通过 Windows 资源客户端验证,使用ijfedut、jfedu2 用户登录 FTP服务器,即可上传文件、删除文件、下载文件,jfedul、jfedh2 系统用户上传文件的家目录在/home/fedul、/home/jfedu2 下。

黑名单文件 ftpusers、 user_list文件(user_list可黑可白)

/etc/vsftpd/ftpusers 是ftp服务的黑名单文件,写在该文件的里面的用户名(一行一个)就是不允许登录vsftp的用户,/etc/vsftpd/user_list文件既可以是黑名单文件,也可以是白名单文件,主要取决于userlist_deny参数值,当userlist_deny =YES时user_list文件是黑名单,userlist_deny =NO时user_list文件是白名单,默认是YES,即默user_list文件是黑名。

Vsftpd 虚拟用户配置

Vsftpd 基于系统用户访问 FTP服务器,系统用户越多越不利于管理,而且不利于系统安全,为了能更加安全使用 Vsftpd,可以使用 Vstpd 虚拟用户方式。
Vsftpd 虚拟用户原理为:虚拟用户没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录 Linux 系统,从而让系统更加的安全可靠。

Vsftpd 虚拟用户企业案例配置步骤如下:
(1)、安装 Vsftpd 虚拟用户需要用到的软件及认证模块。

yum install pam* libedb-utils libdb*  --skip-broken -y

(2)、创建虚拟用户临时文件/eto/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中jfedu001.、jfedu002 为虚报用户名,123456 为密码,如果有多个用户,依此格式填写即可。

jfedu001
123456
jfedu002
123456

(3)、生成 Vsftpd 虚拟用户数据库认证文件,设置权限为 700。
db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db
chmod 700 /etc/vsftpd/vsftpd_login.db

(4)、配置 PAM 认证文件,/etc/pam.d/vsftpd 行首加入如下两行代码:
auth required pam_ userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login

(5)、Vsfpd 虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建用户命令如下:

useradd -s /sbin/nologin ftpuser

(6)、完整的 vsftpd.conf 配置文件代码如下:

#global config Vsftpd 2021anonymous_enable = YESlocal_enable= YESwrite_enable= YESlocal_umask = 022dirmessage_enable= YESxferlog_enable = YESconnect_from_port_20 = YESxferlog_std_format = YESlisten = NOlisten_ipv6= YESuserlist_enable = YEStcp_wrappers= YES#config virtual user FTPpam_service_name = vsftpd                                   #虚拟用户启用 pam 认证guest_enable = YES                                           #启用虚拟用户guest_username =ftpuser                                     #映射虚拟用户至系统用户 ftpuseruser_config_dir=/etc/vsftpd/vsftpd_user_conf               #设置虚拟用户配置文件所在的目录virtual_use_local_privs= YES                               #虚拟用户使用与本地用户相同的权限

(7)、至此,所有虚拟用户共同使用/home/ftpuser 主目录实现文件上传与下载,可以在主目录实现文件的上传与下载,可以在/etc/vsftpd/vsftpd_user_conf目录下创建虚拟用户各自的配置文件,配置虚拟用户的目录,代码如下:

mkdir -p/etc/vsftpd/vsftpd_user_conf/

(8)、以下分别为虚拟用户 jfedu001、 jfedu002 创建配置文件。
vim /etc/vsftpd/vsitpd_user_conf/jfedu001,同时创建私有的虚拟目录,代码如下:

local_root=/home/ftpuser/jfedu001
write_enable= YES
anon_world_readable_only= YES
anon_upload_enable = YES
anon_mkdir_write_enable = YES
anon_other_write_enable= YES

vim /etc/vsftpd/vsftpd_user_conf/jfedu002,同时创建私有的虚拟目录,代码如下:

local_root =/home/ftpuser/jfedu002                  #jfedu002 虚拟用户配置文件路径
write_enable= YES                                  #允许登录用户有写权限
anon_ world_readable_only = YES                        #允许匿名用户下载然后读取文件
anon_upload_enable = YES                           #允许匿名用户上传文件,且在anon_ world_readable_only为yes才生效
anon_mkdir_write_enable= YES                       #允许匿名用户创建目录,且write_enable为yes才生效
anon_other_write_enable= YES                       #允许匿名用户有其他权限,如重命名,删除权限等

(9)、创建虚拟用户各自虚拟目录,代码如下:

mkdir -p /home/ftpuser/{jfedu001,jfedu002)
chown -R ftpuser:ftpuser /home/ftpuser

重启 Vsftpd 服务,通过 Windows 客户端资源管理器登录 Vsftpd 服务端,测试正常。

Linux下vsftp服务器原理、安装、配置实战相关推荐

  1. linux搭建vsftp服务器_Linux安装配置vsftp搭建FTP的详细配置

    这里主要是说vsftp的配置:基础的可以参考Linux中VSFTP的配置 转自:https://www.jb51.net/article/103904.htm 修改配置文件 配置文件/etc/vsft ...

  2. linux下svn服务器的安装配置和使用

    2019独角兽企业重金招聘Python工程师标准>>> 安装环境: centos 一,安装必须的软件包. yum install subversion mod_dav_svn 二,基 ...

  3. Windows和Linux下apache-artemis-2.10.0安装配置

    window下安装配置 一.官网下载 http://activemq.apache.org/artemis/download.html 二.百度网盘下载 链接:https://pan.baidu.co ...

  4. linux下的openmeetings的安装配置…

    linux下openmeetings安装配置方法 目录 目录... 1 硬件条件:... 2 需要的相关软件:... 3 安装配置... 3 第一步       安装mysql数据库... 3 1.1 ...

  5. linux下xampp的安装和配置文件,linux下xampp集成包安装配置方法

    1.查看你linux系统的位数,是32位的还是64位的.使用uname -a命令查看. 显示有 x86_64则说明你是64位内核, 跑的是64位的系统. i386, i686说明你是32位的内核, 跑 ...

  6. Linux下Samba服务器的安装和配置

    第一步:sudo apt-get install samba smbclient 安装samba服务器. 第二步:打开/etc/samba/smb.conf文件,在末尾添加下面的字段: [用户名] c ...

  7. ×××linux下vsftp服务器

    一.编译安装vsftp [root@YYzs tmp]# tar -xvf vsftpd-2.2.0.tar.gz [root@YYzs tmp]# cd vsftpd-2.2.0 [root@YYz ...

  8. 如何在虚拟linux环境运行python_Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv...

    1.为什么要使用虚拟环境 在Python中,不同的应用可能需要用到不同版本的第三方包,而这些第三方包被统一存放到目录site-packages中,不同版本的包容易相互覆盖,如安装Django 2.1时 ...

  9. Linux下svn服务端安装配置

    早上看到一篇文章把VC(版本控制)讲的很好,狂神聊Git,SVN是集中式版本控制中心,git是分布式版本控制,Svn配置和使用: 安装svn yum -y install subversion 输入s ...

  10. 【教程】Linux下MySQL 8.0安装配置

    1.编译安装MySQL8.0 版本信息 #cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 安装依赖包 yum -y insta ...

最新文章

  1. The final five question form qhpMaster
  2. 1.4 Padding-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. Graphpad Prism 9绘制子列图与柱状图
  4. access violation at address in module Read of address
  5. log4j 新建日志 重启_Log4j 动态修改日志级别,不用重启服务器
  6. 一起学Shell之(六)输入、输出、文件与命令执行
  7. python encode函数_python_base64和encode函数
  8. ASP.NET 省市区联级
  9. RTKLIB学习:数据下载和数据转换
  10. 714. 买卖股票的最佳时机含手续费
  11. 关于项目需求进行分析的步骤
  12. curl证书过期_定时检测SSL证书过期情况并发送通知
  13. 华为开源平台harmonyos,华为开源平台上线 方舟编译器和鸿蒙系统开源
  14. 好玩的海外游戏集结,有没有你玩过的?
  15. python web.py服务器与客户端
  16. [SystemVerilog] 基于 FPGA 的数字钟设计
  17. 超声波传感器介绍及其使用(STM32)
  18. 分析linux启动内核源码
  19. Google glog
  20. 软碟通(UltraISO注册码) v9.5.3.2901汉化版

热门文章

  1. chemdraw怎么画拐弯的箭头_教你画系列,像金属一样有复杂反光的漆皮材质
  2. 数字的格式化c语言课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  3. linux7重启network,mmp的 rhel7 network重启一直失败,求原因!!!
  4. SecondaryNamenode配置与NameNode故障恢复
  5. 从JS库的使用者转变成JS的开发者——第一篇 javascript对象
  6. c# 操作FTP文件类
  7. WPF Name与x:Name 使用
  8. Android_获取屏幕大小的两种方法
  9. ElasticSearch全文搜索引擎之Linux版安装教程
  10. 并发编程学习之阻塞队列ArrayBlockingQueue