一:了解FTP基本知识 Vsftpd
1.什么是FTP? File Transfer Protocol 基于C/S结构的文件传输协议 2.使用什么协议?什么端口? TCP 21 建立命令链路 TCP 20 在主动传输模式下服务器使用20端口向客户端建立数据链路 3.FTP工作原理
--------- Client Server--------------
1031 21 1032 20
①客户端向服务器发出连接请求,同时客户端系统动态地打开一个大于1024的端口等候服务器连接(比如1031端口) ②若FTP服务器在端口21侦听到该请求,则会在客户端1031端口和服务器的21端口之间建立一个FTP会话连接 ③当需要传输数据时,FTP客户端动态地打开一个大于1024的端口(比如1032端口)连接到服务器的20端口,并在这两个端口之间进行数据的传输。当数据传输完毕后,这两个端口会自动关闭 ④当FTP客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放
4.FTP工作模式 主动传输模式(Active FTP): 在主动传输模式下,FTP客户端随机开启一个大于1024的端口N(1025)向服务器的21号端口发起连接,然后开放N+1号端口(1026)进行监听,并向服务器发送PORT 1026命令。服务器接收到命令后,会用其本地的FTP数据端口(通常20)来连接客户端指定的端口1026,进行数据传输。
被动传输模式(Passive FTP): 在被动传输模式下,FTP客户端随机开启一个大于1024的端口N(1025)向服务器的21号端口发起连接,同时会开启N+1号端口(1026),然后向服务器发送PASV 命令。通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024端口(1521)进行监听,然后用PORT 命令通知客户端,自己的数据端口是1521.客户端收到命令后会通过1026号端口连接服务器的1521,然后在两个端口之间进行数据传输。 5.FTP传输模式 二进制模式:图片和执行文件压缩文件 文本模式:CGI脚本和普通HTML文件 目前服务器上面和FTP客户端软件能够自动识别文件类型并选择相应的传输方式 6.FTP账户类型 匿名用户:ftp 或 anonymous 本地用户:Linux服务器本机的系统用户账号 虚拟用户:账号信息存放在独立的文件或数据库内 7.默认安装vsftpd特点 匿名用户与本地用户都可以登录 匿名用户登录到/var/ftp,只能下载不能上传 本地用户登录到本地用户的家目录,可以上传和下载 ftp和lftp命令 get 下载 put 上传 mget 下载多个,支持通配符 mput 上传多个,支持通配符 !cmd 执行外面命令 lcd 切换外面路径 9.访问FTP地址表示方法 用户验证访问 ftp://user:pass@192.168.4.5 ftp://user:pass@192.168.4.5/path/to/file
URL,统一资源定位器(网址) Unified Resource Locator 协议://用户名:密码@服务器地址:端口/目录路径/文件名
10.RHEL6自带的ftp软件包?主配置文件是?服务启动脚本? vsftpd /etc/vsftpd/vsftpd.conf 重点字段意义:anonymous_enable=YES #开启匿名共享 local_enable=YES #开启本地账户共享 write_enable=YES #本地账户是否可写 anon_upload_enable=YES #匿名用户是否可以上传文件 anon_mkdir_write_enable=YES #匿名可创建目录 anon_other_write_enable=YES #匿名删除,重命名 chroot_local_user #禁锢本地账户 anon_root=/abc #定义匿名用户根目录为/abc目录 anon_umask=022 #定义匿名用户上传的掩码值
11.配置文件:/etc/vsftpd/vsftpd.conf(主配置) /etc/vsftpd/ftpusers(黑名单) /etc/vsftpd/user_list(黑/白名单) 在字段userlist_enable=YES或NO //是否开启user_list文件 在字段userlist_deny=NO时user_list是白名单 12.其他常用选项 listen_port=端口号 listen_address=IP地址
14.并发连接和速度: max_clients=最大并发连接数 max_per_ip=同一IP地址的最大并发连接数 anon_max_rate=匿名用户访问速度(字节/秒) local_max_rate=本地用户访问速度(字节/秒)
安装 FTP 1.安装软件包
关掉防火墙和selinux,不然需要提前配好 yum -y install vsftpd
2.启动服务 service vsftpd restart chkconfig vsftpd on netstat -anptu | grep vsftpd
3.创建测试文件 ls -l /etc/* > /var/ftp/pub/anon.txt [root@svr5 ~]# useradd lisi [root@svr5 ~]# echo 123456 | passwd --stdin lisi [root@svr5 ~]# ls -l /etc/* > ~lisi/lisi.txt 4.验证:(客户端测试) 浏览器测试: ftp://192.168.4.5/ ftp://lisi:123456@192.168.4.5/ 用户密码登录方式 命令行测试: [root@pc205 ~]# yum -y install ftp lftp [root@pc205 ~]# ftp 192.168.4.5 ftp> cd pub ftp> ls ftp> get anon.txt ftp> !ls ftp> put install.log ftp> quit [root@pc205 ~]# lftp 192.168.4.5 lftp 192.168.4.5:~> user lisi 口令: [root@pc205 ~]# yum -y install wget [root@pc205 ~]# wget ftp://lisi:123456@192.168.4.5/lisi.txt 下载文件测试
实验总结: 匿名用户与本地用户都可以登录 匿名用户登录到/var/ftp,只能下载不能上传 本地用户登录到本地用户的家目录,可以上传和下载 用户家目录
实验三: 禁锢本地用户在自己家目录 实验步骤: 先在客户端测试默认结果 [root@pc205 ~]# ftp 192.168.4.5 ... Name (192.168.4.5:root): lisi 331 Please specify the password. Password: ... ftp> pwd 257 "/home/lisi" 在服务器端配置 [root@svr5 ~]# cd /etc/vsftpd/ [root@svr5 vsftpd]# cp vsftpd.conf vsftpd.conf.bak [root@svr5 vsftpd]# vim vsftpd.conf ... 96 chroot_local_user=YES ... [root@svr5 vsftpd]# service vsftpd restart 在客户端测试: [root@pc205 ~]# ftp 192.168.4.5 ... Name (192.168.4.5:root): lisi 331 Please specify the password. Password: 230 Login successful. ftp> pwd 257 "/"
实验四:用户访问控制(黑白名单) 通过ftpusers阻止mike访问 将user_list设为白名单 允许lisi、mike访问 分别测试匿名访问、lisi和mike访问 将ftp加入白名单,再测试匿名访问 [root@svr5 ~]# useradd mike [root@svr5 ~]# echo 123456 | passwd --stdin mike [root@svr5 ~]# grep mike /etc/vsftpd/ftpusers mike [root@svr5 ~]# service vsftpd restart 测试:用mike访问ftp [root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf ... 121 userlist_deny=NO ... [root@svr5 ~]# service vsftpd restart [root@svr5 ~]# grep mike /etc/vsftpd/ftpusers [root@svr5 ~]# tail -n 2 /etc/vsftpd/user_list lisi mike 测试: 分别使用mike与lisi登录测试 实验完毕,请将主配置文件121 userlist_deny=NO注释,将user_list和ftpusers里面添加的账户去掉
实验五: 最多100个并发,每IP地址最多2个并发 限制匿名下载速度为50KB/s 限制用户下载速度为500KB/s 通过 ftp、wget 验证上述限制
[root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf ... 122 max_clients=100 123 max_per_ip=2 124 anon_max_rate=50000 125 local_max_rate=500000
[root@svr5 ~]# service vsftpd restart [root@svr5 ~]# dd if=/dev/zero of=/var/ftp/pub/anon.tgz bs=1M count=1000 [root@svr5 ~]# dd if=/dev/zero of=/home/lisi/local.tgz bs=1M count=1000 测试: [root@pc205 ~]# wget ftp://192.168.4.5/pub/anon.tgz [root@pc205 ~]# wget ftp://lisi:123456@192.168.4.5/local.tgz
补充: 匿名用户登录对共享根目录(/var/ftp)禁止有写入权限,否则禁止匿名账户登录!