一、    前言

FTP是什么在网上已经有很多的文章进行了详细的介绍,这里就不再特别说明,简单复习一下FTP服务器的关键知识点。FTP服务基于TCP协议,服务器监听在21端口,一个FTP文件传输过程由命令控制进程以及数据传输进程共同完成,基于通信双方谁来发起,可以分为主动模式(PORT)和被动模式(PASV),主动模式下服务器主动打开20端口进行数据传输,而被动模式下服务器开放端口通知到客户端,客户端向该端口发起数据连接。数据传输又分为ASCII文本传输以及二进制传输两种方式,ASCII文本传输顾名思义用于传输文本,而二进制传输时可以确保文件传输双方的序位是正确无误的。

FTP软件众多,在linux下使用最多的应该就是vsftp了,vsftp全称是VerySecure FTP  ,因此该软件的目的就是构建一个“非常安全“的FTP服务器。因为最近使用到FTP,因此这里再记录回顾一下搭建一个安全的FTP服务器的注意事项。

二、    VSFTP安装

1、 直接使用yum源安装;

2、 安装后关键文件说明

/etc/vsftpd/vsftpd.conf vsftpd的配置文件

/etc/vsftpd/ftpusersftpusers中的用户不允许通过ftp登录

/etc/vsftpd/user_list:这也是一个控制是否允许用户ftp登录的列表,取决于配置文件中userlist_deny的值

/var/ftp/pub:匿名用户默认的目录

/var/log/vsftpdlogfileFTP的登录日志及用户的操作命令日志均在此文件可以记录

三、           VSFTP关键文件说明

1、    配置文件vsftpd.conf说明,所有的参数都在这里配置,下面是常见的参数及解释

​https://blog.csdn.net/bluishglc/article/details/42398811​

[root@localhost ~]# egrep -v '^#'/etc/vsftpd/vsftpd.conf

anonymous_enable=YES     //是否启用匿名用户登录

anon_umask=022

local_enable=YES

write_enable=YES

local_umask=022

anon_upload_enable=YES                 //是否启用匿名用户上传权限

anon_mkdir_write_enable=YES          //是否启用匿名用户创建目录的权限

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

dual_log_enable=YES

xferlog_file=/var/log/xferlog

vsftpd_log_file=/var/log/vsftpdlogfile

log_ftp_protocol=yes

xferlog_std_format=YES

chroot_local_user=YES       //全局配置,与chroot_list结合使用

chroot_list_enable=YES              //始终作为全局配置的例外配置

chroot_list_file=/etc/vsftpd/chroot_list //例外的用户列表

allow_writeable_chroot=YES       //配置chroot后允许家目录写的权限

listen=NO

listen_ipv6=YES

local_root=/var/www/html   //配置本地用户的家目录,如果不配置此参数,则以本地用户自己的目录作为家目录

anon_root=/var/ftp/pub     //匿名用户的家目录

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES //程序是否受tcp_wrappers控制,即/etc/hosts.permit/etc/hosts.deny

2、    /etc/vsftpd/ftpusers文件说明

ftpusers中的用户不允许通过ftp登录

3、    /etc/vsftpd/user_list 文件说明

        userlist_deny=NO时,只允许该文件中的用户登录

        userlist_deny=YES时(默认),不允许该文件中的用户登录

4、    /var/ftp/pub:匿名用户默认的目录

5、    /etc/vsftpd/chroot_list chroot用户列表,通过chroot_list_file参数指定,该列表中的用户是否可以跳出自己的根目录还要取决于chroot_local_user以及chroot_list_enable的配置,下面详细说明:

当全局配置chroot_local_user=YES时,所有的用户都被限制在其主目录下,chroot_list_enable例外配置结果如下:

       chroot_list_enable=YES时,使能chroot_list_file指定的用户例外清单,清单中的用户不被限制;

       chroot_list_enable=NO时,不使能chroot_list_file指定的用户例外清单,均被限制;

当全局配置chroot_local_user=NO时,所有的用户都不被限制在其主目录下,chroot_list_enable例外配置结果如下:

       chroot_list_enable=YES时,使能chroot_list_file指定的用户例外清单,清单中的用户被限制;

       chroot_list_enable=NO时,不使能chroot_list_file指定的用户例外清单,均不被限制;

四、           访问控制及权限说明

1、通过外网控制资产的暴露范围,同时在服务器上开启防火墙,可以直接开通FTP协议,也可以做得更加细粒度,把可以访问的源IP也进行限制,这里以只开通FTP协议为例:

firewall-cmd --add-service=ftp--permanent

firewall-cmd –reload

2、设置本地用户

普通用户为本地用户,设置不允许登录服务器,如下面的ftpuser2的配置:

ftpuser1:x:1000:1000::/home/ftpuser1:/bin/bash

ftpuser2:x:1001:1001::/home/ftpuser2:/sbin/nologin

下面useradd 使用-s参数指定SHELL/sbin/nologin

VSFTP服务器搭建及安全性配置_vsftpd

3、匿名用户的配置

匿名用户anonymous默认的目录为/var/ftp/pub,当配置了chroot,而anonymous未在chroot_list时,该目录不能有写的权限,否则提示500报错,而其子目录必须有写的权限才可以在子目录中上传文件:

[root@localhost ~]# ls -dl /var/ftp/

dr-xr-xr-x. 4 root root 26 Dec  4 09:51 /var/ftp/

[root@localhost ~]# ls -l /var/ftp/

total 0

drwx------  2 ftp  ftp   6 Dec  4 09:51 1

drw-r--rwx. 2 root root 28 Dec  4 10:50 pub

否则登录后执行命令报错:

[root@localhost ~]# lftp 192.168.238.137-u anonymous

Password:

lftp anonymous@192.168.238.137:~>ls    

ls: Login failed: 500 OOPS: vsftpd:refusing to run with writable root inside chroot()

VSFTP服务器搭建及安全性配置_ftp服务器_02

当配置了chroot,而anonymouschroot_list时,配置other/var/ftp的写权限(否则报权限错误mkdir: Access failed:550 Create directory operation failed. ),然后在该根目录也可以创建文件。

[root@localhost ~]# ll /var/ftp/ -d

dr-xr-xrwx. 5 root root 35 Dec  4 12:48 /var/ftp/


六、           其他问题及总结

经过上面的配置,VSFTP服务器已经具备了一定的安全性,但是仍然还有几个问题需要引起我们的关注。

1、 VSFTPD的版本问题,VSFTPD不同的版本也存在一些安全问题,目前已知的漏洞可以在exploit-db平台(​https://www.exploit-db.com/​)以及国内的“国家信息安全漏洞共享平台”(https://www.cnvd.org.cn/)进行查询。

2、 VSFTP传输的问题,默认并不是加密传输,是明文传输,下面是用户登录时的用户名及密码信息:

VSFTP服务器搭建及安全性配置_ftp服务器_03

       因此当传输敏感信息时一定要采用加密传输,可以配置VSFTPD+SSL的方式进行,本篇不再做说明,后续有时间再进行测试。