Vsftpd

Vsftpd

Vsftpd说明

vsftpd 是一个 UNIX 类操做系统上运行的服务器的名字,它能够运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持不少其余的 FTP 服务器不支持的特征。
vsftpd 的名字表明"very secure FTP daemon", 安全是它的开发者 Chris Evans 考虑的首要问题之一。
好比:linux

  • 很是高的安全性需求
  • 带宽限制
  • 良好的可伸缩性
  • 建立虚拟用户的可能性
  • IPv6支持
  • 中等偏上的性能
  • 分配虚拟 IP 的可能性
  • 高速

    FTP介绍

    FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。shell

  • 控制通道:控制通道是和FTP服务器进行沟通的通道,链接FTP,发送FTP指令都是经过控制通道来完成的。
  • 数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。

FTP协议中,控制链接均有客户端发起,而数据链接有两种工做方式:PORT方式和PASV方式数据库

PORT模式(主动方式)

FTP 客户端首先和FTP Server的TCP 21端口创建链接,经过这个通道发送命令,客户端须要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端经过本身的TCP 20端口发送数据。 FTP server必须和客户端创建一个新的链接用来传送数据。centos

PASV模式(被动方式)

在创建控制通道的时候和PORT模式相似,当客户端经过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口而且通知客户端在这个端口上传送数据的请求,而后FTP server 将经过这个端口进行数据的传送,这个时候FTP server再也不须要创建一个新的和客户端之间的链接传送数据。
若是从C/S模型这个角度来讲,PORT对于服务器来讲是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤为是在使用防火墙的企业里,这一点很是关键,若是设置错了,那么客户将没法链接。安全

Vsftpd模式

vsftpd运行有两种模式,在RPM包管理的系重审统,大可能是由Fedora/Redhat 开发而来,对于这样的系统有xinted服务器一说;对于非RPM包管理的系统,通常没有xinted这一说。为了保证本文档的统一,咱们都不要用xinetd模式,而用initd运行模式来启动和管理服务器,也就是独立运行模式。
像其它守护程序同样,vsftpd提供了standalone和inetd(inetd或xinetd)两种运行模式。简单解释一下, standalone一次性启动,运行期间一直驻留在内存中,优势是对接入信号反应快,缺点是损耗了必定的系统资源,所以常常应用于对实时反应要求较高的专业FTP服务器。inetd偏偏相反,因为只在外部链接发送请求时才调用FTP进程,所以不适合应用在同时链接数量较多的系统。此外,inetd模式不占用系统资源。除了反应速度和占用资源两方面的影响外,vsftpd还提供了一些额外的高级功能,如inetd模式支持per_IP(单一IP)限制,而 standalone模式则更有利于PAM验证功能的应用。服务器

Vsftpd配置文件

文件 说明
/etc/vsftpd/vsftpd.conf 主配置文件
/usr/sbin/vsftpd Vsftpd的主程序
/etc/pam.d/vsftpd PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)
/etc/vsftpd/ftpusers 禁止使用vsftpd的用户列表文件。记录不容许访问FTP服务器的用户名单,管理员能够把一些对系统安全有威胁的用户帐号记录在此文件中,以避免用户从FTP登陆后得到大于上传下载操做的权利,而对系统形成损坏。(注意:linux-4中此文件在/etc/目录下)
/etc/vsftpd/user_list 禁止或容许使用vsftpd的用户列表文件。这个文件中指定的用户缺省状况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅容许user_list中指定的用户访问FTP服务器。(注意:linux-4中此文件在/etc/目录下)
/var/ftp 匿名用户主目录;本地用户主目录为:/home/用户主目录,即登陆后进入本身家目录
/var/ftp/pub 匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后没法删除)

Vsftpd主配置文件详细说明

首先来简化一下主配置文件:session

[root@centos7 ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}            #备份主配置文件
[root@centos7 ~]# egrep "^[a-z]|^#[a-z]" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf

说明app

[root@centos7 ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
说明:是否容许匿名登陆FTP服务器,默认设置为YES容许
local_enable=YES
说明:是否容许本地用户(即linux系统中的用户账号)登陆FTP服务器,默认设置为YES容许本地用户登陆后会进入用户主目录,而匿名用户登陆后进入匿名用户的下载目录/var/ftp/pub
write_enable=YES
说明:是否容许本地用户对FTP服务器文件具备写权限,默认设置为YES容许
local_umask=022
说明:缺省掩码,本地用户默认掩码为077
#anon_upload_enable=YES
说明:是否容许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
#anon_mkdir_write_enable=YES
说明:是否容许匿名用户建立新文件夹
dirmessage_enable=YES
说明:是否激活目录欢迎信息功能;当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息默认状况下,欢迎信息是经过该目录下的.message文件得到的
xferlog_enable=YES
说明:是否让系统自动维护上传和下载的日志文件;默认状况该日志文件为/var/log/vsftpd.log,也能够经过下面的xferlog_file选项对其进行设定
connect_from_port_20=YES
说明:是否设定FTP服务器将启用FTP数据端口的链接请求;ftp-data数据传输,21为链接控制端口
#chown_uploads=YES
说明:设定是否容许改变上传文件的属主,与下面一个设定项配合使用
#chown_username=whoever
说明:设置想要改变的上传文件的属主
#xferlog_file=/var/log/xferlog
说明:设定系统维护记录FTP服务器上传和下载状况的日志文件
xferlog_std_format=YES
说明:是否以标准xferlog的格式书写传输日志文件
#idle_session_timeout=600
说明:设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒
#data_connection_timeout=120
说明:设置数据链接超时时间
#nopriv_user=ftpsecure
说明:运行vsftpd须要的非特权系统用户,缺省是nobody
#async_abor_enable=YES
说明:是否识别异步ABOR请求。
#ascii_upload_enable=YES
#ascii_download_enable=YES
说明:是否以ASCII方式传输数据。默认状况下,服务器会忽略ASCII方式的请求。
#ftpd_banner=Welcome to blah FTP service.
说明:登陆FTP服务器时显示的欢迎信息
#deny_email_enable=YES
说明:黑名单设置
#banned_email_file=/etc/vsftpd/banned_emails
说明:当上面的deny_email_enable=YES时,能够利用这个设定项来规定哪些邮件地址不可登陆vsftpd服务器
#chroot_local_user=YES
#chroot_list_enable=YES
说明:用户登陆FTP服务器后是否具备访问本身目录之外的其余文件的权限;设置为YES时,用户被锁定在本身的home目录中
#chroot_list_file=/etc/vsftpd/chroot_list
说明:被列入此文件的用户,在登陆后将不能切换到本身目录之外的其余目录
#ls_recurse_enable=YES
说明:是否容许递归查询。默认为关闭,以防止远程用户形成过量的I/O
listen=NO
说明:是否容许监听IPv4
listen_ipv6=YES
说明:设定是否支持IPV6
pam_service_name=vsftpd
说明:设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
userlist_enable=YES
说明: 是否容许ftpusers文件中的用户登陆FTP服务器;若此项设为YES,则user_list文件中的用户容许登陆FTP服务器
tcp_wrappers=YES
说明:是否使用tcp_wrappers做为主机访问控制方式。

配置选项补充

在FTP服务器的管理中,不管对本地用户仍是匿名用户,对于FTP服务器资源的使用都须要进行控控制,避免因为负担过大形成FTP服务器运行异常,能够添加如下配置项对FTP客户机使用FTP服务器资源进行控制:异步

max_client
说明:设置项 用于设置FTP服务器所容许的最大客户端链接数,值为0时表示不限制。例如max_client=100表示FTP服务器的全部客户端最大链接数不超过100个。
max_per_ip
说明:设置项 用于设置对于同一IP地址容许的最大客户端链接数,值为0时表示不限制。例如max_per_ip=5表示同一IP地址的FTP客户机与FTP服务器创建的最大链接数不超过5个。
local_max_rate
说明:设置项 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s.
anon_max_rate
说明:设置项 用于设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制。例如ano_max_rate=200000,表示FTP服务器的匿名用户最大传输速率设置为200KB/s.

FTP返回值含义

数字 含义
110 从新启动标记应答
120 服务在多久时间内ready
125 数据链路端口开启,准备传送
150 文件状态正常,开启数据链接端口
200 命令执行成功
202 命令执行失败
211 系统状态或是系统求助响应
212 目录的状态
213 文件的状态
214 求助的讯息
215 名称系统类型
220 新的联机服务ready
221 服务的控制链接端口关闭,能够注销
225 数据连结开启,但无传输动做
226 关闭数据链接端口,请求的文件操做成功
227 进入passive mode
230 使用者登入
250 请求的文件操做完成
257 显示目前的路径名称
331 用户名称正确,须要密码
332 登入时须要帐号信息
350 请求的操做须要进一部的命令
421 没法提供服务,关闭控制连结
425 没法开启数据链路
426 关闭联机,终止传输
450 请求的操做未执行
451 命令终止:有本地的错误
452 未执行命令:磁盘空间不足
500 格式错误,没法识别命令
501 参数语法错误
502 命令执行失败
503 命令顺序错误
504 命令所接的参数不正确
530 未登入
532 储存文件须要帐户登入
550 未执行请求的操做
551 请求的命令终止,类型未知
552 请求的文件终止,储存位溢出
553 未执行请求的的命令,名称不正确

虚拟用户

虚拟用户是指在FTP服务器上拥有帐号,而且该帐号只能用于文件传输服务的用户,也称做Guest用户。该类用户能够经过输入帐号以及口令来进行受权登陆。登陆入系统后,其登陆目录为指定的目录。通常状况下,该类用户既能够下载也能够上传文件。
vsftpd的虚拟用户采用单独的用户名/口令保存方式,与系统帐号(passwd/shadow)分离,这大大加强了系统的安全性。vsftpd能够采用数据库文件来保存用户/口令,如hash;也能够将用户/口令保存在数据库服务器中,如MySQL等。vsftpd验证虚拟用户,则采用PAM方式。因为虚拟用户的用户名/口令被单独保存,所以在验证时,vsftpd需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正如同匿名用户也须要有一个系统用户ftp同样。固然,guest用户也能够被认为是用于映射虚拟用户。async

实例

匿名用户访问

  • 安装vsftpd
[root@centos7 ~]# yum -y install vsftpd
  • 查看安装状况
[root@centos7 ~]# rpm -qa | grep vsftpd
vsftpd-3.0.2-22.el7.x86_64
  • 启动vsftpd
[root@centos7 ~]# systemctl start vsftpd
[root@centos7 ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
  Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
  Active: active (running) since Mon 2017-11-13 04:13:02 CST; 9min ago
  Process: 1633 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 1634 (vsftpd)
  CGroup: /system.slice/vsftpd.service
          └─1634 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Nov 13 04:13:02 centos7 systemd[1]: Starting Vsftpd ftp daemon...
Nov 13 04:13:02 centos7 systemd[1]: Started Vsftpd ftp daemon.
  • 测试

Vsftpd

虚拟用户访问

  • 建立访问目录
[root@centos7 ~]# mkdir -p /data/user1 /data/user2
[root@centos7 ~]# ls /data/
user1  user2
  • 建立映射用户
[root@centos7 ~]# useradd vsftpd -s /sbin/nologin
  • 生成虚拟用户口令库文件
[root@centos7 ~]# cat > /etc/vsftpd/user_passwd <<EOF
user1
123456
user2
123456
EOF
  • 配置生成vsftpd的认证文件
[root@centos7 ~]# db_load -T -t hash -f /etc/vsftpd/user_passwd /etc/vsftpd/login.db
在/etc/pam.d/vsftpd文件中注释原有条目并添加如下两行:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
  • 建立chroot_list文件
[root@centos7 ~]# echo "vsftpd" > /etc/vsftpd/chroot_list
  • 修改配置文件
[root@centos7 ~]# grep -v "#" /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/user_conf
  • 建立虚拟用户配置目录
[root@centos7 ~]# mkdir -p /etc/vsftpd/user_conf
  • 虚拟用户配置文件
[root@centos7 ~]# cat /etc/vsftpd/user_conf/user1
local_root=/data/user1
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@centos7 ~]# cat /etc/vsftpd/user_conf/user2
local_root=/data/user2
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
  • 重启vsftpd
[root@centos7 ~]# systemctl restart vsftpd
  • 测试

Vsftpd

Vsftpd

Vsftpd

Vsftpd

相关文章
相关标签/搜索