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中打开任意窗口
2.第三方访问工具
安装ftp客户端
[root@ns1 yongshi]# rpm -ivh /media/Packages/ftp-0.17-54.el6.x86_64.rpm
3.Windows下的cmd命
用Windows的cmd命令窗口连接 (e:表示进入到e盘e大小写都可)
命令ftp IP
-help 获取帮助
-get 下载
-mget 下载一批文件
-put 上传
-mput 上传一批文件
-quit 退出
===================================================================================================
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的格式要求均为每个 用户名占一行。