运维基本功(十九):文件共享服务之FTP解决方案

本文是在课程课件基础上修改的学习笔记
课程原地址:https://www.bilibili.com/video/BV1nW411L7xm
如有侵删
运维基本功(一):Linux系统安装
运维基本功(二):Linux基本命令
运维基本功(三):Linux文件管理
运维基本功(四):Linux文件管理-Vim编辑器概述
运维基本功(五):Linux文件管理-用户管理
运维基本功(六):Linux用户管理-远程管理
运维基本功(七):Linux的权限管理操作
运维基本功(八):Linux自有服务与软件包管理
运维基本功(九): Linux自有服务-防火墙&计划任务
运维基本功(十): Linux计划任务以及进程检测与控制
运维基本功(十一): LAMP项目部署实战
运维基本功(十二): Linux命令回顾与扩展
运维基本功(十三): 再谈用户组管理
运维基本功(十四):Linux下yum源配置实战
运维基本功(十五):Linux系统优化基础
运维基本功(十六):远程管理SSH服务
运维基本功(十七):远程管理SSH服务免密登录解决方案
运维基本功(十八): Linux系统下数据同步服务RSYNC解决方案
运维基本功(十九): 文件共享服务之FTP解决方案

任务背景

某创业公司刚刚起步,随着业务量的增多,咨询和投诉的用户也越来越多,公司的客服部门由原来的2个增加到5个。客服部门平时需要处理大量的用户反馈,不管是邮件,还是QQ,还是电话,客服人员都会针对每一次的用户反馈做详细的记录 ,但是由于客观原因,客服人员没有成熟稳定的客户服务系统,所以希望运维部门能够协助搭建一个文件共享服务来管理这些文档,并且随时跟踪客户的反馈情况。

任务要求

  1. 客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档
  2. 不允许匿名用户访问
  3. 客服部门的相关文档保存在指定的目录里/data/kefu local_root=/data/kefu
  4. 客服用户使用用户kefu/123登录后就只能在默认的/data/kefu目录里活动

理论储备

FTP服务概述

1、FTP服务介绍

FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。

文件传输:文件上传与文件下载

在这里插入图片描述

  • 主要用于互联网中文件的双向传输(上传/下载)、文件共享
  • 跨平台 Linux、Windows
  • FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
  • FTP的默认端口 21号(命令端口) 20号(数据端口,主动模式下) 默认被动模式
  • FTP程序(软件)vsftpd

FTP软件名称 => vsftpd => vs(very secure ftp daemon)

2、FTP服务的客户端工具

  • Linux:ftp、lftp(客户端程序)
  • Windows:FlashFXP(虚拟主机)、FileZilla、IE、Chrome、Firefox
  • lftp和ftp工具区别:
    • lftp:默认是以匿名用户访问
    • ftp:默认是以用户名/密码方式访问
    • lftp可以批量并且下载目录

3、FTP的两种运行模式

在FTP服务中,其一共拥有两种模式(主动模式 + 被动模式)

参考点,FTP的服务器端。如果是FTP服务器端主动连接客户端=>主动模式,如果是客户端主动连接FTP服务器端=>被动模式。

主动模式

在这里插入图片描述

cmd:命令端口(发送FTP请求)

data:数据端口(后期用于传输数据)

1. 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
2. 服务端的21号命令端口响应客户端的随机命令端口
3. 服务端的20号端口主动请求连接客户端的随机数据端口
4. 客户端的随机数据端口进行确认

被动模式

在这里插入图片描述

1. 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
2. 服务端的21号命令端口响应客户端的随机命令端口
3. 客户端主动连接服务端打开的大于1023的随机数据端口
4. 服务端进行确认

FTP默认使用的就是被动模式!

4、搭建FTP服务

1. 关闭防火墙和selinux
2. 配置yum源(mount /dev/sr0 /mnt)
3. 软件三部曲
4. 了解配置文件
5. 根据需求修改配置文件来完成服务的搭建
6. 启动服务,开机自启动
7. 测试验证

第一步:关闭防火墙与SELinux

# systemctl stop firewalld
# systemctl disable firewalld

# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled

第二步:配置YUM源

有网配置公网YUM源(阿里、清华、华为),没网就配置本地YUM源
# mount /dev/sr0 /mnt
# yum clean all
# yum makecache

第三步:安装vsftpd软件(FTP => vsftpd)

# yum install vsftpd -y

第四步:启动ftp服务并添加到开机启动项中

# systemctl start vsftpd
# systemctl enable vsftpd

第五步:测试FTP是否安装成功

# ifconfig ens33
inet 10.1.1.10  netmask 255.255.255.0  broadcast 10.1.1.255

☆ 基于浏览器的访问

在这里插入图片描述

☆ 基于Windows资源管理器的访问

在这里插入图片描述

☆ 基于FlashFxp、FileZilla软件

在这里插入图片描述

☆ 基于ftp以及lftp命令进行连接(Linux与Linux之间的FTP文件传输)

 yum install ftp lftp -y
# ftp 10.1.1.10

5、FTP的配置文件详解

在Server服务器端,使用rpm -ql vsftpd

# rpm -ql vsftpd
/usr/lib/systemd/system/vsftpd.service	启动脚本
/etc/vsftpd								配置文件的目录
/etc/vsftpd/ftpusers				    用户列表文件,黑名单
/etc/vsftpd/user_list				    用户列表文件,可黑可白(默认是黑名单)
/etc/vsftpd/vsftpd.conf					配置文件(主配置文件)
/usr/sbin/vsftpd						程序本身(二进制的命令)
/var/ftp								匿名用户的默认数据根目录
/var/ftp/pub							匿名用户的扩展数据目录

vsftpd配置文件详解:

# grep -v ^# /etc/vsftpd/vsftpd.conf
anonymous_enable=YES			支持匿名用户访问	
local_enable=YES				支持非匿名用户,普通账号登录,默认进入到自己家目录
write_enable=YES				写总开关
local_umask=022					反掩码  file:644  rw- r-- r-- dir:755
dirmessage_enable=YES			启用消息功能
xferlog_enable=YES				开启或启用xferlog日志
connect_from_port_20=YES		支持主动模式(默认被动模式)
xferlog_std_format=YES			xferlog日志格式
listen=YES					    ftp服务独立模式下的监听

pam_service_name=vsftpd			指定认证文件
userlist_enable=YES				启用用户列表
tcp_wrappers=YES				支持tcp_wrappers功能(FTP限速操作)

# man 5 vsftpd.conf

6、Linux下ftp客户端管理工具

ftp、lftp都是Linux下ftp的客户端管理工具,但是需要独立安装

# yum install ftp lftp -y

ftp工具

# ftp 10.1.1.10
Connected to 10.1.1.10 (10.1.1.10).
220 (vsFTPd 3.0.2)
Name (10.1.1.10:root): 输入FTP的账号

331 Please specify the password.
Password: 输入FTP账号对应的密码

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

求帮助:

ftp> ?或help
Commands may be abbreviated.  Commands are:

!               debug           mdir            sendport        site
$               dir             mget            put             size
account         disconnect      mkdir           pwd             status
append          exit            mls             quit            struct
ascii           form            mode            quote           system
bell            get             modtime         recv            sunique
binary          glob            mput            reget           tenex
bye             hash            newer           rstatus         tick
case            help            nmap            rhelp           trace
cd              idle            nlist           rename          type
cdup            image           ntrans          reset           user
chmod           lcd             open            restart         umask
close           ls              prompt          rmdir           verbose
cr              macdef          passive         runique         ?
delete          mdelete         proxy           send

第一个命令:ls命令

ftp> ls

查看当前连接的FTP目录下有哪些文件。

第二个命令(快捷键):Ctrl + Shift + L

Ctrl + Shift + L代表清屏命令

第三个命令:help命令

ftp> help put
put             send one file

第四个命令:put与get命令

ftp> put 本地文件路径+名称	 上传
ftp> get 远程文件路径+名称	 下载

第五个命令:批量上传或下载多个文件

ftp> mput 文件名称1 文件名称2 文件名称3 ...
ftp> mget 文件名称1 文件名称2 文件名称3 ...

第六个命令:prompt屏蔽批量输出信息

ftp> prompt
Interactive mode on.	=> 开启提示

ftp> prompt
Interactive mode off.	=> 关闭提示

第七个命令:quit命令

ftp> quit

lftp工具:批量操作

# lftp 用户名称@远程IP地址
Password:用户名称对应的密码

求帮助:help

lftp> help

针对某个命令求帮助:help + 命令

lftp> help mirror

案例:批量上传(把shop文件夹上传到FTP服务器端)

lftp> mirror -R 本地文件夹名称

案例:批量下载(把整个FTP下载到本地)

lftp> mirror 远程FTP路径

解决方案

1、任务需求

简单来说:根据我们所学的内容(FTP)搭建一个客户服务系统(主要涉及客服资料上传与下载)

1. 客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档
2. 不允许匿名用户访问
3. 客服部门的相关文档保存在指定的目录里/data/kefu    local_root=/data/kefu
4. 客服用户使用用户kefu/123登录后就只能在默认的/data/kefu目录里活动

2、创建客服账号(Server)

# useradd kefu
# echo 123 |passwd --stdin kefu

3、不允许匿名用户访问

# vim /etc/vsftpd/vsftpd.conf
12行 anonymous_enable=NO

配置修改完毕后,一定要重启vsftpd服务

# systemctl restart vsftpd

4、指定账号访问的目录

# mkdir /data/kefu -p
# vim /etc/vsftpd/vsftpd.conf
17行 local_root=/data/kefu

5、限定kefu/123只能在/data/kefu目录下活动

禁锢kefu用户只能在/data/kefu目录下

# vim /etc/vsftp/vsftpd.conf
18行 chroot_local_user=YES

配置修改完毕后,一定要重启vsftpd服务

# systemctl restart vsftpd

一些知识点

1、500 OOPS

在这里插入图片描述

以上问题主要出现在FTP2.3.5以后的版本中,当然你可以使用

# rpm -qi vsftpd 查看版本信息

解决方案:

① 去除写权限(治标不治本)

# chmod a-w /home/dhj

② 核心解决方案,添加一个选项

# vim /etc/vsftpd/vsftpd.conf19行 allow_writeable_chroot=YES

2、无法上传

之所以无法上传,主要原因在于kefu这个账号对于/data/kefu文件夹没有w写权限

# setfacl -R -m u:kefu:rwx /data/kefu# systemctl restart vsftpd

3、禁锢目录补充

18行 chroot_local_user=YES  禁锢所有用户

需求:我们能不能给一小部分用户开通非禁锢权限。

# vim /etc/vsftpd/vsftpd.conf105行 chroot_list_enable=YES					    开启用户列表文件
107行 chroot_list_file=/etc/vsftpd/chroot_list	
指定用户列表文件echo kefu >> /etc/vsftpd/chroot_list      
代表客服这个账号不会被禁锢在指定目录
# systemctl restart vsftpd

4、FTP访问对象控制(黑名单)

ftpusers 黑名单

user_list 默认是黑名单(可以成为白名单)

案例:默认情况下,root账号是否允许登录FTP服务器

[root@localhost ftp]# ftp 10.1.1.10
Connected to 10.1.1.10 (10.1.1.10).
220 (vsFTPd 3.0.2)
Name (10.1.1.10:root): root
530 Permission denied.
Login failed.
ftp>
原因:root用户在黑名单里/etc/vsftpd/ftpusers黑名单中

案例:ftpusers 与 user_list黑名单效果不同点

ftpusers:
[root@localhost ftp]# ftp 10.1.1.10
Connected to 10.1.1.10 (10.1.1.10).
220 (vsFTPd 3.0.2)
Name (10.1.1.10:root): kefu
331 Please specify the password.
Password:
530 Login incorrect.			=>       ftpusers被禁用,可以输入密码,返回530
Login failed.


user_list:
[root@localhost ftp]# ftp 10.1.1.10
Connected to 10.1.1.10 (10.1.1.10).
220 (vsFTPd 3.0.2)
Name (10.1.1.10:root): kefu
530 Permission denied.
Login failed.
原因:默认情况下user_list文件也是黑名单,如果在该文件里直接拒绝,不给输入密码的机会。

案例:user_list可以从黑名单变成白名单(允许某个用户登录FTP系统服务器)

user_list要成为白名单,需要再配置文件里增加:
userlist_deny=NO
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。

总结:

  1. 用户在ftpusers文件中,那么用户不能访问ftp服务器
  2. 用户在user_list文件中,如果该文件是白名单,那么====在该文件中的用户可以访问ftp服务
  3. 如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先

5、FTP网络访问控制(限IP+限速)

FTP必须支持tcp_wrappers

/etc/hosts.allow 允许

/etc/hosts.deny 拒绝

限制IP地址

案例:如何禁止某个IP或IP网段

# vim /etc/hosts.deny
服务程序:主机
vsftpd:all                        全部拒绝
vsftpd:all EXCEPT 192.168.0.2    拒绝所有除了192.168.0.2  
vsftpd:192.168.0.254			  拒绝单个IP地址

vsftpd:192.168.0.254:allow  
//以上是允许192.168.0.254访问,类似/etc/hosts.allow里增加vsftpd:192.168.0.254

vsftpd:192.168.0.0/255.255.255.0   拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254   拒绝某个网段,但是除了某个ip地址
注意:子网掩码不支持192.168.0.0/24这种写法

vim /etc/hosts.deny
vsftpd,sshd:10.1.1.1

案例:如何判断某个服务是否支持tcp_wrappers

1)./configure –enable-libwrap 表示支持tcp_wrappers访问控制(源码安装看配置项)

2)rpm安装(也包括yum安装)

# ldd命令 +二进制程序,查询某个软件包含哪些模块

案例:查询vsftpd与sshd是否支持tcp_wrappers

# ldd /usr/sbin/vsftpd |grep libwrap*
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2956480000)

# ldd /usr/sbin/sshd |grep libwrap*
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f015ff29000)

限制FTP流量

# vim /etc/vsftpd/vsftpd.conf
local_max_rate=0
0代表不限速

local_max_rate=数值 + 字节
  • 10
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值