暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第28篇 集群架构-FTP文件传输服务

运维大叔 2021-06-03
823

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服务传输模式

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

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

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服务器需要实现用户的审核。需考虑到服务器的安全性,所以关闭实体用户登录,使用虚拟帐号验证机制,并对不同虚拟帐号设置不同的权限。为了保证服务器的性能,还需要根据用户的等级,限制客户端的连接数及下载速度。

解决方案

  1. 匿名用户允许下载我们公司的产品, 但需要对其限速50Kb

  2. 普通用户可以针对自己的目录进行上传和下载,对其限速500Kb(虚拟用户)

  3. 管理用户, 可以访问所有目录资源, 并可以操作客户的目录, 但不允许操作对外

  4. 优化: 根据不同的等级用户做不同的限速, 限制客户端连接次数(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客户端验证权限即可



<关注下方公众号系列好文持续推送>



文章转载自运维大叔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论