一、 前言
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/ftpusers:ftpusers中的用户不允许通过ftp登录
/etc/vsftpd/user_list:这也是一个控制是否允许用户ftp登录的列表,取决于配置文件中userlist_deny的值
/var/ftp/pub:匿名用户默认的目录
/var/log/vsftpdlogfile:FTP的登录日志及用户的操作命令日志均在此文件可以记录
三、 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
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()
当配置了chroot,而anonymous在chroot_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传输的问题,默认并不是加密传输,是明文传输,下面是用户登录时的用户名及密码信息:
因此当传输敏感信息时一定要采用加密传输,可以配置VSFTPD+SSL的方式进行,本篇不再做说明,后续有时间再进行测试。