本文是在课程课件基础上修改的学习笔记
课程原地址: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,还是电话,客服人员都会针对每一次的用户反馈做详细的记录 ,但是由于客观原因,客服人员没有成熟稳定的客户服务系统,所以希望运维部门能够协助搭建一个文件共享服务来管理这些文档,并且随时跟踪客户的反馈情况。
任务要求
- 客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档
- 不允许匿名用户访问
- 客服部门的相关文档保存在指定的目录里/data/kefu local_root=/data/kefu
- 客服用户使用用户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服务。
总结:
- 用户在ftpusers文件中,那么用户不能访问ftp服务器
- 用户在user_list文件中,如果该文件是白名单,那么==只==在该文件中的用户可以访问ftp服务
- 如果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=数值 + 字节