FTP文件传输服务

1.FTP服务原理概述

FTP(File Transfer Protocol), 中文为 “文件传输协议” 是一种在互联网上进行文件传输的协议, 用于在Internet上控制文件的双向传输。
FTP是一个应用程序, 基于客户端/服务器模式,默认使用TCP 20/21端口:

FTP控制链接:21端口,用于接受客户端发出的相关FTP命令与参数
FTP数据链接:20端口,用于数据传输, 比如: 上传、下载数据

FTP服务端通常部署在企业内网, 具有容易搭建、方便管理、安全稳定等特征。 而且有些FTP客户端工具支持文件的多点下载以及断点续传技术,因此FTP服务得到了广大用户的青睐。

FTP协议的传输拓扑如下:

FTP登陆用户:

匿名用户 -->系统用户
系统用户 -->一般关闭
虚拟用户 -->系统用户

2.FTP服务传输模式

FTP传输模式

  1. 主动模式:服务端通过20端口主动向客户端连接,传输数据。

  2. 被动模式:服务端启动随机端口,等待客户端发起连接,进行数据传输。


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客户端验证权限即可


Powered By Z-BlogPHP 1.7.3

 Theme By 优美模版

本博客为开源博客,本博客联系QQ:372097243