Vsftp两三事

本文主要讲解Linux系统下vsftp常见的一些知识点

安装

Vsftp的安装比较简单,Linux系统使用yum直接就能安装完成,因此安装步骤基本不必要担心,最重要也是最必要的就是配置文件,在编辑配置文件之前,首先你要确定选用的模式、用户的登录方式,这将有助于后续进行正确的配置。

模式选择

Ftp服务器有两种模式:主动(port)模式和被动(pasv)模式,两种模式你可以理解为相对于ftp服务器,ftp服务器主动去连接客户端的数据端口则为主动模式,ftp服务器被动接受客户端的数据连接则为被动模式,两种模式均有命令链路和数据链路。

主动模式

下面这张图将有助你进一步理解主动模式(绿色为命令链路,红色为数据链路)
在这里插入图片描述
整个流程可以理解为如下步骤:

  1. 客户端使用端口N连接FTP服务器的命令端口21,建立连接并告诉服务端自己开启的数据端口为N+1;
  2. 服务端使用数据端口20,主动连接客户端的N+1端口以建立数据连接并进行数据传输

主动模式开启的端口

角色端口备注
客户端N命令端口, N>1024
客户端N+1数据端口,N+1与N可能是相近的两个端口
服务端21命令端口
服务端20数据端口

被动模式

下面这张图将有助你进一步理解被动模式(绿色为命令链路,红色为数据链路)
在这里插入图片描述
整个流程可以理解为如下步骤:

  1. 客户端命令端口N连接服务端命令端口21,并发送PASV命令,告诉服务端用“被动模式”,服务端开启一个数据端口P,通过命令链路将P端口返回客户端
  2. 客户端的数据端口N+1连接服务器的数据端口P,并建立数据连接

被动模式开启的端口

角色端口备注
客户端N命令端口, N>1024
客户端N+1数据端口,N+1与N可能是相近的两个端口
服务端21命令端口
服务端P数据端口,随机端口

1、主动模式对服务端的管理有利,对客户端的管理不利,服务端只需要管理20、21端口,服务端试图主动连接客户端的数据端口N+1时,可能会被客户端的防火墙拦截掉,因此客户端的防火墙也需要作相应的管理
2、被动模式对服务端的管理不利,对客户端的管理有利,服务端需要管理21、P端口,而P端口是随机端口,此时相对于客户端就不需要作端口管理
如果你是一个生产系统管理员,我建议你选择被动模式,因为此时的你对服务端的管控可能会更强

用户登录

Ftp的登录方式主要有如下三种模式,包括匿名用户、本地用户、虚拟用户方式,三种用户的选择也需要你格外注意,不同的选择将直接影响配置文件的配置项与后续用户的管控方式

匿名用户

匿名用户的登录方式实际就是不需要密码直接就能登录,生产环境不建议选择此种模式

本地用户

主机的系统用户,存在于/etc/passwd文件中的用户,用户比较少且不涉及到强相关的上传下载权限时使用本地用户是一种好的选择

虚拟用户

通过一个系统账号进行映射,虚拟用户不存在/etc/passwd文件中,相对于本地用户更安全,适用于用户比较多且权限控制比较复杂的情况

配置项

通过前面的讲解,我相信你一定选定了服务器模式与用户登录模式,接下来就需要编辑ftp的配置项进行配置文件的生成了,因此各配置项你必须了解他们都代表着什么含义

参数含义默认值备注
write_enable是否对登录用户开启写权限NO
local_enable是否允许本地用户登录FTP服务器NO
anonymous_enable是否允许匿名用户登录FTP服务器YES
anon_upload_enable是否允许匿名、虚拟用户上传文件NO
anon_mkdir_write_enable是否允许匿名、虚拟用户创建目录NO
anon_other_write_enable是否允许匿名、虚拟用户除了上传、创建权限外,还有删除、更名权限NO
local_root设置本地用户登录后所在的目录
local_umask设置本地用户新增文档的umask022
chroot_list_enable是否启用chroot_list_file配置项指定的用户列表文件NO
chroot_list_file指定用户列表文件,用于控制哪些用户可以切换到FTP站点根目录的上级目录
chroot_local_user指定用户列表文件中的用户,是否允许切换到上级目录NO
tcp_wrappers是否与tcp wrapper相结合YES
userlist_enableuser_list文件是否生效
userlist_denyuser_list文件中的用户是否允许访问
userlist_file指定user_list文件路径
pam_service_namePAM所使用的名称
pasv_enable是否启用PASV工作模式YES
pasv_max_port被动模式下,数据连接的上限端口0
pasv_min_port被动模式下,数据连接的下限端口0
anon_world_readable_only是否允许匿名用户下载可读文件YES
anon_upload_enable是否允许匿名用户上传文件NO
anon_mkdir_write_enable是否允许匿名用户创建目录NO
anon_other_write_enable是否允许匿名用户除了上传文件、创建目录,还有删除和更改权限NO

说在配置前

最后还有一点,我觉得你需要关注,在配置完并兴奋的启动成功后,发现跟想的不太一样,用户登录不了,那么下面的内容很可能就是你需要关注的

白名单与黑名单

[root@localhost vsftpd]# ll
total 40
-rw-------. 1 root root   125 Oct 30  2018 ftpusers
-rw-------. 1 root root   302 Mar 30 05:37 user_list
-rw-------. 1 root root   599 Mar 30 05:41 vsftpd.conf

在ftp的主目录下,你会发现有ftpuser和user_list两个文件,当你好奇的打开时,会发现里面都是一大堆的用户,那么这两个文件你就可以理解为白、黑名单了

  1. ftpuser永远都是黑名单,存在于ftpuser文件中的用户不被允许登录,黑名单的优先级比白名单要高
  2. userlist_enable配置项被设置为YES,user_list文件才会被激活
  3. userlist_enable=YES,userlist_deny=YES,user_list文件是个黑名单
  4. userlist_enable=YES,userlist_deny=NO,user_list文件是个白名单

配置

被动模式&&本地用户

配置文件参考

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
ftpd_banner=This Is A FTP service
chroot_local_user=YES
chroot_list_enable=NO
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
pasv_min_port=40000
pasv_max_port=40088
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
local_root=/data/ftpdata

被动模式&&虚拟用户

虚拟用户的设置可以按照下面的步骤进行:

  1. 创建本地用户用于虚拟用户映射
    虚拟用户文件采用用户名+密码的方式填入
[root@localhost vsftpd]# useradd -s /sbin/nologin virtual
[root@localhost vsftpd]# vim vftpuser 
zhagnsan
111111
lisi
111111      
  1. 将虚拟用户文件转换为数据库加密文件
[root@localhost vsftpd]# db_load -T -t hash -f vftpuser vftpuser.db  
[root@localhost vsftpd]# ll vftpuser.db 
-rw-------. 1 root root 12288 Mar 30 11:14 vftpuser.db
  1. 新建PAM认证文件
[root@localhost pam.d]# vim /etc/pam.d/vftpuser
account     required     pam_userdb.so     db=/etc/vsftpd/vftpuser       //此处的vftpuser是vftpuser.db,.db可以省略,而非vftpuser
auth        required     pam_userdb.so     db=/etc/vsftpd/vftpuser
  1. 配置文件
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
ftpd_banner=This Is A FTP service
chroot_local_user=YES
chroot_list_enable=NO
listen=NO
listen_ipv6=YES
pam_service_name=vftpuser
pasv_min_port=40000
pasv_max_port=40088
guest_enable=YES
guest_username=virtual
anon_world_readable_only=NO
user_config_dir=/etc/vsftpd/vftpuser_dir
  1. 虚拟用户的权限
[root@localhost vftpuser_dir]# vim zhangsan
write_enable=YES
anon_world_readable_only=no  //设置为YES表示文件的其他人必须有读的权限才允许下载,设置为NO,表示映射用户(属主)对文件有读权限即可下载
anon_upload_enable=YES   //上传权限
anon_mkdir_write_enable=YES  //创建目录权限
anon_other_write_enable=YES   //删除更名权限
anon_umask=022        
local_root=/data/dataftp/zhangsan

每个虚拟用户一个权限文件,文件名为虚拟用户名,单独设置虚拟用户的各项配置与权限

防火墙设置

完成上面的配置后,作为生产系统的ftp服务器,你可能还需要完成防火墙的设置,以确保ftp能够被授权的主机访问,以下在centos6和7上测试通过,其他系统未作测试

centos6

centos6中有两种配置方法:

  1. 使用PASV端口设置

iptables -A INPUT -s source_ip -p tcp -m state --state NEW -m multiport --dports 21,pasv_min_port:pasv_max_port -j ACCEPT

  1. 使用防火墙自带的ftp模块

1)、手动装载模块
modprobe nf_conntrack_ftp
2)、配置防火墙,不需要指定PASV端口
iptables -A INPUT -s source_ip -p tcp -m state --state NEW -m multiport --dports 21 -j ACCEP

centos7

[root@localhost zones]# vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>  
<service name="ftp"/>     //新增ftp配置
</zone>

上面的步骤引用了centos 7系统已经定义好的ftp.xml 文件

最后,我想说上面的内容也没能面面俱到,只是总结了一些容易犯迷糊的地方,希望对你有帮助,如果有什么不对,欢迎热心的你批评指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值