Linux服务器技术之FTP系统服务

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

一、FTP系统服务

任务背景

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

任务要求

  1. 客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档

  2. 不允许匿名用户访问

  3. 客服部门的相关文档保存在指定的目录里/data/kefu

  4. 客服用户使用kefu/123登录后就只能在默认的/data/kefu目录里活动

任务拆解

  1. 搭建ftp服务(新知识点)

  2. 根据需求修改配置文件

    • 不允许匿名用户访问

    • 指定kefu人员数据目录,并且只能在指定目录活动

涉及知识点

  • FTP服务的搭建(掌握)

  • FTP服务的基本配置(重点

课程目标

  • 了解FTP服务的工作模式

  • 能够禁止FTP服务匿名用户登录

  • 能够禁锢FTP服务本地用户的家目录

  • 能够指定FTP服务本地用户和匿名用户的默认数据目录

二、FTP服务概述

1、FTP服务介绍

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

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

image-20200412105703919.png

  • 主要用于互联网中文件的双向传输(上传/下载)、文件共享

  • 跨平台 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服务器端=>被动模式。

☆ 主动模式

image-20200412114935141.png

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

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


☆ 被动模式

image-20200412120219384.png

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资源管理器中查看是否存在

image-20200412142019101.png

☆ 基于FlashFxp软件

下载FlashFXP(资料中有),连接远程的时候选择匿名进行登录,就不用再填写账号密码了。

image-20200412142522460.png

填写URL并选中匿名进行登录

11.png

匿名用户只能下载,不能上传

2.png

☆ 基于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键即可。

3.png

下载:

登录成功后使用命令:get 文件名。即可下载,这个文件必须是上传在/var/ftp中的文件。

查看文件
ftp> ls
下载文件
ftp> get 文件名

查看文件并下载

4.png

退出ftp后观察文件是否下载到本地

5.png

☆ 使用非匿名用户下载文件

只要是Server服务器的非root用户都可以进行登录,并上传.

使用非匿名admin用户登录,登录后默认在自己的家目录中!

6.png

登录后的位置:

7.png

上传文件到自己的家:

8.png

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进行匿名用户登录,发现登录失败:

12.png

使用kefu账号登录,发现成功。

13.png

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

10.png

重启服务后,测试

# systemctl restart vsftpd

发现使用kefu/123登录后,默认访问的目录是/data/kefu

14.png

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时,有的会出现这个问题。

image-20200412171758761.png

以上问题主要出现在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。

16.png

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

17.png

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

FTP必须支持tcp_wrappers才能进行访问控制。其中有两个文件:

/etc/hosts.allow文件是记录允许访问的文件

/etc/hosts.deny文件是记录拒绝访问的文件

image-20200413113242257.png


☆ 限制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端:

18.png

重启服务:systemctl restart vsftpd

Client端登录:

19.png

案例:查询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
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。