CentOS7 搭建 Ftp 服务器

本贴最后更新于 2234 天前,其中的信息可能已经时移世易

CentOS7 搭建 Ftp 服务器

1.查看

[root@ppl ~]# rpm -qa |grep vsftpd
vsftpd-3.0.2-22.el7.x86_64
[root@ppl ~]# 

如果没有则通过 yarm 源进行安装

yum install -y vsftpd

2.卸载

[root@ppl ~]# rpm -e vsftpd-3.0.2-22.el7.x86_64
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave
warning: /etc/vsftpd/user_list saved as /etc/vsftpd/user_list.rpmsave
[root@ppl ~]# 

查看指令

find / -name '*vsftpd*'

3.配置

进入到 ftp 的根目录默认是**/etc/vsftpd/**文件中进行配置

[root@ppl vsftpd]# pwd
/etc/vsftpd
[root@ppl vsftpd]# ll -h
total 24K
-rw-r--r--. 1 root root    9 Oct 30 06:50 chroot_list
-rw-------. 1 root root  125 Aug  3  2017 ftpusers
-rw-------. 1 root root  361 Aug  3  2017 user_list
-rw-------. 1 root root 5.0K Oct 30 06:50 vsftpd.conf
-rwxr--r--. 1 root root  338 Aug  3  2017 vsftpd_conf_migrate.sh
[root@ppl vsftpd]# 

/etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件

/etc/vsftpd/ftpusers:用于指定哪些用户不能访问 FTP 服务器。 黑名单

/etc/vsftpd/user_list:指定允许使用 vsftpd 的用户列表文件。 白名单

/etc/vsftpd/chroot_list:指定允许使用 vsftpd 的用户列表文件。 控制名单下的目录能不能离开 ftp 根目录

vsftpd.conf 具体配置如下:

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO #允许匿名用户访问为了安全选择关闭
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES # 允许本地用户登录
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES # 是否允许写入
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022 # 本地用户上传文件的umask
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES #为YES则进入目录时显示此目录下由message_file选项指定的文本文件(,默认为.message)的内容
#
# Activate logging of uploads/downloads.
xferlog_enable=YES #开启日志
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES 
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/xferlog #ftp日志目录
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES #标准格式
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600 #设置客户端连接时间
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120 #设置数据连接时间 针对上传,下载
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=NO
chroot_list_enable=YES #若为NO,则记录在chroot_list_file所指定的文件(默认是/etc/vsftpd/chroot_list)中的用户将被chroot在登录后所在目录中,无法离开.如果为YES,则所记录的用户将不被chroot.这里YES.
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list #设置为YES则下面的控制有效
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES #若为NO,则仅接受记录在userlist_file选项指定文件(默认是/etc/vsftpd/user_list)中的用户的login请求.若为YES则不接受这些用户的请求.
tcp_wrappers=YES

初步保证下面 3 项为 YES

    anonymous_enable=YES  #后期改为NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES

做完第四步没错后,再进一步配置

#打开配置文件
vim /etc/vsftpd/vsftpd.conf
#显示行号
:set number
#修改配置 12 行
anonymous_enable=NO
#修改配置 33 行
anon_mkdir_write_enable=YES
#修改配置48行
chown_uploads=YES
#修改配置72行
async_abor_enable=YES
#修改配置82行
ascii_upload_enable=YES
#修改配置83行
ascii_download_enable=YES
#修改配置86行
ftpd_banner=Welcome to blah FTP service.
#修改配置100行
chroot_local_user=YES
在最后追加以下内容:
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=10
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=15
connect_timeout=10
allow_writeable_chroot=YES

4.启动

设置开机启动

systemctl enable vsftpd.service

启动并查看 vsftpd 服务状态,systemctl 启动服务成功不会有任何提示,绿色的 active 表示服务正在运行

systemctl start vsftpd.service
systemctl status vsftpd.service
systemctl stop vsftpd.service

CentOS6 的启动设置

#设置开机启动
chkconfig vsftpd on
#启动
service vsftpd start
service vsftpd restart 

========示例=======
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# service vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]
[root@localhost vsftpd]# service vsftpd status
vsftpd (pid 39872) 正在运行...
[root@localhost vsftpd]#

5.创建用户

创建编辑用户文件

vim /etc/vsftpd/virtusers
#第一行为用户名,第二行为密码。不能使用root作为用户名 
leo
123456

生成用户数据文件(添加多用户时,这个地方一定要再执行一遍!!)

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取

chmod 600 /etc/vsftpd/virtusers.db

修改 /etc/pam.d/vsftpd 文件

# 修改前先备份 
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vim /etc/pam.d/vsftpd
#先将配置文件中原有的 auth 及 account 的所有配置行均注释掉,再追加
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
# 如果系统为32位,上面改为lib

新建系统用户 vsftpd,用户目录为/home/vsftpd

#用户登录终端设为/bin/false(即:使之不能登录系统)
useradd vsftpd -d /home/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /home/vsftpd

建立虚拟用户个人配置文件(可以配置添加多个用户,都加在/home/vsftpd/下)

mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
#这里建立虚拟用户leo配置文件
touch leo

=====示例=====
[root@localhost vsftpd]# mkdir /etc/vsftpd/vconf
[root@localhost vsftpd]# cd /etc/vsftpd/vconf
[root@localhost vconf]# ll -h
总用量 0
[root@localhost vconf]# pwd
/etc/vsftpd/vconf
[root@localhost vconf]# touch leo
[root@localhost vconf]# ll -h
总用量 0
-rw-r--r--. 1 root root 0 11月 10 09:22 leo
[root@localhost vconf]# 
=======================
接下来继续操作
#编辑leo用户配置文件,内容如下,其他用户类似
vim leo

local_root=/home/vsftpd/leo/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#建立leo用户根目录
mkdir -p /home/vsftpd/leo/
chmod -R 777 /home/vsftpd/leo

添加多用户时,/home/vsftpd/的权限一定要检查一下,重新设置一遍!!!

防火墙设置

firewall 的设置方式:

firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=40000-40010/tcp --permanent
最后记得重启
firewall-cmd --reload

CentOS6 防火墙设置

[root@localhost vconf]# chkconfig iptables on
[root@localhost vconf]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost vconf]# iptables -A INPUT -p tcp --dport 40000:40010 -j ACCEPT
[root@localhost vconf]# /etc/rc.d/init.d/iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]
[root@localhost vconf]# /etc/init.d/iptables restart
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]
iptables:应用防火墙规则:                                 [确定]
[root@localhost vconf]# 

重启 vsftpd 服务器

systemctl restart vsftpd.service
#Centos6
service vsftpd restart

7.修改 SELINUX

SELINUX 不对 vsftp 不做任何限制

setsebool -P ftpd_connect_all_unreserved 1

传输文件的时候,会发现文件上传和下载都会出现

500、503 、200 等问题。这个时候,可以进行以下操作:

#打开SELINUX配置文件
vim /etc/selinux/config
#修改配置参数
#注释  
SELINUX=enforcing
#增加  
SELINUX=disabled
#修改完成后,需要重启!

检查 SElinux 状态并关闭

[root@ppl ftp]# sestatus -b | grep ftp
ftpd_anon_write                             off
ftpd_connect_all_unreserved                 off
ftpd_connect_db                             off
ftpd_full_access                            on
ftpd_use_cifs                               off
ftpd_use_fusefs                             off
ftpd_use_nfs                                off
ftpd_use_passive_mode                       off
httpd_can_connect_ftp                       off
httpd_enable_ftp_server                     off
tftp_anon_write                             off
tftp_home_dir                               on
[root@ppl ftp]# 

8.注意事项

Linux Vsftpd 连接超时解决方法(被动模式)

CentOS6 版本会出现以下问题

使用 FileZilla FTP Client 连接 Vsftpd FTP,在没有配置传输模式(主动模式、被动模式)时,出现了以下提示信息。我们可以手工设置传输模式为“主动模式”来解决这一问题。但由于客户端防火墙等原因,这种解决方法将不会始终有效。

[T] 连接到 ftp://leo:***@110.137.111.134
[T] 连接到 110.137.111.134:21
[T] 220 Welcome to blah FTP service.
[T] USER leo
[T] 331 Please specify the password.
[T] PASS (隐藏)
[T] 230 Login successful.
[T] SYST
[T] 215 UNIX Type: L8
[T] TYPE A
[T] 200 Switching to ASCII mode.
[T] REST 1
[T] 350 Restart position accepted (1).
[T] REST 0
[T] 350 Restart position accepted (0).
[T] FEAT
[T] 211-Features:
[T]  EPRT
[T]  EPSV
[T]  MDTM
[T]  PASV
[T]  REST STREAM
[T]  SIZE
[T]  TVFS
[T]  UTF8
[T] 211 End
[T] OPTS UTF8 ON
[T] 200 Always in UTF8 mode.
[T] PWD
[T] 257 "/"
[T] TYPE I
[T] 200 Switching to Binary mode.
[T] PASV
[T] 227 Entering Passive Mode (110,137,111,134,156,72).
[T] 打开数据连接到主机: 110.137.111.134 端口: 40008
[T] REST 0
[T] 350 Restart position accepted (0).
[T] STOR ppl0111.png
[T] 150 Ok to send data.
[T] 226 Transfer complete.
[T] MDTM 20181027100512 ppl0111.png
[T] 213 File modification time set.
[i] ppl0111.png 283.8 k字节/0.08(s)/3,675.90KBps
[T] (用户断开FTP连接)
[i] 传输 1 个文件共 283.8 k 字节,使用0.08秒,速度3,675.90KBps
[T] ftp://leo:***@110.137.111.134 已断开
[1] PASV
[1] 227 Entering Passive Mode (110,137,111,134,156,66).
[1] 打开数据连接到主机: 110.137.111.134 端口: 40002
[1] LIST

在服务端配置被动模式就可以从根源上解决这问题。

vi /etc/vsftpd/vsftpd.conf
#在最下面添加以下信息
pasv_enable=YES         #开启被动模式
pasv_min_port=4000      #随机最小端口
pasv_max_port=5000      #随机最大端口

加载内核 ip_conntrack_ftp 和 ip_nat_ftp(终端执行)

[root@localhost vsftpd]# modprobe ip_conntrack_ftp
[root@localhost vsftpd]# modprobe ip_nat_ftp
[root@localhost vsftpd]# service vsftpd restart

配置 iptables 开放 4000 到 5000 端口
vi /etc/sysconfig/iptables  在*filter下加入下
	
-A OUTPUT -p tcp --sport 4000:5000 -j ACCEPT
-A INPUT -p tcp --dport 4000:5000 -j ACCEPT
加载 iptables 配置
iptables-restore < /etc/sysconfig/iptables
重启 Vsftpd
service vsftpd restart

最后, 与 ssh 一样,vsftp 的配置文件默认开启了 DNS 反向解析,这可能会造成用户在登陆到 FTP 服务器的时候奇慢无比,只要在配置文件中禁用 DNS 反向解析即可解决文件。

编辑/etc/vsftpd/vsftpd.conf

添加

reverse_lookup_enable=NO


技术改变人生 Q 群:702101215
爱学习:www.aixx123.com


  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3454 回帖 • 189 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    946 引用 • 943 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...