----------------------------------------------
大纲:
FTP服务:(文件传输协议---> File Transfer Protocol)
常见FTP 服务
名称:
功能和特点
工作模式
工作原理
安装
服务开启和关闭
服务端口
服务配置文件
1. 实战:匿名登录vsftp服务
2. 实战: 修改配置文件,允许匿名用户上传文件
实战: 伪用户登录FTP服务器,不能登录系统,只允许team1和team2登录和上传,锁定在某个3. 目录中
4. 实战: 虚拟帐号
5. 实战: vip帐号 删除文件
----------------------------------------------
FTP服务:(文件传输协议---> File Transfer Protocol)
FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务.
FTP(File Transfer Protocol: 文件传输协议)作用: Internet 上用来传送文件的协议
常见FTP服务:
Windows---常用---> Serv-U Ftp Server
Linux ---常用---> ProFTPD(Professional FTP daemon)
Red Hat Linux(推荐) ---> vsftp ( Very Secure FTP )
今天的主角:VSFTP
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全.
特点:它是一个安全、高速、稳定的FTP服务器;
VSFTP服务:
名称:Very Secure FTP Server
功能和特点:
实现局域网或公网中,文件共享和传输的协议.
FTP服务有两种模式(1. 主动模式; 2. 被动模式) 以FTPServer 为参照物
FTP服务有两个传输通道(1. 数据通道; 2. 控制通道)
工作模式:C/S模式
服务端口:(cat /etc/services | grep ftp)
Port 20 ---> 数据端口(数据通道)
Port 21 ---> 指令端口(控制通道)
工作原理:##面试经常会遇到这样问题,大家需要注意下
一. 主动模式---> (默认)
1). Client连接到Server的21端口,并发送用户名,密码,一个随机的port1端口(1024以上)及PORT命令给Server,告诉Server采用主动模式,并开放端口port1
2). Server收到Client发来的PORT主动模式命令和端口号后,会通过Server的20端口与Client开放的port1端口连接,然后就可以开始传送数据了
原理如图:
二. 被动模式--->
1). Client连接Server的21端口,发送用户名和密码以及Pasv命令给Server,告知Server采用被动模式
2). Server收到Client发来的Pasv被动模式命令后,随机开放port2端口(1024以上),然后把开放的端口告诉客户端,客户端的收到Server发来的port2端口后,以20端口与Server的port2连接,然后进行数据传输.
原理如图:
安装:
[root@xiaogan100 ~]# yum -y install vsftpd lftp #安装服务端和客户端
vsftpd为服务端软件包
lftp为客户端软件包 ---> Sophisticated file transfer program
Usage:lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
lftp -f script_file
lftp -c commands
lftp --version
lftp --help
注:从RHEL6开始,系统镜像中默认没有FTP客户端命令,取而代之的是lftp命令
Linux客户端--->lftp命令是一个功能强大的下载工具
支持ftp,ftps,http,https,hftp,fish.
(其中ftps和https需要在编译的时候包含openssl库)
lftp的界面非常友好,支持命令补全,历史记录,允许多个后台任务执行等功能.
使用非常方便.还有书签,排队,镜像,断点续传,多进程下载等功能
服务的使用:
1). 添加开机启动项
chkconfig --add vsftpd #添加vsftpd开机启动项
chkconfig vsftpd on #设置vsftpd开机自启动
chkconfig --list vsftpd #查看vxftpd启动级别
2). 启动和关闭vsftpd服务
#开启start 重启restart 关闭 stop 查看状态status
/etc/init.d/vsftdp start/restart/stop/status
或
service vsftpd start/restart/stop/status
netstat -anlpt | grep vsftpd #查看监听端口
#没有连接时,值监听21端口--->控制通道
#有链接时,两个端口(20,21)都在监听
客户端访问Vsftpd Server
Linux: (192.168.171.100为Server端IP地址,客户端需和Server在一个网段)
lftp 192.168.171.100 #匿名方式访问 Server需开启匿名访问支持
Windows:
资源管理器地址栏:ftp://192.168.171.100
服务配置文件:
rpm -ql vsftpd
/etc/vsftpd/vsftpd.conf ---> 核心配置文件
(建议修改前,先备份,一定要养成习惯)
/etc/vsftpd/user_list #黑白名单
# userlist_deny=NO 白名单,指定允许使用VSFTP 的用户列表
# userlist_deny=YES 黑名单,绝不允许这个文件中的用户登录ftp,甚至不提示输入密码
/etc/vsftpd/ftpusers #黑名单,用于指定哪些用户不能访问FTP 服务器
/etc/vsftpd/vsftpd_conf_migrate.sh #是vsftpd 操作的一些变量和设置脚本
/var/ftp #默认情况下,匿名用户登录的根目录
环境搭建:
Linux服务端:192.168.171.100
Windows客户端:192.168.171.1
Linux客户端:192.168.171.120
在Linux服务端安装vsftpd和lftp软件包
yum -y install vsftpd lftp
在Linux客户端安装lftp软件包
yum -y install lftp
在Windows客户端安装FileZilla(也可以不安装)
1. 实战:匿名登录vsftp服务
背景:公司技术部准备搭建一台功能简单的FTP 服务器,允许所有员工上传和下载文件,并允许创建用户自己的目录。
分析:允许所有员工上传和下载文件需要设置成允许匿名用户登录并且需要将允许匿名用户上传功能开启,
anon_mkdir_write_enable #字段可以控制是否允许匿名用户创建目录。
anonymous_enable=YES #允许匿名用户访问
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #允许匿名用户重命名或删除
1). Linux服务端:安装vsftp服务,并运行(因为vsftp默认开启匿名用户登录,不需配置)
yum -y install vsftpd lftp && /etc/init.d/vsftpd start
2). Windows客户端:在资源管理器中的地址栏输入:ftp://192.168.171.100
3). Linux客户端:
lftp 192.168.171.100
2. 实战: 修改配置文件,允许匿名用户创建目录
1). 尝试创建目录和文件情况如下(使用Windows客户端FileZllia登录)
2). 备份配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
3). 修改配置文件
vim /etc/vsftpd/vsftpd.conf
#修改如下行:修改前--->
#anon_mkdir_write_enable=YES
#修改后--->(即去掉前面的#号)
anon_mkdir_write_enable=YES
4). 重启服务
/etc/init.d/vsftpd restart
5). 修改文件访问权限
# 注意: 有两个权限,一个是系统权限(即我们刚才配置的服务权限),另一个是访问权限
系统权限和访问权限必须同时满足,才可对文件夹写入数据
chmod o+w /var/ftp
6). 使用windows客户端FileZilla连接,并尝试创建文件夹
扩展:怎么实现匿名用户上传和删除数据呢?
1). 修改配置文件如下:
anon_upload_enable=YES # 去掉注释符号#即可
anon_other_write_enable=YES #允许匿名账户删除和重命名操作!
2). 重启服务后,即可实现匿名用户上传文件#不推荐
/etc/init.d/vsftpd restart
3. 实战: 使用用户名和密码登录FTP服务器,不能登录系统,只允许gan1和gan2登录和上传,锁定在某个目录中
背景:公司内部现在有一台FTP 和WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别适用team1 和team2帐号进行管理。先要求仅允许team1 和team2 帐号登录FTP 服务器,但不能登录本地系统,并将这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。
ftp 和www web服务器相结合。
www web服务器根目录: /var/www/html
只允许:team1和team2两用户 可以上传。 vsftp禁止匿名。
分析:
将FTP 和WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安全性,首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用chroot 功能将team1和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限
解决方案:
1). 恢复默认配置文件
cp /etc/vsftpd/vsftdp.conf.bak /etc/vsftdp/vsftpd.conf
2). 修改配置文件/etc/vsftpd/vsftpd.conf #开启及下列参数,并设置成对应的值
anonymous_enable=NO #不允许匿名用户登录
local_enable=YES #开启本地用户登录
local_root=/var/www/html #设置用户登录根目录
chroot_local_enable=YES #锁定用户在根目录中
chroot_list_enable=YES #开启锁定用户列表
chroot_list_file=/etc/vsftpd/chroot_list #保存锁定用户列表的文件
write_enable=YES #开启FTP 写入功能
anon_mkdir_write_enable=YES #开启匿名用户创建文件夹下功能
anon_upload_enable=YES #开启匿名用户上传文件功能
3). 配置chroot_list 锁定用户的列表,输入如下两行
gan1
gan2
4). 创建本地账户gan1,gan2
#创建不可登陆账户,并设置账户密码
useradd -s /sbin/nologin gan1 && echo “123456” | passwd --stdin gan1
useradd -s /sbin/nologin gan2 && echo “123456” | passwd --stdin gan2
5). 重启服务
service vsftpd restart #重启vsftpd服务
6). Linux客户端远程连接Server
lftp 192.168.171.100 -u gan1,123456
4. 实战: 虚拟帐号
企业环境
公司为了宣传最新的产品信息,计划搭建FTP 服务器,为客户提供相关文档的下载。对所有互联网开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够使用FTP 服务器进行上传和下载,但不可以删除数据。需要保证服务器的稳定性并做优化。
创建ftp虚拟帐号。允许客户使用ftp帐号下载文件。 但是,你们自己的合作伙伴帐号:vip可以上传一内部文件。
需求分析
根据企业的需求,对于不同用户进行不同的权限限制,FTP 服务器需要实现用户的审核。需考虑到服务器的安全性,所以关闭实体用户登录,使用虚拟帐号验证机制,并对不同虚拟帐号设置不同的权限。为了保证服务器的性能,还需要根据用户的等级,限制客户端的连接数及下载速度。
1). 恢复默认配置文件:
cp /etc/vsftpd/vsftdp.conf.bak /etc/vsftdp/vsftpd.conf
2). 修改配置文件如下:
anonymous_enable=NO #禁止匿名帐户登录
local_enable=YES #开始用户名和密码登录
write_enable=YES #开启服务可写模式
chroot_local_enable=YES #锁定用户在登陆目录下
并在pam_service_name=vsftpd行下添加如下行:
user_config_file=/etc/vsftpd/vuserconfig #设置用户配置文件目录地址
max_clients=300 #设置做多同时有300个客户端
max_per_ip=10 #设置每个IP最大连接数为10
3). 添加本地用户ftpuser,vipuser
对于公共帐号和客户帐号,因为需要配置不同的权限,所以可以将两个帐号的目录进行隔离,控制用户的文件访问。
公共帐号ftp 对应系统帐号ftpuser,并指定其主目录为/var/ftp/share,
而客户帐号vip 对应系统帐号ftpvip,指定主目录为/var/ftp/vip。
useradd -d /var/ftp/share ftpuser #创建用户ftpuser并指定用户目录
useradd -d /var/ftp/vip ftpuser #创建用户vipuser并指定用户目录
公共帐号ftp 只允许下载,修改share 目录其他用户权限为rx 可读可执行。客户帐号vip 允许上传和下载,所以对vip 目录权限设置为rwx,可读可写可执行。
chmod -R 500 /var/ftp/share #变更目录权限只有拥有者可以进行可读和执行操作
chmod -R 700 /var/ftp/vip #变更目录权限
注:如果不设置可执行用户登录会出不能更改目录错误。
4). 建立用户配置文件
互动:如何设置多个虚拟帐号的不同权限? 以前都配置好服务后,对所有用户有效。现在需要对不同用户配置不同的权限。 怎么办?
一个配置文件无法实现此功能,需要为每个虚拟帐号建立独立的配置文件,并根据需要进行相应的设置。
在user_config_dir 指定路径下,建立与虚拟帐号同名的配置文件并添加相应的配置字段
vim /etc/vsftpd/vuserconfig/ftp
配置如下:
guest_enable=yes #开启虚拟账户登录模式
guest_username=ftpuser #设置ftp对应本地用户名ftpuser
anon_world_readable_only=no #用于匿名用户浏览整个服务器文件系统
anon_max_rate=50000 #限定传输速度为50kb/s
vim /etc/vsftpd/vuserconfig/vip
配置如下:
guest_enable=yes #开启虚拟账户登录模式
guest_username=vipuser #设置vip对应本地用户名vipuser
anon_world_readable_only=no #用于匿名用户浏览整个服务器文件系统
anon_max_rate=1000000 #限定传输速度为1Mb/s
anon_mkdir_write_enable=yes #允许匿名用户创建文件夹
anon_upload_enable=yes #开启匿名帐号的上传功能
注意:vsftpd 对于文件传输速度限制并不是绝对锁定在一个数值上哈,而是在80%~120%之间变化比如设置100KB/s 则实际是速度在80KB/s~120KB/s 之间变化
5). 配置ftp虚拟账户
vim /etc/vsftpd/virtualuser.txt #编辑虚拟账户信息
输入如下四行:(奇数行用户名,偶数行密码)
ftp
123456
vip
123456
db_load -T -t hash -f /etc/vsftpd/virtualuser.txt /etc/vsftpd/virtualuser.db #生成数据库文件
rm -rf /etc/vsftpd/virtualuser.txt #删除账户文件
数据库文件中保存着虚拟帐号的密码信息,为了防止非法用户盗取哈,我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对root 用户可读可写,即600
chmod 600 /etc/vsftpd/virtualuser.db #变更数据库文件权限为拥有者可读写
6). 配置pam文件
vim /etc/pam.d/vsftpd
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM 模块.
PAM概述:
PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM 模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
修改vsftpd 对应的PAM 配置文件/etc/pam.d/vsftpd。将默认配置使用“#”全部注释,添加如下两行对应字段。
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualuser
7). 重启服务
/etc/init.d/vsftpd restart
8). 尝试使用客户端进行测试,分别测试下载速度
lftp 192.168.171.100 -u ftp,123456
get dic.tar.bz2
lftp 192.168.171.100 -u vip,123456
get dic.tar.bz2
5. 实战: vip帐号 删除文件
对修改vip账户配置文件
vim /etc/vsftpd/vuserconfig/vip
添加如下行:
anon_other_write_enable=YES #允许匿名账户删除和重命名操作!
重启服务
/etc/init.d/vsftpd restart
测试删除数据
lftp 192.168.171.100 -u vip,123456
rm -rf dic.tar.bz2
互动:你认为哪一种更好?为什么?
lftp [OPTS]
-u [,] 使用指定的用户名/口令进行验证
-p 连接指定的端口
lftp 192.168.1.63 -u vip 后,可以执的命令:
* 下载单个文件和一组文件,断点续传用-c参数
lftp ................:/> get -c ls-lR.txt #下载单个文件
lftp ...............:/> mget *.txt #下载多个文件
lftp ................:/> mirror dir # 镜像一个目录。下载一个目录时用。
查看数据传输过程中,vsftp服务器端传输数据端口:
没有看20端口。
回顾配置文件参数:
anonymous_enable=YES #启用匿名用户(anonymous、ftp)
local_enable=YES #本地用户、启用
write_enable=YES #本地用户、可写
#anon_upload_enable=YES #匿名用户可写
#anon_mkdir_write_enable=YES #匿名用户可以创建目录
#idle_session_timeout=600 #超时时间
#data_connection_timeout=120 #超时时间
listen=YES #是否监听
pam_service_name=vsftpd #开启pam支持
userlist_enable=YES #用户列表功能开启
tcp_wrappers=YES #开始tcp_wrappers支持
黑白名单:
userlist_deny=NO #黑名单变白名单
锁定用户访问的目录:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #写谁锁谁
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #写谁不锁谁
其他功能:
匿名用户可以重命名和删除:
anon_other_write_enable=YES
bind IP(帮定监听IP):
listen_address=IP
local_max_rate=N
anon_max_rate=N
max_client=N
max_per_ip=N