CentOS7 安装配置FTP服务器详解

Posted AquaMriusC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS7 安装配置FTP服务器详解相关的知识,希望对你有一定的参考价值。

CentOS7 安装配置FTP服务器详解

1、FTP简介

ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服务端)和ftp客户端

ftp客户端与服务器创建网络连接,请求登录服务器,登录成功后,就可以进行文件传输,主要包括下载文件和上传文件两种操作

2、关闭防火墙

为了避免不必要的麻烦,我们先关闭防火墙和selinux,等搭建成功之后再开启防火墙和相应的端口

[root@centos7 ~]# systemctl status firewalld.service        # 查看防火墙状态
[root@centos7 ~]# systemctl stop firewalld.service          # 停止防火墙服务
[root@centos7 ~]# systemctl disable firewalld.service       # 关闭防火墙开启自启动
# 把文件中的SELINUX=enforcing 改为SELINUX=disabled
[root@centos7 ~]# vim /etc/selinux/config          
[root@centos7 ~]# setenforce 0                              # 使修改马上生效

3、安装FTP软件包

在CentOS7中,采用yum来安装ftp软件包,包括ftp服务器和ftp客户端

查看是否已经安装了vsftpd

# 如果没有返回任何结果,表示没有安装;如果返回文件包名,这表示已经安装了该服务;
[root@centos7 ~]# rpm -qa|grep vsftpd
vsftpd-3.0.2-29.el7_9.x86_64               # 代表已安装
[root@centos7 ~]# vsftpd -version
vsftpd: version 3.0.2                      # 代表已安装
[root@centos7 ~]# rpm -e vsftpd            # 卸载vsftpd
# 再次检查
[root@centos7 ~]# rpm -qa|grep vsftpd
[root@centos7 ~]# vsftpd -version
bash: vsftpd: 未找到命令...

开始安装vsftpd

  • 安装ftp服务器
# 如果已经安装,再次执行yum就会把软件包升级到最新版本
[root@centos7 ~]# yum install -y vsftpd
  • 安装ftp客户端
[root@centos7 ~]# yum install -y ftp lftp
  • 设置为开机自动启动服务
[root@centos7 ~]# systemctl enable vsftpd.service 
  • 启动vsftpd服务
# ftp服务器的服务名是vsftpd,相关的操作如下:
[root@centos7 ~]# systemctl start  vsftpd.service      # 启动服务
systemctl stop  vsftpd.service        # 停止服务
systemctl restart vsftpd.service      # 重启服务
systemctl status vsftpd.service       # 查看服务状态
systemctl enable vsftpd.service       # 设置开机自启动vsftpd服务
systemctl disable vsftpd.service      # 禁用开机自启动vsftpd服务

4、新建用户和FTP目录

ftpuser是你为该ftp服务创建的用户名,/data/ftp/ftpuser为ftp服务器访问路径

  • 新建FTP目录并授权
# 创建文件目录
mkdir -p /data/ftp/ftpuser
# 为该目录配置权限
chmod -R 755 /data/ftp/ftpuser

如果我们直接使用useradd -d ftpuser,则新建的用户是可以登录系统的,这样会给FTP服务器带来安全隐患

因此我们为了不让FTP用户登录系统,就必须为FTP用户统一创建一个不能登录系统的shell,这一行的命令只运行一次即可,后面新建用户就不需要执行了

echo /usr/bin/nologin>>/etc/shells
  • 新建ftp组及用户
# 新建用户组ftp
groupadd ftp
# 指定用户主目录:/data/ftp/ftpuser -M
# 指定用户的shell: -s /usr/bin/nologin
# 新建用户ftpuser,并且设置不支持ssh系统登录,只能登录ftp服务器
# -g 用户组; -d 指定家目录; -s 不能登陆系统; -M 不创建家目录
useradd -g ftp -d /data/ftp/ftpuser -M -s /usr/bin/nologin ftpuser

==============================================================
# 如果要恢复ftpuser用户的ssh登录(可登入CentOS7系统),执行下面的语句即可
usermod -s /bin/bash ftpuser
  • 设置密码
# echo "新密码" | passwd --stdin 用户名
echo "ftppassword" | passwd --stdin ftpuser
  • 新建FTP用户可写目录
# 由于/data/ftp/ftpuser的用户是root,其它用户都没有写的权限
# 所以要在该目录下新建一个目录用于文件的上传下载
mkdir -p /data/ftp/ftpuser/upload
chown ftpuser:ftp /data/ftp/ftpuser/upload
chmod 755 /data/ftp/ftpuser/upload

5、配置ftp服务器

备份配置文件

# 防止后期配置文件出错后无法还原
[root@centos7 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
[root@centos7 ~]# cd /etc/vsftpd/
[root@centos7 ssh]# ll
......
-rw------- 1 root root 5116 610 2021 vsftpd.conf
-rw------- 1 root root 5116 815 22:05 vsftpd.conf.backup
......

编辑配置文件

vim /etc/vsftpd/vsftpd.conf

打开vsftpd.conf文件,全选删除(Esc+gg+dG)文件内容,然后用下面的配置进行替换

# 是否开启匿名用户,匿名都不安全,默认NO
anonymous_enable=NO
# 允许本机账号登录FTP
# 这个设定值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
# 允许账号都有写操作
write_enable=YES
# 本地用户创建文件或目录的掩码
# 意思是指:文件目录权限:777-022=755,文件权限:666-022=644
local_umask=022
# 进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES
# 当设定为YES时,使用者上传与下载日志都会被记录起来
xferlog_enable=YES
# 日志成为std格式
xferlog_std_format=YES
# 上传与下载日志存放路径
xferlog_file=/var/log/xferlog
# 开放port模式的20端口的连接
connect_from_port_20=YES
# 关于系统安全的设定值:
# ascii_download_enable=YES(NO)
# 如果设定为YES,那么client就可以使用ASCII格式下载档案
# 一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO
# ascii_upload_enable=YES(NO)
# 与上一个设定类似的,只是这个设定针对上传而言,预设是NO
ascii_upload_enable=NO
ascii_download_enable=NO
# 通过搭配能实现以下几种效果:
# ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录
# ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录
# ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录
# ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录
# 限制用户只能在自己的目录活动
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
# 可以更改ftp的端口号,使用默认值21
# listen_port=60021
# 监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务
listen=NO
# 监听ipv6端口
listen_ipv6=YES
# 打开主动模式
port_enable=YES
# 启动被动式联机(passivemode)
pasv_enable=YES
# 被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的
# 上面两个是与passive mode使用的port number有关,如果您想要使用64000到65000这1000个port来进行被动式资料的连接,可以这样设定
# 这两项定义了可以同时执行下载链接的数量
# 被动模式起始端口,0为随机分配
pasv_min_port=64000
# 被动模式结束端口,0为随机分配
pasv_max_port=65000
# 文件末尾添加
# 这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用
pam_service_name=vsftpd
# 使用允许登录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuser
userlist_enable=YES
# 限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusers
userlist_deny=NO
# 允许限制在自己的目录活动的用户拥有写权限
# 不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
# 当然我们都习惯支持TCP Wrappers的啦
# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性
tcp_wrappers=YES
# FTP访问目录
local_root=/data/ftp/ftpuser

允许新建用户登录FTP

vim /etc/vsftpd/user_list

将新建用户ftpuser添加到/etc/vsftpd/user_list文件末尾

注意:

这个是允许登录ftp的名单,一行一个用户,不能把多个写到一行

修改用户切换目录的权限

用户切换目录的规则设定在/etc/vsftpd/vsftpd.conf文件中,如果有用户有权限切换目录,则在/etc/vsftpd/chroot_list文件中添加即可(一行一个用户)

例如:

# 在chroot_list中添加新建用户ftpuser
# 第一步:打开文件
vim /etc/vsftpd/chroot_list
# 第二步:添加ftpuser用户
ftpuser
# 第三步:保存文件并退出

6、重启并配置防火墙

systemctl enable firewalld.service                           # 重启防火墙开机自启动
systemctl restart firewalld.service                          # 重启防火墙服务
firewall-cmd --version                                       # 查看防火墙版本
firewall-cmd --list-all       					             # 查看已开放的端口
firewall-cmd --permanent --zone=public --add-service=ftp     # 防火墙开通ftp服务
firewall-cmd --permanent --zone=public --add-port=21/tcp     # 开通ftp服务21命令控制端口
# 主动模式下数据传输端口等于命令控制端口-1 ======> 21 - 1 = 20
# 开通ftp服务主动模式的20数据传输端口
firewall-cmd --permanent --zone=public --add-port=20/tcp    
# 开通ftp服务被动模式的数据端口范围
firewall-cmd --permanent --zone=public --add-port=64000-65000/tcp 
firewall-cmd --reload                            # 刷新防火墙,重新载入
# 设置关闭SELinux对ftp的限制
setsebool -P ftpd_full_access on
sed -i s#enforcing#disabled#g /etc/sysconfig/selinux
setenforce 0 && getenforce
getenforce

7、重启FTP服务

systemctl restart vsftpd.service

至此,FTP其实就已经搭建成功,可以登录了!

8、访问测试

查看IP地址

ip addr

注意:

  • 云服务器的ip地址为公网ip地址
  • 虚拟机的ip地址为NAT模式下的固定ip地址,下图用的就是固定ip

新建测试文件

# 进入之前设置好的路径
[root@centos7 ~]# cd /data/ftp/ftpuser/upload
# 新建测试文件,然后保存退出
[root@centos7 upload]# vim 测试_20220712.txt
[root@centos7 upload]#

浏览器访问测试

终端访问测试

  • ftp命令
[root@centos7 ~]# ftp 192.168.10.110
Connected to 192.168.10.110 (192.168.10.110).
220 (vsFTPd 3.0.2)
Name (192.168.10.110:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,10,110,251,154).
150 Here comes the directory listing.
drwxr-xr-x    2 1002     50           4096 Aug 15 14:26 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,10,110,250,171).
150 Here comes the directory listing.
-rw-r--r--    1 0        0              12 Aug 15 14:26 测试_20220712.txt
226 Directory send OK.
ftp> exit
221 Goodbye.
[root@centos7 ~]#
  • lftp命令
# 格式:lftp 用户名:密码@ftp地址:传送端口(默认21)
[root@centos7 ~]# lftp ftpuser:ftppassword@192.168.10.110:21
lftp ftpuser@192.168.10.110:~> ls
drwxr-xr-x    2 1002     50           4096 Aug 15 14:26 upload
lftp ftpuser@192.168.10.110:/> cd upload/
lftp ftpuser@192.168.10.110:/upload> ls
-rw-r--r--    1 0        0              12 Aug 15 14:26 测试_20220712.txt
lftp ftpuser@192.168.10.110:/upload> exit
[root@centos7 ~]# 

参考网址:

CentOS7安装及配置vsftpd (FTP服务器)

CentOS7配置ftp服务

FTP上传和下载文件名称中文乱码问题

详解“FTP文件传输服务”安装配置实例

“FTP文件传输服务”安装配置实例

 

家住海边喜欢浪:zhang789.blog.51cto.com

目录

  • 简介

  • ftp工作原理

  • 常见的FTP服务

  • Vsftpd服务器的安装

  • Vsftpd.conf配置文件详解

  • 配置FTP服务器实例

      • 实例:配置匿名用户

      • 实例:配置本地用户登录

      • 实例:配置虚拟用户登录(MySQL认证)

      • 实例:控制用户登录

      • 实例:设置欢迎信息

分析vsftpd日志管理

FTP服务器配置与管理

简介

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

互联网上提供文件存储和访问服务的计算机,他们依照的是FTP协议提供服务!支持FTP协议的服务器就是FTP服务器!FTP协议提供存储和传输服务的一套协议!

下载"(Download)"上传"(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

ftp工作原理

ftp采用客户端/服务端的工作模式(C/S结构),通过TCP协议建立客户端和服务器之间的连接,但与其他大多数应用协议不同,FTP协议在客户端和服务端之间建立了两条通信链路,分别是控制链路和数据链路,其中,控制链路负责FTP会话过程中FTP命令的发送和接收,数据链路则负责数据的传输

FTP会话包含了两个通道,控制通道和数据通道,FTP的工作有两种方式,一种是主动模式,一种是被动模式,以FTPServer为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的的连接 
(无论是主动模式还是被动模式,首先的控制通道都是先建立起来的,只是在数据传输模式上的区别)

主动模式

工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

技术分享

被动模式

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:


技术分享

工作端口和模式

20号端口:数据传输端口 ftp-data 
21号端口:指令传输端口

数据传输原理: FTP的传输有两种方式:ASCII二进制

ASCII传输方式

假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。 
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。

二进制传输模式

在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。 
如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)

常见的FTP服务

Windows下:Serv-U FTP Server 
Linux下有代表性的FTP服务器软件是Wu-FTPProFTP 及vsftpdWu-FTP(Washington University FTP)是由美国华盛顿大学开发的、以效率和稳定性为参考量的FTP软件。它的功能强大,配置较复杂,由于开发时间较早,应用十分广泛,也因此成为黑客们主要的攻击目标。Wu-FTP的早期各级版本不断出现安全漏洞,系统管理员不得不因安全因素而经常对其进行升级。ProFTP针对Wu-FTP的弱项而开发,除了在安全性方面进行了改进外,还具备设置简单的特点,并提供了一些Wu-FTP没有的功能,大大简化了架设和管理FTP服务器的工作。vsftpd 则凭借在安全性方面的出色表现,被很多大型网站广为采用。

Vsftpd服务器的安装

软件包

vsftpd-2.2.2-11.el6_4.1.x86_64.rpm                       //服务端软件包   
ftp-0.17-54.el6.x86_64.rpm                              //客户端软件包
lftp-4.0.9-1.el6.x86_64.rpm                             //类似ftp的客户端软件包,具有增强功能

1、安装vsftpd软件

[root@localhost ~]# yum -y install vsftpd

2、相关配置文件

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf                                 //主配置文件,核心配置文件
/etc
/vsftpd/ftpusers                                    //黑名单,这个里面的用户不允许访问FTP服务器
/etc
/vsftpd/user_list                                   //白名单,允许访问FTP服务器的用户列表

3、启动服务

服务启动与关闭
[[email protected] vsftpd]# chkconfig vsftpd on
[[email protected] vsftpd]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[[email protected] vsftpd]# netstat -antup | grep ftp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      2579/vsftpd        
tcp        0      0 10.1.252.97:21              10.1.250.64:54777           ESTABLISHED 2582/vsftpd

技术分享

Vsftpd.conf配置文件详解

[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd.conf
#################用户登陆控制##############
anonymous_enable=YES                        #接受匿名用户
no_anon_password=YES                        #匿名用户login时不询问口令  
anon_root=(none)                             #匿名用户主目录  
local_enable=YES                             #接受本地用户
local_root=(none)                             #本地用户主目录                        
deny_email_enable=YES   #如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
check_shell=YES                          #仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录
userlist_enable=YES                      #若启用此选项,userlist_deny选项才被启动
userlist_deny=NO    #若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录
passwd_chroot_enable=NO                 #切换目录密码支持
ftp_username=FTP                          #定义匿名登入的使用者名称。默认值为ftp。
#################用户权限控制###############
write_enable=YES                            #可以上传(全局控制).
local_umask=022                         #本地用户上传文件的umask
file_open_mode=0666                     #上传文件的权限配合umask使用
anon_upload_enable=NO                   #匿名用户可以上传
anon_mkdir_write_enable=NO              #匿名用户可以建目录
anon_other_write_enable=NO              #匿名用户修改删除
anon_world_readable_only=YES            #如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。
#guest_enable=NO                #如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名
chown_uploads=YES                           #所有匿名上传的文件的所属用户将会被更改成chown_username
chown_username=lightwiter               #匿名上传文件所属用户名
chroot_list_enable=YES          #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
async_abor_enable=YES                   #允许使用"async ABOR"命令,一般不用
ascii_upload_enable=YES                 #使用ASSCII上传
ascii_download_enable=YES               #用ASCII 模式下载
secure_chroot_dir=/usr/share/empty      #这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当
vsftpd不需要file system 的权限时,就会将使用者限制在此数据夹中                                                                                        
默认值为/usr/share/empty
###################超时设置##################
idle_session_timeout=600                    #空闲连接超时
data_connection_timeout=120             #数据传输超时
ACCEPT_TIMEOUT=60                           #PAVS请求超时
connect_timeout=60                      #PROT模式连接超时
################服务器功能选项###############
xferlog_enable=YES                      #开启日记功能
xferlog_std_format=YES                  #使用标准格式
#log_ftp_protocol=NO       #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
pasv_enable=YES                         #允许使用pasv模式
#pasv_promiscuous=NO                        #关闭安全检查,Pasv向
#port_enable=YES                            #允许使用port模式
#prot_promiscuous                           #关闭安全检查,Port向
tcp_wrappers=YES                            #开启tcp_wrappers支持
pam_service_name=vsftpd                 #定义PAM 所使用的名称,预设为vsftpd
nopriv_user=nobody                      #当服务器运行于最底层时使用的用户名
pasv_address=(none)                 #使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)
#################服务器性能选项##############
#ls_recurse_enable=YES               #是否能使用ls -R命令以防止浪费大量的服务器资源
#one_process_model                    #是否使用单进程模式
listen=YES      #绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
text_userdb_names=NO                      #当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出
现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名
称,则将此功能开启。
use_localtime=NO                    #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
#use_sendfile=YES                           #测试平台优化
################信息类设置################
ftpd_banner=WelcomeFTP Server.         #login时显示欢迎信息.如果设置了banner_file则此设置无效
dirmessage_enable=YES               #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 #setproctitle_enable=YES                    #显示会话状态信息,关!
##############文件定义 ##################
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list#定义不能更改用户主目录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list      #定义限制/允许用户登录的文件
banner_file=/etc/vsftpd/banner                      #定义登录信息文件的位置
banned_email_file=/etc/vsftpd.banned_emails     #禁止使用的匿名用户登陆时作为密码的电子邮件地址
xferlog_file=/var/log/vsftpd.log                    #日志文件位置
message_file=.message                               #目录信息文件
##############目录定义 #################
user_config_dir=/etc/vsftpd/userconf                #定义用户配置文件的目录
                                                       #定义本地用户登陆的根目录,注意定义根目录可以是相对路径
也可以是绝对路径.相对路径是针对用户家目录来说的.
local_root=webdisk                           #此项设置每个用户登陆后其根目录为/home/username/webdisk
anon_root=/var/ftp                                   #匿名用户登陆后的根目录
#############用户连接选项#################
max_clients=100                                       #可接受的最大client数目
max_per_ip=5                                              #每个ip的最大client数目
connect_from_port_20=YES                                  #使用标准的20端口来连接ftp
listen_address=192.168.0.2                            #绑定到某个IP,其它IP不能访问
#listen_port=2121                                         #绑定到某个端口
#ftp_data_port=2020                                   #数据传输端口
pasv_max_port=0                         #pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_min_port=0                         #pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。
##############数据传输选项#################
anon_max_rate=51200                     #匿名用户的传输比率(b/s)
local_max_rate=5120000                  #本地用户的传输比率(b/s)

配置FTP服务器实例

通过修改不同的配置文件选项,达到不同的实验效果

匿名FTP的基本配置

使用匿名FTP,用户无需输入用户名密码即可登录FTP服务器,vsftpd安装后默认开启了匿名ftp的功能,用户无需额外配置即可使用匿名登录ftp服务器

技术分享

这个时候用户可以匿名方式登录ftp服务器,查看并下载匿名账户主目录下的各级目录和文件,但是不能上传文件或者创建目录

[[email protected] ~]# lftp 10.1.252.97
lftp 10.1.252.97:~> ls              
drwxr-xr-x    2 0        0            4096 May 11 06:17 pub
lftp 10.1.252.97:/> cd pub/
lftp 10.1.252.97:/pub> put /etc/issue
put: Access failed: 550 Permission denied. (issue)  //拒绝上传
lftp 10.1.252.97:/pub> get 1.txt        //可以下载
lftp 10.1.252.97:/pub>

匿名ftp的其他设置

出于安全方面的考虑,vsftpd在默认情况下不允许用户通过匿名FTP上传文件,创建目录等更改操作,但是可以修改vsftpd.conf配置文件的选项,可以赋予匿名ftp更多的权限 
实例1、允许匿名ftp上传文件 
1、修改vsfpd.conf

write_enable=YES
anon_upload_enable=YES

2、更改/var/ftp/pub目录的权限,为ftp用户添加写权限,并重新加载配置文件

[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]

3、测试

lftp 10.1.252.97:/pub> put /etc/issue
79 bytes transferred            //成功上传
lftp 10.1.252.97:/pub> ls
-rw-r--r--    1 0        0               0 Jul 25 01:13 1.txt
-rw-------    1 14       50             79 Jul 25 01:19 issue

实例2、允许匿名ftp创建目录 
1、修改vsftpd.conf文件

write_enable=YES
anon_mkdir_write_enable=YES

2、更改/var/ftp/pub目录的权限,为ftp用户添加写权限,并重新加载配置文件

[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]

3、测试

lftp 10.1.252.97:/pub> mkdir zabbix
mkdir ok, `zabbix‘ created
lftp 10.1.252.97:/pub> ls       //创建成功
-rw-r--r--    1 0        0               0 Jul 25 01:13 1.txt
-rw-------    1 14       50             79 Jul 25 01:19 issue
drwx------    2 14       50           4096 Jul 25 01:23 zabbix

配置本地用户登录

本地用户登录就是指使用Linux操作系统中的用户账号和密码登录ftp服务器,vsftp安装后默只支持匿名ftp登录,用户如果试图使用Linux操作系统中的账号登录服务器,将会被vsftpd拒绝 
1、创建本地用户

[root@localhost pub]# useradd zhanghe
[root@localhost pub]# passwd zhanghe
Changing password for user zhanghe.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

2、修改vsftpd.conf文件

local_enable=YES

3、修改目录权限

[root@localhost html]# chmod o+w /var/www/html/

4、登录账户测试

技术分享

配置虚拟用户登录(MySQL认证)


技术分享

1、安装MySQL并创建对应用户和表

[root@localhost ~]# yum install mysql-server -y   #安装MySQL数据库
[root@localhost ~]# service mysqld start              #启动数据库
[root@localhost ~]# mysql_secure_installation     #初始化MySQL配置

创建用户并授权,创建对应数据库和表并插入两行数据

[[email protected] ~]# mysql -uroot -p
Enter password:
mysql> GRANT ALL ON vsftpd.* TO [email protected]‘%‘ IDENTIFIED BY ‘123456;
Query OK, 0 rows affected (0.00 sec)    #授予用户权限

mysql> CREATE DATABASE vsftpd;          #创建数据库
Query OK, 1 row affected (0.00 sec)

mysql> use vsftpd;                      #进入指定默认数据库
Database changed
mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL);                    #创建表
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO users (name,password) VALUES (‘tom‘,PASSWORD(‘mageedu‘)),(‘jerry‘,PASSWORD(‘mageedu‘)),(‘lucy‘,PASSWORD(‘mageedu‘));         #插入3行,用户为tom,jerry,lucy
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> FLUSH PRIVILEGES;              #刷新权限
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

2、配置vsftpd基于MySQL表的虚拟用户

首先要完成基于MySQL表的认证,需要通过pam_mysql模块实现,我们要先安装pam_mysql

pam_mysql模块 
CentOS 6:epel 
CentOS 7:编译安装

[root@localhost ~]# yum -y install pam_mysql

准备要映射成为的系统账号:

[root@localhost ~]# mkdir -pv /ftproot/{pub,upload}
[root@localhost ~]# useradd -d /ftproot vuser
[root@localhost ~]# setfacl -m u:vuser:rwx /ftproot/upload

准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql

[[email protected] ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf

//并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES

guest_enable=YES
guest_username=vuser

配置每虚拟用户拥有不同的权限:vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_conf

为每个用户单独提供配置文件

[[email protected] ~]# mkdir /etc/vsftpd/vusers_conf
[[email protected] ~]# cd /etc/vsftpd/vusers_conf/
[[email protected] vusers_conf]# touch tom
[[email protected] vusers_conf]# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

测试

[[email protected] ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,252,97,44,23).
150 Here comes the directory listing.
drwxr-xr-x    2 500      500          4096 Jul 25 01:47 51cto
drwx------    2 501      501          4096 Jul 25 02:17 iii
drwxr-xr-x    2 500      500          4096 Jul 25 01:45 zabbix
226 Directory send OK.
ftp>

控制用户登录

1、编辑vsftpd.conf文件

userlist_enable=YES
userlist_file=/etc/vsftpd/ftpuser_list
[[email protected] vsftpd]# vim user_list
或者:vim /etc/vsftpd/ftpuser_list
halt
mail
news
uucp
operator
games
nobody
tom  //添加禁止登录的用户

2、登录测试

[[email protected] ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>

设置欢迎信息

用户登录欢迎信息

1、修改vsftpd.conf,并重载服务

ftpd_banner=Welcome to blah mageedu@ftp service.

[root@localhost vsftpd]# service vsftpd reload

2、测试

[[email protected] ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 Welcome to blah [email protected] service.
Name (10.1.252.97:root): tom

登录信息写入文件

1、修改vsftpd.conf文件

#ftpd_banner=Welcome to blah mageedu@ftp service.
banner_file=/etc/vsftpd/banner.txt

2、添加欢迎信息文件

[root@localhost vsftpd]# cat banner.txt 
*************************************************
*                       *
*   Welocome to Mageedu FTP server      *
*                       *
*************************************************

3、测试

[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220-*************************************************
220-*                       *
220-*   Welocome to Mageedu FTP server      *
220-*                       *
220-*************************************************
220
Name (10.1.252.97:root):

目录欢迎信息

1、编译vsftpd.conf文件

dirmessage_enable=YES

2、在文件目录下创建欢迎信息文件并重载服务

[root@localhost vsftpd]# cat /var/www/html/.message 
欢迎进入ftp根目录
[root@localhost html]# service vsftpd reload

3、测试

Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230-欢迎进入ftp根目录
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

日志管理

[[email protected] ~]# cat /var/log/xferlog 
Mon Jul 25 09:13:36 2016 1 10.1.252.96 0 /pub/1.txt b _ o a [email protected] ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:o是服务器到客户端:a表示匿名
Mon Jul 25 09:19:49 2016 1 10.1.252.96 79 /pub/issue b _ i a [email protected] ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:i是客户端到服务端:a表示匿名
Mon Jul 25 09:46:01 2016 1 10.1.250.64 49451 /var/www/html/Linux_Services_and_Security.txt b _ i r zhanghe ftp 0 * c
提示时间:从10.1.252.64访问:访问的文件:b是二进制传输方式:i是客户端到服务端:r表示真实用户:服务名ftp:认证方式0表示无:*无法获取用户ID:c表示传输已完成
[[email protected] ~]#



本文出自 “家住海边喜欢浪” 博客,请务必保留此出处http://zhang789.blog.51cto.com/11045979/1863022

以上是关于CentOS7 安装配置FTP服务器详解的主要内容,如果未能解决你的问题,请参考以下文章

ftp协议详解与vsftpd在linux上的安装配置

linux ftp服务配置文件详解

Linux安装vsftpd及配置详解

腾讯云服务器linux centOS7.4 搭建ftp服务器 vsftpd

阿里云服务器 centos7 ftp安装

Linux网络服务------PXE高效批量网络装机(万字图文详解)