vsftp服务


控制连接:TCP 21 ,用以发送FTP命令信息

数据连接:TCP 20 ,用于上传、下载数据

数据的建立类型:主动模式、被动模式



主动模式:服务器主动发起数据连接

        首先由客户端向服务端的21端口建立FTP控制连接

        当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来链接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接


被动模式:服务器被动等待数据连接

        如果客户机所在网络的防火墙禁止主动模式连接,通常会使用被动模式

        首先由客户端向服务端的21端口建立FTP控制连接

        当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来链接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接


主配置文件 /etc/vsftpd/vsftpd.conf 

用户控制列表文件

/etc/vsftpd/ftpusers    功能等于黑名单

/etc/vsftpd/user_list   按设置不同表示为仅允许和仅拒绝(也可以理解为既可以是黑名单也可以是白名单)



//允许匿名登录

anonymous_enable=YES


//允许本地用户登录

local_enable=YES


//开放本地用户的写权限

write_enable=YES


//设置本地用户的文件生成掩码为022,默认值为077

local_umask=022


//当切换到目录时,显示该目录下的.message隐含文件的内容

//这是由于默认情况下有message_file=.message的 设置

dirmessage_enable=YES


//激活上传和下载日志

xferlog_enable=YES


//启用FTP数据端口的连接请求

connect_from_port_20=YES


//使用标准的ftpd xferlog日志格式

xferlog_std_format=YES


//设置PAM认证服务的配置文件名称,该文件存放 在/etc/pam.d/目录下

#pam_service_name=vsftpd


 pam_service_name=vsftpd

#PAM认证文件(默认存在)


listen_address=192.168.7.2

//设置监听的IP地址


listen_port=21

//设置监听FTP服务的端口号


//是否允许下载文件


max_clients=0

//限制并发客户端连接数


max_per_ip=0

//限制同一IP地址的并发连接数

========================================================================================================

1·匿名用户配置

[root@ns1 ~]# yum -y install vsftpd

[root@ns1 ~]# cd /etc/vsftpd/

[root@ns1 vsftpd]# ls

ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

[root@ns1 vsftpd]# cp vsftpd.conf vsftpd.conf.bak

过滤掉空行和注释行

[root@ns1 vsftpd]# grep ^[^#] vsftpd.conf.bak > vsftpd.conf

[root@ns1 vsftpd]# cat vsftpd.conf

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

为了使匿名用户能够上传,需要在/etc/vsftpd/vsftpd.conf中激活两个配置选项,分别是:

anon_upload_enable=YES

//YES允许匿名用户上传   NO是不允许

anon_mkdir_write_enable=YES

//开 启匿名用户的写和创建目录的权限

若要以上两项设置生效,同时还要求:

write_enable=YES

//匿名用户对文件系统的上传目录具有写权限

添加如下的配置语句:

anon_world_readable_only=NO

//上面的配置语句用于放开匿名用户的浏览权限

创建匿名上传目录:

[root@ns1 vsftpd]# mkdir /var/ftp/yongshi

修改上传目录的权限:

[root@ns1 vsftpd]# chmod o+w /var/ftp/yongshi

[root@ns1 vsftpd]# service vsftpd restart

关闭 vsftpd:                                              [确定]

为 vsftpd 启动 vsftpd:                              [确定]

设置连接服务器后的欢迎信息

为了使用户连接服务器后显示信息,vsftpd提供了两个选项,分别是:

ftpd_banner

banner_file

例如:可以设置如下的ftpd_banner选项的值:

ftpd_banner=Welcome to Smartraining FTP service.

即:用户连接服务器后显示信息“Welcome to Smartraining FTP service.”。

也可以设置如下的banner_file选项的值:

banner_file=/var/vsftpd_banner_file

即:用户连接服务器后显示文件/var/vsftpd_banner_file中的信息。

注意:(1)如果设置了ftpd_banner的值,将覆盖vsftpd默认的服务器连接后的信息。

      (2)如果ftpd_banner和banner_file同时设置,那么banner_file将覆盖ftpd_banner的设置。




访问ftp服务方式有三种

1.windows中打开任意窗口  

spacer.gifwKiom1fMEDXRYSyhAABQdij4P1U214.png-wh_50

2.第三方访问工具 

安装ftp客户端

[root@ns1 yongshi]# rpm -ivh /media/Packages/ftp-0.17-54.el6.x86_64.rpm

spacer.gifwKioL1fMEGvR78mYAABtz1VT-dQ149.png-wh_50

3.Windows下的cmd命

用Windows的cmd命令窗口连接 (e:表示进入到e盘e大小写都可)

命令ftp IP

-help  获取帮助

-get   下载

-mget  下载一批文件

-put   上传  

-mput  上传一批文件

-quit 退出

spacer.gif

wKiom1fMEJXhJDmAAAAwdvJYS0c223.png-wh_50

wKioL1fMEJbSLvS3AADZWsQkhcg779.png-wh_50

spacer.gif

===================================================================================================

2·配置基于本地用户的访问控制


本地用户访问时默认进入的是自己的家目录

local_root=/var/ftp

#设置本地用户的ftp根目录,当前所有用户登录后都会进入/var/ftp但是可以随意切换进入其他目录,这样就可以随意下载服务器中的文件例如passwd和groub.conf等这样非常不安全(注意目录权限)

所以要把用用户限制在家目录

chroot_local_user=YES

#开启用户目录限制(只有此行,把所有用户都限制在用户主目录中)

如果想限制指定的用户则需要执行以下操作:

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

#写入/etc/vstpd/chroot_list文件中的用户可以访问任何目录,其他用户限制在用户主目录

要配置基于本地用户的访问控制,可以通过修改vsftpd的主配置文件/etc/vsftpd.conf来进行, 有两种限制方法:

1)限制指定的本地用户不能访问,而其他本地用户可访问

例如下面的设置:

userlist_enable= YES

userlist_deny=YES

userlist_file=/etc/vsftpd/user_list

使文件/etc/vsftpd.user_list中 指定的本地用户不能访问FTP服务器,而其他本地用户可访问FTP服务器。

限制指定的本地用户可以访问,而其他本地用户不可访问

例如下面的设置:

userlist_enable= YES

userlist_deny= NO

userlist_file= /etc/vsftpd/user_list

使文件/etc/vsftpd/user_list中 指定的本地用户可以访问FTP服务器,而其他本地用户不可以访问FTP服务器。

注意:对于userlist_enable可以这样理解:

如果userlist_enable=YES,表示vsftpd将从userlist_file选项给出的文件名中装载一个含有用户名的清单。然后再读取userlist_deny的值来确定vsftpd.user_list中的用户是否允许访问FTP服 务器。如果用户不能访问,将在输入用户口令前被拒绝。

命令窗口

注:(1)命令行模式只能下载文件不能下载目录

        (2)用命令tcpdump -i eth0 -nnX port 21 可以监听21这个端口可以截获用户密码


===================================================================================================================

3·配置虚拟用户访问控制

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

 vim /etc/vsftpd/vuser.txt

格式为用户名单独一行   密码单独一行

     cangls# 用户名

     123#    密码    

     bols#   用户名    

     123#    密码

2)生成虚拟用户口令认证文件

 yum -y install db4-utils

#如果没有安装口令认证命令,需要安装

 

db_load  -T  -t  hash  -f  /etc/vsftpd/vuser.txt  /etc/vsftpd/vuser.db

 -T换算   -t指定算法为hash  -f指定文件名

#把文本文档转变为认证的数据库

3)编辑vsftpd的PAM认证文件

vi /etc/pam.d/vsftpd

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser.db

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser.db   #.db可以不写

#注释掉其他的行,加入上面两行即可

#注释掉其他行,可以禁止本地用户登录,因为本地用户登录时的验证依然依赖这个文件

这里要注意的是路径有时候是/lib64/而不是/lib

把文件里的行全注释可以在末行模式下输入以下命令(假设文件有10行):1,10s/^/#/g 

4)建立本地映射用户并设置宿主目录权限

useradd -d /home/vuser -s /sbin/nologin vuser

#此用户不需要登录,只是映射用户

#用户名必须和下一步配置文件中一致

chmod 755 /home/vuser

5)修改配置文件

vi /etc/vsftpd/vsftpd.conf 

 guest_enable=YES

#开启虚拟用户

 guest_username=vuser

#FTP虚拟用户对应的系统用户

 pam_service_name=vsftpd

#PAM认证文件(默认存在)

6)重启vsftpd服务并测试

service vsftpd restart

#此时虚拟用户可以登录,查看,下载,不能上传

#默认上传文件的位置是宿主用户的家目录

#权限使用的是匿名用户权限进行管理

7)调整虚拟用户权限

vi /etc/vsftpd/vsftod.conf

 anonymous_enable=NO

#关闭匿名用户登录,更加安全(不影响虚拟用户登录)    

 anon_upload_enable=YES

 anon_mkdir_write_enable=YES

 anon_other_write_enable=YES

#给虚拟用户设定权限,允许所有虚拟用户上传

8·为每个虚拟用户建立自己的配置文件,单独定义权限

修改配置文件

vi /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_dir

#指定保存虚拟用户配置文件的目录

例:vi /etc/vsftpd/vusers_dir/yongshi

 anon_upload_enable=YES

 anon_mkdir_write_enable=YES

 anon_other_write_enable=YES

#允许此用户上传

local_root=/tmp/yongshi

#给yongshi指定独立的上传目录

===================================================================================================================

4·配置基本的性能和安全选项


//设置空闲的用户会话的中断时间

例如下面的配置:

idle_session_timeout=600

将在用户会话空闲10分钟后被中断。

//设置空闲的数据连接的的中断时间

例如下面的配置:

data_connection_timeout=120

将在数据连接空闲2分钟后被中断。

//设置客户端空闲时的自动中断和激活连接的时间

例如下面的配置:

accept_timeout=60

connect_timeout=60

将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接

//设置最大传输速率限制

例如下面的配置:

local_max_rate=50000

anon_max_rate=30000

将使本地用户的最大传输速率为50kbytes / sec,匿名用户的 传输速率为30 kbytes / sec。

max_clients=0

限制并发客户端连接数

max_per_ip=0

限制同一IP地址的并发连接数

//设置客户端连接时的端口范围

例如下面的配置:

pasv_min_port=50000

pasv_max_port=60000

将使客户端连接时的端口范围在50000和60000之间。这提高了系统的安全性。

//设置chroot

在 默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot选项,涉及如下选项:

chroot_local_user

chroot_list_enable

chroot_list_file

有两种设置chroot的方法:

(1)设置对所有的本地用户执行chroot(即活动范围限制在自家目录)只要将chroot_local_user的值设 为YES即可, 即:

chroot_local_user=YES

(2)设置指定的用户执行chroot需要如下的设置:

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file= /etc/vsftpd/chroot_list

这样,只有/etc/vsftpd/chroot_list文件中指定的用户才执行chroot。

注意 :上面所提及的文件/etc/vsftpd/chroot_list和下面将要提及的文件 /etc/vsftpd/user_list的格式要求均为每个 用户名占一行。