1.FTP服务原理概述
FTP(File Transfer Protocol), 中文为 “文件传输协议” 是一种在互联网上进行文件传输的协议, 用于在Internet上控制文件的双向传输。
FTP是一个应用程序, 基于客户端/服务器模式,默认使用TCP 20/21端口:
FTP控制链接:21端口,用于接受客户端发出的相关FTP命令与参数
FTP数据链接:20端口,用于数据传输, 比如: 上传、下载数据
FTP服务端通常部署在企业内网, 具有容易搭建、方便管理、安全稳定等特征。 而且有些FTP客户端工具支持文件的多点下载以及断点续传技术,因此FTP服务得到了广大用户的青睐。
FTP协议的传输拓扑如下:
FTP登陆用户:
匿名用户 -->系统用户
系统用户 -->一般关闭
虚拟用户 -->系统用户
2.FTP服务传输模式
FTP传输模式
主动模式:服务端通过20端口主动向客户端连接,传输数据。
被动模式:服务端启动随机端口,等待客户端发起连接,进行数据传输。
FTP传输模式总结:
FTP服务器端启用防火墙, 开启21/20端口,这时FTP只能工作在主动模式
FTP客户端开启防火墙,这时FTP只能选择工作在被动模式
FTP客户端和FTP服务端都有防火墙,那么将无法使用FTP主动和被动模式
3.FTP服务安装配置
1.基础环境准备
[root@ftp-server ~]# uname -r3.10.0-693.el7.x86_64 [root@ftp-server ~]# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.4 (Maipo)
2.关闭防火墙以及selinux
[root@ftp-server ~]# systemctl stop firewalld[root@ftp-server ~]# systemctl disable firewalld[root@ftp-server ~]# sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config[root@ftp-server ~]# setenforce 0[root@ftp-server ~]# getenforceDisabled
3.安装vsftpd
服务
//需要有epel仓库 [root@ftp-server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[root@ftp-server ~]# yum install vsftpd libdb-utils -y
4.启动ftp
服务并加入开机自启动
[root@ftp-server ~]# systemctl enable vsftpd[root@ftp-server ~]# systemctl start vsftpd
注意: 默认使用匿名用户访问共享目录站点为
/var/ftp
仅拥有下载权限
5.vsftpd
全局配置文件注释
[root@ftp-server ~]# cat /etc/vsftpd/vsftpd.confanonymous_enable=YES //是否启用匿名用户local_enable=YES //是否启动本地用户write_enable=YES //开启全局上传文件local_umask=022 //控制本地用户上传文件默认权限, umask表示要减掉的权限anon_umask=022 //控制匿名用户上传文件的默认权限anon_upload_enable=YES //允许匿名用户上传anon_mkdir_write_enable=YES //允许创建目录dirmessage_enable=YES //配置用户目录显示信息xferlog_enable=YES //启动日志xferlog_file=/var/log/vsftpd.log//指定日志位置,配置xferlog_enable使用connect_from_port_20=YESxferlog_std_format=YESlisten=YES //是否作为一个独立守护进程运行chroot_local_user=YES //禁锢所有用户在用户目录下chroot_list_enable=YES //配合chroot_list_file使用chroot_list_file=/etc/vsftpd/chroot_list //禁锢用户列表pam_service_name=vsftpd ////PAM认证文件userlist_enable=YES //ftpusers文件下的用户都被拒绝登陆访问tcp_wrappers=YESguest_enable=YES //开启虚拟用户guest_username=www //FTP虚拟用户对应的系统用户user_config_dir=/etc/vsftpd/ftplogin //授权FTP虚拟用户所在目录//权限限制local_root=/data/ftp //指定本地用户访问目录站点anon_root=/data/ftp //指定匿名用户访问目录站点//资源控制anon_max_rate=500000 //匿名用户限速local_max_rate=800000 //本地用户限速max_clients=100 //同时能接收多少请求max_per_ip=2 //一个ip同时能有多少连接
4.FTP匿名用户访问
1.配置匿名用户访问ftp服务,拥有创建文件夹、上传下载文件、不允许删除、移动、重命令
//编辑vsftpd主配置文件 [root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf//启动匿名用户、允许上传和创建文件权限 anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES //修改默认ftp共享目录站点权限,最后重新加载vsftpd服务 [root@ftp-server ~]# chmod -R 777 /var/ftp/[root@ftp-server ~]# systemctl restart vsftpd//Linux下使用lftp客户端工具访问vsftpd服务验证,安装此工具 [root@ftp-server ~]# yum install lftp -y//使用匿名用户登录vsftpd [root@ftp-client ~]# lftp 192.168.56.11lftp 192.168.56.11:~> ls drwxrwxrwx 2 0 0 4096 Mar 22 2017 pub lftp 192.168.56.11:/> cd pub //创建目录 lftp 192.168.56.11:/pub> mkdir dir_ftpmkdir ok, `dir_ftp' created lftp 192.168.56.11:/pub> ls drwx------ 2 14 50 4096 Nov 14 21:10 dir_ftp //切换系统其他目录 lftp 192.168.56.11:/pub> lcd /etc lcd ok, local cwd=/etc //下载系统内文件 lftp 192.168.56.11:/pub> put inittab 884 bytes transferred lftp 192.168.56.11:/pub> ls drwx------ 2 14 50 4096 Nov 14 21:10 dir_ftp -rw------- 1 14 50 884 Nov 14 21:11 inittab //切回ftp目录 lftp 192.168.56.11:/pub> cd cd ok, cwd=/ lftp 192.168.56.11:/> cd pub lftp 192.168.56.11:/pub> ls drwx------ 2 14 50 4096 Nov 14 21:10 dir_ftp -rw------- 1 14 50 884 Nov 14 21:11 inittab //验证删除文件权限 lftp 192.168.56.11:/pub> rm inittab rm: Access failed: 550 Permission denied. (inittab)
5.FTP本地用户访问
本地用户访问ftp
默认拥有上传和下载权限
1.本地用户访问ftp服务 [root@ftp-server ~]# useradd ftp_test[root@ftp-server ~]# echo "123"|passwd --stdin ftp_test//客户端验证[root@ftp-client ~]# lftp 192.168.56.11lftp 192.168.56.11:~> login ftp_test 123lftp ftp_test@192.168.56.11:/> mkdir ftp [root@ftp-server ~]# ls /home/ftp_testftp2.拒绝特定的本地用户访问ftp [root@ftp-server ~]# echo "ftp_test" >> /etc/vsftpd/ftpusers//客户端验证[root@ftp-client ~]# lftp 192.168.56.11lftp 192.168.56.11:~> login ftp_test 123lftp ftp_test@192.168.56.11:~> ls ls: Login failed: 530 Login incorrect.3.锁定所有本地用户只能在自己的家目录操作,但允许bgx用户不被锁定家目录 chroot_local_user=YES //锁定所用用户至家目录chroot_list_enable=YES //排除某个用户不被锁定chroot_list_file=/etc/vsftpd/chroot_list //对应的文件allow_writeable_chroot=YES //centos7必须增加
6.FTPFTP企业案例
公司为了宣传最新的产品信息,计划搭建FTP服务器,为客户提供相关文档的下载。对所有权互联网开放共享目录,允许下载产品信息。公司的合作单位能够使用FTP服务器进行上传和下载。
需求分析
根据企业的需求,对于不同用户进行不同的权限限制,FTP服务器需要实现用户的审核。需考虑到服务器的安全性,所以关闭实体用户登录,使用虚拟帐号验证机制,并对不同虚拟帐号设置不同的权限。为了保证服务器的性能,还需要根据用户的等级,限制客户端的连接数及下载速度。
解决方案
1.匿名用户允许下载我们公司的产品, 但需要对其限速50Kb
2.普通用户可以针对自己的目录进行上传和下载,对其限速500Kb(虚拟用户)
3.管理用户, 可以访问所有目录资源, 并可以操作客户的目录, 但不允许操作对外
4.优化: 根据不同的等级用户做不同的限速, 限制客户端连接次数(5)
[root@ftp-server ~]# /data/ftp //manager用户能管理所有目录,但不能管理soft目录 manager bgx //bgx普通用户仅能查看自己的文件和修改 soft //匿名用户仅能下载共享软件包 1.建立系统账户, 供与虚拟账户使用 [root@ftp-server ~]# useradd virftp -s /sbin/nologin//2.创建对应目录,赋予权限 [root@ftp-server ~]#mkdir -p /data/ftp/{manager,bgx,soft}[root@ftp-server ~]#chown -R virftp.virftp /data/ftp/{manager,bgx} //3.创建虚拟用户账户及密码 [root@ftp-server ~]# cat > /etc/vsftpd/vsftpd_login <<EOFmanager manager bgx bgx EOF [root@ftp-server ~]# chmod 600 /etc/vsftpd/vsftpd_login//4.生成对应的库文件 [root@ftp-server ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db//5.修改pam文件 [root@ftp-server ~]# vim /etc/pam.d/vsftpdauth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login //6.建立虚拟目录 [root@ftp-server ~]# mkdir /etc/vsftpd/vsftpd_user_conf//7.配置匿名用户权限,限速100k //匿名用户登陆默认目录,必须要和/etc/passwd中的ftp用户的默认宿主目录要一样,否则也会出错误!anonymous_enable=YESanon_root=/data/ftp/softanon_max_rate=100000 //关闭之前修改过的匿名上传和创建权限anon_upload_enable=NOanon_mkdir_write_enable=NO //8.配置管理用户, 限速2MB cat > /etc/vsftpd/vsftpd_user_conf/manager <<EOFlocal_root=/data/ftp/allow_writeable_chroot=YESwrite_enable=YESlocal_umask=022anonymous_enable=NOanon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=10max_per_ip=5local_max_rate=2000000 EOF //9.配置普通用户, 限速1MB cat > /etc/vsftpd/vsftpd_user_conf/bgx <<EOFlocal_root=/data/ftp/bgxallow_writeable_chroot=YESwrite_enable=YESlocal_umask=022anonymous_enable=NOanon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=10max_per_ip=5local_max_rate=1000000 EOF //10.配置文件尾部追加如下内容chroot_local_user=YESguest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/vsftpd_user_conf //11.使用ftp客户端验证权限即可