CentOS7 配置 vsftpd 以及参数详解

发布于 2019-04-07  7,439 次阅读


1、安装vsftpd 
yum install -y vsftpd

2、编辑配置文件 
vi /etc/vsftpd/vsftpd.conf

#是否开启匿名用户,匿名都不安全,不要开
anonymous_enable=NO


#允许本机账号登录FTP
local_enable=YES


#允许账号都有写操作
write_enable=YES


#local_umask的意思是指:
#    文件目录权限:777-022=755
#    文件权限:666-022=644
#    这有点反人类了,并且没有人跟我说是减去的。注意理解!!!
local_umask=022


#匿名用户是否有上传文件的功能,不要开
#anon_upload_enable=YES


#匿名用户是否有创建文件夹的功能,不要开
#anon_mkdir_write_enable=YES


#进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES


#日志记录
xferlog_enable=YES

#开放port模式的20端口的连接
connect_from_port_20=YES

#允许没人认领的文件上传的时候,更改掉所属用户
#chown_uploads=YES

#chown_uploads=YES的前提下,所属的用户
#chown_username=whoever

#日志存放的地方
#xferlog_file=/var/log/xferlog

#日志成为std格式
xferlog_std_format=YES

#用户多久不管,服务器会主动断开连接,单位秒
#idle_session_timeout=600

#数据连接超时
#data_connection_timeout=120

#以 ftpsecure 作为此一服务执行者的权限。
#因为 ftpsecure 的权限相当的低,因此即使被入侵,入侵者仅能取得nobody 的权限喔!
#nopriv_user=ftpsecure

#异步停用,由客户发起
#async_abor_enable=YES

#使用ascii格式上传文件
#ascii_upload_enable=YES

#使用ascii格式下载文件
#ascii_download_enable=YES

#欢迎词
#ftpd_banner=Welcome to blah FTP service.

#以anonymous用户登录时候,是否禁止掉名单中的emaill密码。
#deny_email_enable=YES

#以anonymous用户登录时候,所禁止emaill密码名单。
#banned_email_file=/etc/vsftpd/banned_emails

#限制用户只能在自己的目录活动
chroot_local_user=YES

#例外名单,如果是YES的话,这个有点怪,不懂别乱开,上面的选项会跟这个名单反调(会被上面的选项影响)。
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list

#是否允许使用ls -R等命令
ls_recurse_enable=NO

#监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务。
listen=YES

#监听ipv6端口,还没普及呢!
# listen_ipv6=YES

#pam模块的名称,放置在 /etc/pam.d/vsftpd ,认证用
pam_service_name=vsftpd

#使用允许登录的名单
userlist_enable=YES

#限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪~!
userlist_deny=NO

#允许 限制在自己的目录活动的用户 拥有写权限
allow_writeable_chroot=YES

#Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性。
tcp_wrappers=YES

关键配置:

anonymous_enable=NO    # 是否允许匿名访问
local_enable=YES      # 是否允许使用本地帐户进行 FTP 用户登录验证
local_umask=022      # 设置本地用户默认文件掩码022
chroot_local_user=YES   # 是否限定用户在其主目录下(NO 表示允许切换到上级目录)
#chroot_list_enable=YES # 是否启用限制用户的名单(注释掉为禁用)
chroot_list_file=/etc/vsftpd/chroot_list # 用户列表文件(一行一个用户)
allow_writeable_chroot=YES # 如果启用了限定用户在其主目录下需要添加这个配置,解决报错 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
xferlog_enable=YES     # 启用上传和下载的日志功能,默认开启。
use_localtime=YES     # 是否使用本地时(自行添加)
userlist_enable=YES 

c chroot_local_user=YES chroot_local_user=NO
chroot_local_user=YES 1. 所有用户都被限制在其主目录下
2. 使用 chroot_list_file 指定的用户列表,这些用户作为“例外”,不受限制
1. 所有用户都不被限制其主目录下
2. 使用 chroot_list_file 指定的用户列表,这些用户作为“例外”,受到限制
chroot_local_user=NO 1. 所有用户都被限制在其主目录下
2. 不使用 chroot_list_file 指定的用户列表,没有任何“例外”用户
1. 所有用户都不被限制其主目录下
2. 不使用 chroot_list_file 指定的用户列表,没有任何“例外”用户

3、添加用户和密码

# 添加用户 ftpuser 
# -d:指定用户主目录 
# -s:指定用户所用的shell
useradd  -d /home/  -s  /bin/bash username

#设置密码
passwd username

# -r:主目录及文件一并删除
userdel -r username

4、编辑/etc/vsftpd/user_list 

这个是运行登录ftp的名单 
在文件最后加上 username

5、(避免影响,能连上再开) 关闭selinux和iptables

setenforce 0
service firewalld stop
service iptables stop

6、启动服务与设置开机启动ftp 

systemctl start vsftpd.service 
systemctl enable vsftpd.service

特别注意: 
设置了 chroot_local_user=YES 后,用户不能登录 
原因是 没设置 allow_writeable_chroot=YES

然后用 FileZilla 折腾吧!。加密方式:普通FTP,我被坑过好几次了! 

FTP有两种模式: 
1、主动模式(port) 

port_enable=YES  # 是否开启 Port 模式
connect_from_port_20=YES # 当 Port 模式开启的时候,是否启用默认的 20 端口监听
ftp_data_port=port_number # Port 模式下 FTP 数据传输所使用的端口,默认值为20

  1. 客户用 客户端口A 连接 FTP服务 的 21 端口。
  2. 客户 主动扔一个 客户端口B 给FTP服务器。
  3. 告诉服务器说:“服务器啊,你以后就往 客户端口B 传输数据,我以后就往你的 服务器20端口 传输数据”。

其次解析:
    FTP服务的port模式 只有两个端口:20 和 21。
        服务器20端口:负责传输数据
        服务器21端口:负责沟通与控制

    客户端口:
        客户端口A:一个任意的非特权端口(端口号大于1024)
        客户端口B:等于 客户端口A + 1

2、被动模式(PASV) 

pasv_enable=YES # 是否允许数据传输时使用PASV模式(默认值为 YES)
pasv_min_port=port port_number # PASV 模式下,数据传输使用的端口下界(0 表示任意。默认值为 0)把端口范围设在比较高的一段范围内,比如 50000-60000,将有助于安全性的提高.
pasv_max_port=port_number # PASV 模式下,数据传输使用的端口上界(0 表示任意。默认值为 0)
pasv_promiscuous=NO # 是否屏蔽对 PASV 进行安全检查,默认值为 NO(当有安全隧道时可禁用)
pasv_address # PASV 模式中服务器传回的 ip 地址。默认值为 none,即地址是从呼入的连接套接字中获取。

1、客户端打开两个端口: 客户端口A、 客户端口B 
2、客户 用 客户端口A 连接 FTP服务21端口 
3、提交PASV命令,服务器 返回一个 FTP服务端口B 

4、客户 用 客户端口B 连接 FTP服务端口B

其次解析:
    FTP服务的PASV模式 只有两个端口:FTP服务端口B 和 21。
        服务器B端口: 负责传输数据   -----------   一个任意的非特权端口(端口号大于1024)
        服务器21端口:负责沟通与控制

    客户端口:
        客户端口A:一个任意的非特权端口(端口号大于1024)
        客户端口B:等于 客户端口A + 1

主动模式优点:如果设置防火墙的时候,我只需要开放 20 和 21端口即可了。 

被动模式优点:服务器拥有主导权。令客户连接我的哪个端口就哪个端口,比较安全。

如果是默认安装vsftpd的话,以下是一些文件的位置约定:
/usr/sbin/vsftpd ---- VSFTPD的主程序
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd/vsftpd.conf ---- 主配置文件
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/var/ftp ---- 匿名用户主目录
/var/ftp/pub ---- 匿名用户的下载目录

如果要更改默认下载目录,修改/etc/vsftpd/vsftpd.conf,加入如下三行:
local_root=/
chroot_local_user=YES
anon_root=/

local_root表示使用本地用户登录到ftp时的默认目录
anon_root表示匿名用户登录到ftp时的默认目录

如果是默认安装vsftpd的话,以下是一些文件的位置约定:
/usr/sbin/vsftpd ---- VSFTPD的主程序
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd/vsftpd.conf ---- 主配置文件
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/var/ftp ---- 匿名用户主目录
/var/ftp/pub ---- 匿名用户的下载目录

如果要更改默认下载目录,修改/etc/vsftpd/vsftpd.conf,加入如下三行:
local_root=/
chroot_local_user=YES
anon_root=/

local_root表示使用本地用户登录到ftp时的默认目录
anon_root表示匿名用户登录到ftp时的默认目录


君子慎独,不欺暗室。卑以自牧,含章可贞。