vsftp服务的简介与配置

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

一. ftp

FTP 是File Transfer Protocol(文件传输协议)的英文简称,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的”三次握手”的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。采用FTP协议可使 Internet用户高效地从网上的FTP服务器下载大信息量的数据文件,将远程主机上的文件拷贝到自己的计算机上。以达到资源共享和传递信息的目的。由于FTP的使用使得Internet上出现大量为用户提供的下载服。Internet成为了一个巨型的软件仓库。FTP在文件传输中还支持断点续传功能,可以大幅度地减小CPU和网络带宽的开销。

FTP会话时包含了两个通道,一个叫控制通道,端口号21;一个叫数据通道,端口号20。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。

简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式。(FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式)

ps:主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。

1.主动模式的工作原理(PORT模式)

1.客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口
2.服务器的21号端口给予客户端响应数据流
3.服务器打开20号端口去连接客户端的N+1的端口
4.客户端给予响应,数据开始传输

2.被动模式的工作原理(PASV模式)

1.客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口
2.服务器的21号端口给予客户端响应
3.服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口
4.服务器给予响应,于是数据开始传输
需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.1.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26

二.vsftpd配置

vsftp传输方式默认是PORT模式

port_enable=YES|NO

vsftp提供3种远程的登录方式:
(1)匿名登录方式
  就是不需要用户名,密码。就能登录到服务器电脑里面
(2)本地用户方式
  需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在你linux系统里面,已经有的用户。
(3)虚拟用户方式
  同样需要用户名和密码才能登录。但是和上面的区别就是,这个用户名和密码,在你linux系统中是没有的(没有该用户帐号)

查询是否安装Vsftp

#rpm -q vsftpd

安装

#yum install -y vsftpd

*匿名用户根路径
ubuntu: /srv/ftp
redhat: /var/ftp

设置共享出去的目录的权限

#chmod 777 /vat/ftp/pub
注:根目录不可设置为777权限(rwx),否则vsftpd将禁止访问

配置文件

/etc/vsftpd/vsftpd.conf
ubuntu :/etc/vsftpd.conf
具体参数解释可以
#man vsftpd.conf

允许匿名用户上传下载

vsftpd配置文件默认不允许匿名用户,要想允许只要打开配置文件里的

anonymous_enable=YES    #允许匿名访问
anon_upload_enable=YES  #允许匿名用户上传下载
anon_mkdir_write_enable=YES   #允许匿名用户修改

若要允许匿名用户重命名等修改,打开

anon_other_write_enable=YES  

普通用户

#useradd -d /home/myftp -s /sbin/nologin myftp
#chmod -R 777 /home/myftp

限制最大连接数和传输速率

在FTP服务器的管理中,无论对本地用户还是匿名用户,对于FTP服务器资源的使用都需要进行控控制,避免由于负担过大造成FTP服务器运行异常,可以添加以下配置项对FTP客户机使用FTP服务器资源进行控制:

  1. max_client 用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制。例如max_client=100表示FTP服务器的所有客户端最大连接数不超过100个。
  2. max_per_ip用于设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制。例如max_per_ip=5表示同一IP地址的FTP客户机与FTP服务器建立的最大连接数不超过5个。
  3. local_max_rate 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s.
  4. anon_max_rate 用于设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制。例如ano_max_rate=200000,表示FTP服务器的匿名用户最大传输速率设置为200KB/s.
权限设置

1.设置禁止登录的用户账号
当vsftpd.conf配置文件中包括以下设置时,user_list和ftpusers文件中的用户账号都被禁止进行FTP登录(默认root不可访问):

userlist_enable=YES
userlist_deny=YES 

2.设置禁止某网段进行FTP登录
配置了里默认打开了

tcp_wrappers=YES                 #是否使用些方式作为访问控制方式

然后就可用/etc目录中的hosts.allow和hosts.deny两个文件设置tcp_wrappers的访问控制(前者设置允许访问记录,后者设置拒绝访问记录,同时设置allow优先于deny)。

#vim /etc/hosts.deny

     vsftpd: 192.168.172.0/24

3.为了安全我们需要把用户禁锢在自己家目录,只允许访问指定的目录,而其他任何目录都不能访问,则打开

chroot_local_user=YES                      

和这个选项组合,可禁止一个用户列表切换目录

chroot_list_enable=YES                     #开启禁锢列表访问
chroot_list_file=/etc/vsftpd/chroot_list   #开启禁锢列表文件

三个选项同时开启则chroot_list里为白名单

三.Selinux和iptables

1.iptables设置

主动模式时:

#iptables -I INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#iptables -I OUTPUT -p tcp -m tcp –sport 21 -j ACCEPT
#iptables -I INPUT -p tcp -m tcp –dport 20 -j ACCEPT
#iptables -I OUTPUT -p tcp -m tcp –sport 20 -j ACCEPT
#service iptables save

被动模式时:
编辑/etc/sysconfig/iptables-config文件,添加以下两行:

IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"

两行内容的位置关系不要搞反了。如果将”ip_nat_ftp”放到前面是加载不到的。如果你的ftp服务是过路由或者防火墙(即内网映射方式一定需要此模块)。以上等同于在加载iptables之前运行modprobe命令加载”ip_nat_ftp”和”ip_conntrack_ftp”模块。ip_conntrack 是状态检测机制,state 模块要用到 。

#iptables -I INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#iptables -I INTPUT -p tcp -m tcp –sport 21 -j ACCEPT

处于server

#iptables -I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

处于client

#iptables -I OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

2.Selinux

共享给匿名
#chcon -R -t public_content_t /var/ftp
设置的FTP目录可以上传文件
#chcon -t public_content_rw_t /var/ftp/pub

查看相关规则

#getsebool -a  | grep ftp

设置规则

FTP用户可以访问自己的家目录
#setsebool -P ftp_home_dir=1
允许匿名用户写入权限
#setsebool -P allow_ftp_anon_write=1
允许匿名用户上传文件
#setsebool -Pallow_ftpd_full_access=1 

四.vsftpd虚拟用户

1.添加虚拟用户口令文件

#vim /etc/vsftpd/vsftpduser.txt
添加虚拟用户名和密码,一行用户名,一行密码

my2ftp
123456
otherftp
123456

2.生成虚拟用户口令认证文件
首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。

#rpm –qa |grep db4-utils
若没有则进行安装,下面使用db_load命令生成虚拟用户口令认证文件。
#db_load -T -t hash -f /etc/vsftpd/vsftpduser.txt /etc/vsftpd/vsftpduser.db
记好密码后可把vsftpduser.txt删除
#rm -rf /etc/vsftpd/vsftpduser.txt

3.编辑vsftpd的PAM认证文件(添加两行,其他注释)

#vim /etc/pam.d/vsftpd

auth required pam_userdb.so db=/etc/vsftpd/vsftpduser
account required pam_userdb.so db=/etc/vsftpd/vsftpduser

4.建立虚拟用户要访问的目录并设置权限

#mkdir /var/pub/my2ftp
#chmod -R 777 /var/pub/my2ftp

5.对不同虚拟用户设置不同权限

#mkdir /etc/vsftpd/vsftpd_user_conf
#vim /etc/vsftpd/vsftpd_user_conf/my2ftp (建立用户单独配置文件,文件名就是用户名)

local_root=/var/pub/my2ftp #这里的虚拟用户目录可以根据实际情况修改(若指定目录不存在,则默认上传路径为虚拟用户的宿主用户的家目录)
write_enable=YES
virtual_use_local_privs=YES #虚拟用户具有写权限(上传、下载、删除、重命名)

相关参数:

当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。

当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。

6.修改主配置文件

在 vsftpd.conf 添加以下参数配置项:

guest_enable=YES  #设定启用虚拟用户功能
guest_username=test  #指定虚拟用户的宿主用户,CentOS中已经有内置的test用户了
user_config_dir=/etc/vsftpd/vsftpd_user_conf

7.重启服务

#service vsftd restart

8.测试

#yum install lftp -y
#lftp my2ftp@192.168.173.140

tips:
用windows连接vsftpd服务器时出现425的报错,无法使用dir或ls,最简单的方式是关闭windows防火墙。
配置文件每行的值后面都不要有空格,否则会报错(500 OOPS: bad bool value in config file for: virtual_use_local_privs)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值