vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
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协议中,控制连接均有客户端发起,而数据连接有两种工作方式)
1.客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口
2.服务器的21号端口给予客户端响应数据流
3.服务器打开20号端口去连接客户端的N+1的端口
4.客户端给予响应,数据开始传输
1.客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口
2.服务器的21号端口给予客户端响应
3.服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口
4.服务器给予响应,于是数据开始传输
需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.1.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26
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
在FTP服务器的管理中,无论对本地用户还是匿名用户,对于FTP服务器资源的使用都需要进行控控制,避免由于负担过大造成FTP服务器运行异常,可以添加以下配置项对FTP客户机使用FTP服务器资源进行控制:
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里为白名单
主动模式时:
#iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#iptables -A OUTPUT -p tcp -m tcp –sport 20 -j ACCEPT
被动模式时:
编辑/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”模块。
#iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#iptables -A INTPUT -p tcp -m tcp –sport 21 -j ACCEPT
共享给匿名
#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
1.添加虚拟用户口令文件
#vim /etc/vsftpd/vsftpduser.txt
添加虚拟用户名和密码,一行用户名,一行密码
myftp
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
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.建立虚拟用户要访问的目录并设置权限
#useradd -d /home/myftp -s /sbin/nologin myftp
#chmod 777 /home/myftp
在 vsftpd.conf 添加以下参数配置项:
guest_enable=YES
guest_username=myftp
5.对不同虚拟用户设置不同权限
#mkdir /etc/vsftpd/vsftpd_user_conf
#vim /etc/vsftpd/vsftpd_user_conf/myftp (建立用户单独配置文件,文件名就是用户名)
local_root=/home/myftp/myftp #这里的虚拟用户目录可以根据实际情况修改
write_enable=YES
virtual_use_local_privs=YES #虚拟用户具有写权限(上传、下载、删除、重命名)
在 vsftpd.conf 添加以下参数配置项:
user_config_dir=/etc/vsftpd/vsftpd_user_conf
6.重启服务
#service vsftd restart
7.测试
#yum install lftp -y
#lftp [email protected]