Linux服务器技术之FTP系统服务
任务背景
由于客观原因,客服人员没有成熟稳定的客户服务系统,所以希望运维部门能够协助搭建一个文件共享服务来管理这些文档,并且随时跟踪客户的反馈情况。
任务要求
-
客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档
-
不允许匿名用户访问
-
客服部门的相关文档保存在指定的目录里/data/kefu
-
客服用户使用kefu/123登录后就只能在默认的/data/kefu目录里活动
任务拆解
-
搭建ftp服务(新知识点)
-
根据需求修改配置文件
-
不允许匿名用户访问
-
指定kefu人员数据目录,并且只能在指定目录活动
-
涉及知识点
-
FTP服务的搭建(掌握)
-
FTP服务的基本配置(重点)
课程目标
-
了解FTP服务的工作模式
-
能够禁止FTP服务匿名用户登录
-
能够禁锢FTP服务本地用户的家目录
-
能够指定FTP服务本地用户和匿名用户的默认数据目录
二、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. 客户端主动连接服务端打开的大于1023的随机数据端口
4. 服务端进行确认
FTP默认使用的就是被动模式!
4、搭建FTP服务(重要)
准备两台服务器:一个服务端Server,一个客户端Client
☆ Server服务器安装vsftpd
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源:https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.7b101b115QZDxz
# yum makecache
第三步:安装vsftpd软件(FTP => vsftpd)
# yum install vsftpd -y
第四步:启动ftp服务并添加到开机启动项中
# systemctl start vsftpd
# systemctl enable vsftpd
☆ 基于Windows资源管理器的访问
获取ftp的目录:
find / -name "pub" -type d
发现ftp的目录在/var/ftp/
将inotify-tools-3.14.tar.gz上传到/var/ftp/上,然后在windows资源管理器中查看是否存在
☆ 基于FlashFxp软件
下载FlashFXP(资料中有),连接远程的时候选择匿名进行登录,就不用再填写账号密码了。
填写URL并选中匿名进行登录
匿名用户只能下载,不能上传
☆ 基于ftp以及lftp命令进行连接(Linux与Linux之间的FTP文件传输)
在Client端安装ftp。
-- Client端安装ftp和lftp
$ yum install ftp lftp -y
-- 登录ftp Server的ip地址
$ ftp Server的IP地址
登录:
登录的时候输入Name为ftp(匿名账号),Password无,直接enter键即可。
下载:
登录成功后使用命令:get 文件名。即可下载,这个文件必须是上传在/var/ftp中的文件。
查看文件
ftp> ls
下载文件
ftp> get 文件名
查看文件并下载
退出ftp后观察文件是否下载到本地
☆ 使用非匿名用户下载文件
只要是Server服务器的非root用户都可以进行登录,并上传.
使用非匿名admin用户登录,登录后默认在自己的家目录中!
登录后的位置:
上传文件到自己的家:
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配置文件详解:
获取不以"#"号开头的内容。注意:"^#"代表以"#"开头的,“-v”代表取反。
# grep -v ^# /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 支持匿名用户访问
local_enable=YES 支持非匿名用户,普通账号登录,默认进入到自己家目录
write_enable=YES 写总开关,yes:非root用户可以进行上传,
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
三、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
测试:使用FlashFXP进行匿名用户登录,发现登录失败:
使用kefu账号登录,发现成功。
4、指定账号访问的目录
使用kefu/123登录后发现默认访问的是/home/kefu。如何访问指定目录/data/kefu呢?
创建/data/kefu
# mkdir /data/kefu -p
修改配置文件,设置用户登录后自动访问目录为/data/kefu
# vim /etc/vsftpd/vsftpd.conf
17行 local_root=/data/kefu
重启服务后,测试
# systemctl restart vsftpd
发现使用kefu/123登录后,默认访问的目录是/data/kefu
5、限定kefu/123只能在/data/kefu目录下活动
经测试发现,使用账号登录FTP后,发现可以访问任意目录,这样及其不安全。
解决方案:
限定用户只能访问指定的目录/data/kefu。
禁锢kefu用户只能在/data/kefu目录下:
# vim /etc/vsftpd/vsftpd.conf
18行 chroot_local_user=YES
配置修改完毕后,一定要重启vsftpd服务
# systemctl restart vsftpd
使用FlashFXP登录测试,看是否有上级目录。
如果出现了使用FlashFXP登录无法登录的情况,且报错信息是500 OOPS:refusing to run with writable root inside chroot()。
解决方案:
# vim /etc/vsftpd/vsftpd.conf
19行 allow_writeable_chroot=YES
四、向FTP上传文件
1、500 OOPS(版本没问题就不会出现,可以忽略)
由于版本问题,在使用Client连接Server的FTP时,有的会出现这个问题。
以上问题主要出现在FTP2.3.5以后的版本中,当然你可以使用
# rpm -qi vsftpd 查看版本信息
解决方案:
# vim /etc/vsftpd/vsftpd.conf
19行 allow_writeable_chroot=YES
2、无法上传
在windows使用FlashFXP之所以无法上传,主要原因在于kefu这个账号对于/data/kefu文件夹没有w写权限
# vim /etc/vsftpd/vsftpd.conf
添加一行配置:
19行 allow_writeable_chroot=YES
# setfacl -R -m u:kefu:rwx /data/kefu
# systemctl restart vsftpd
3、禁锢目录补充
原来在/etc/vsftpd/vsftpd.conf中我们的设置,导致所有用户都只能访问/data/kefu
18行 chroot_local_user=YES 禁锢所有用户
需求:我们能不能给一小部分用户开通非禁锢权限。
# vim /etc/vsftpd/vsftpd.conf
105行 chroot_list_enable=YES 开启用户列表文件
107行 chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件
echo kefu >> /etc/vsftpd/chroot_list 代表客服这个账号不会被禁锢在指定目录
# systemctl restart vsftpd
五、Linux下客户端工具使用
ftp、lftp都是Linux下ftp的客户端管理工具,但是需要独立安装
没有安装的话需要在Client客户端安装!
# yum install ftp lftp -y
☆ ftp工具
Client客户端使用ftp工具访问Server端(Server端的IP是10.1.1.10)
# 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,就只能把这个目录的文件上传到FTP。
ftp> put a.txt
ftp> get 远程文件路径+名称 下载
第五个命令:批量上传或下载多个文件
ftp> mput 文件名称1 文件名称2 文件名称3 ...
ftp> mget 文件名称1 文件名称2 文件名称3 ...
第六个命令:quit命令
ftp> quit
☆ lftp工具:批量操作
# lftp 用户名称@远程IP地址
Password:用户名称对应的密码
案例:
$ lftp kefu@192.168.57.147
求帮助:help
lftp> help
针对某个命令求帮助:help + 命令
lftp> help mirror
案例:批量上传(把shop文件夹上传到FTP服务器端)
lftp> mirror -R 本地文件夹名称
案例:批量下载(把整个FTP下载到本地)
lftp> mirror 远程FTP路径
案例:Client端创建/demo目录,将Server端FTP整个下载到本地
1.Client端创建/demo,并进入/demo目录
$ mkdir /demo
$ cd /demo
2.登录lftp
$ lftp kefu@192.168.57.147
3.下载所有文件
lftp kefu@192.168.57.147:~> mirror ./
4.退出fltp
lftp kefu@192.168.57.147:~> quit
5.查看是否下载成功
$ ls
☆ FTP访问对象控制(黑名单)
注意:对于黑名单的控制依然是在Server端控制。
在Server端中有两个文件可以实现黑名单,分别是/etc/vsftpd/ftpusers和/etc/vsftpd/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黑名单效果不同点
在Server端中将用户kefu添加到/etc/vsftpd/ftpusers中,然后重启vsftpd,接下来在Client端使用kefu登录ftp。 在下面案例中,在ftpusers中的黑名单会给输入密码的机会!
ftpusers案例:
先在Server端将kefu添加到ftpusers中。
# cd /etc/vsftpd
# vim ftpusers
然后将kefu添加到文件中。然后重启ftp服务
# systemctl restart vsftpd
接下来使用Client端登录ftp。注意:由于Server端重启了vsftpd服务,所以需要等个1分钟左右才能登录。
# ftp 192.168.57.147
发现登录失败,可以输入密码,返回530。
user_list案例:
1.在Server端中将kefu从/etc/vsftpd/ftpusers中删除
2.将kefu添加到/etc/vsftpd/user_list中
3.重启vsftpd
测试!
发现在user_list文件中的黑名单进行登录的时候直接拒绝,不给输入密码的机会。
[root@localhost ftp]# ftp 192.168.57.147
☆ FTP网络访问控制(限IP+限速)
FTP必须支持tcp_wrappers才能进行访问控制。其中有两个文件:
/etc/hosts.allow文件是记录允许访问的文件
/etc/hosts.deny文件是记录拒绝访问的文件
☆ 限制IP地址
限制IP地址和限流也要在Server端操作!
案例:如何禁止某个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
Server端:
重启服务:systemctl restart vsftpd
Client端登录:
案例:查询vsftpd与sshd是否支持tcp_wrappers。只要输出一行就证明支持
在Server端演示,因为Server端安装了vsftpd::
# 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=200000
- 点赞
- 收藏
- 关注作者
评论(0)