Linux下vsftp服务器原理、安装、配置实战

前言

环境: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@master ~]# 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@master ~]# yum -y install ftp lftp							#安装ftp、lftp两个客户端工具
[root@master ~]# 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@master ~]# 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 2021
	anonymous_enable = YES
	local_enable= YES
	write_enable= YES
	local_umask = 022
	dirmessage_enable= YES
	xferlog_enable = YES
	connect_from_port_20 = YES
	xferlog_std_format = YES
	listen = NO
	listen_ipv6= YES
	userlist_enable = YES
	tcp_wrappers= YES
	#config virtual user FTP
	pam_service_name = vsftpd									#虚拟用户启用 pam 认证
	guest_enable = YES											#启用虚拟用户
	guest_username =ftpuser										#映射虚拟用户至系统用户 ftpuser
	user_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 服务端,测试正常。

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值