1.FTP服务原理概述2.FTP服务传输模式3.FTP服务安装配置4.FTP匿名用户访问5.FTP本地用户访问6.FTPFTP企业案例
1.FTP服务原理概述
FTP(File Transfer Protocol), 中文为 “文件传输协议” 是一种在互联网上进行文件传输的协议, 用于在Internet上控制文件的双向传输。
FTP是一个应用程序, 基于客户端/服务器模式,默认使用TCP 20/21端口:
FTP控制链接:21端口,用于接受客户端发出的相关FTP命令与参数
FTP数据链接:20端口,用于数据传输, 比如: 上传、下载数据FTP服务端通常部署在企业内网, 具有容易搭建、方便管理、安全稳定等特征。而且有些FTP客户端工具支持文件的多点下载以及断点续传技术,因此FTP服务得到了广大用户的青睐。
FTP协议的传输拓扑如下:

FTP登陆用户:
匿名用户 -->系统用户
系统用户 -->一般关闭
虚拟用户 -->系统用户
2.FTP服务传输模式
主动模式:服务端通过20端口主动向客户端连接,传输数据。
被动模式:服务端启动随机端口,等待客户端发起连接,进行数据传输。


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





