Linux系统管理与编程12: FTP服务配置

发布于:2025-04-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

(本实验在CentOS7/8上完成,OpenEuler上暂时未实现)

兰生幽谷,不为莫服而不芳;
君子行义,不为莫知而止休。

1 实验目标

1)理解FTP服务器原理

2) 掌握FTP服务器的配置文件

3)具备安装部署VSFTP的能力

4) 具备FTP的故障排除能力

2 实验拓扑

图2- 1

实验先决条件:每台主机内网192.168.100.0/24相通,且满足下列条件之一

(1)通过NAT与真实外网相连;

(2)搭建本地yum源。

3实训原理/流程

3.1 FTP原理

FTP是文件传输协议(FileTransferProtocol)属于TCP/IP协议簇的一部分,工作于OSI七层模型的应用层、表示层和会话层,控制端口号为21,数据通信端口号为20。使用FTP服务需要拥有该FTP服务器授权的用户标识和口令进行登录,在远程主机上获得相应的权限后,才可以使用FTP服务器提供的服务。

在互联网中有一部分FTP服务属于“匿名(anonymous)”的,即匿名FTP服务器。匿名FTP服务器的目的是为公众提供文件下载服务,不要求用户必须是该FTP服务器的登记注册用户。

匿名FTP服务器访问时也是有用户名的。用户名是特殊用户名:anonymous。

FTP用于控制文件的双向传输,是Internet文件传送的基础,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。FTP支持跨路由的通信,能够在全互联网上提供服务。

FTP支持多种文件传输方式,这些格式通常由FTP系统决定。文本方式:在文本传输模式中,其传输方式会进行调整,主要体现为对不同操作系统的回车、换行、结束符等进行转译,将其自动文件转译成目的主机的文件格式。

二进制方式:在二进制传输中,保存文件的位序,以便原始和拷贝是逐位对应的,该传输方式不对文件做任何的修改。

FTP的工作模式分为两种:模式1:Standard(也为PORT,主动模式)FTP的客户端发送PORT命令到FTP服务器进行端口确认。

图2- 2

模式2:Passive(也为PASV,被动模式)FTP的客户端发送PASV命令到FTP服务器进行端口确认。

图2- 3

FTP:Standard模式与Passive模式的区别主动模式和被动模式的区别可概述为两个方面:主动模式传输数据是服务器连接到客户端的端口,被动模式传输数据是客户端连接到服务器的端口。

主动模式需要客户端必须开放端口给服务器,被动模式只需要服务器端开放端口给客户端连接即可。注意:很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

根据使用者的登录情况,FTP服务器的账号可分为实体用户访客匿名用户三种。实体用户(RealUser)FTP服务器默认允许实体用户(即系统用户)的登录。

以实体用户做为FTP服务器的身份登录时,系统默认不对实体用户进行任何限制,该用户可以针对整个文件系统进行自身权限的工作,即FTP服务器的管理员权限。

访客身份(Guest)在使用FTP服务器时,往往会给不同的部门或者某个特定的用户设置一个专属的帐户,创建一个访客身份就可满足。

匿名身份(Anonymous)匿名用户即不需通过账户密码就可登录访问FTP服务器资源的用户,这类用户在FTP服务器中没有确切的指定账户,但可以访问FTP服务器中开放的文件资源。

需要FTP服务器端允许匿名用户访问。

vsftpd(verysecureFTPdaemon,非常安全的FTP守护进程)是Linux系统下最为常用的FTP服务器软件,具有高安全性、带宽限制、良好的伸缩性、小巧轻快的特性。

vsftpd在安全性、高性能及稳定性三个方面都具有较好表现。vsftpd提供的主要功能虚拟IP设置、虚拟用户、Standalone、inetd操作模式强大的单用户设置能力及带宽限流等。

在安全方面vsftpd从原理上修补了Wu-FTP、ProFTP、BSD-FTP等大多数FTP服务器的安全缺陷,使用安全编码技术解决了缓冲溢出问题,并能有效避免通配符类型的拒绝服务攻击。

使用vsftpd作为官方网站FTP服务器的公司和团队有RedHat、SuSE、Debian、GNU、GNOME、KDE、Gimp、OpenBSD等。

FTP服务器的账号可分为实体用户访客匿名用户三种。配置不同虚拟用户访问权限不同。

3.2 实验步骤

3.2.1项目背景

ftp虚拟用户适用于企业内部文件传输、多用户协作场景,需通过独立账户控制权限(如部门间数据隔离)‌。创建一个系统用户virtual,该用户和虚拟用户建立映射,该用户映射的虚拟用户配置不同访问权限(ftp最安全的模式):在ftp目录下gavin(只能下载)/jimson(允许建立、修改、不得删除)/admin(全部权限)

3.2.2 步骤

1)创建虚拟机并完成网络连接配置。(略)

规划表

操作系统

IP地址

FTP

CentOS7.9

192.168.学号.23(自定vmnet

DNS

OpenEuler22

192.168.学号.200(自定)(前面实验已经部署了)

Client1

OpenEuler22

192.168.学号.222自定

Client2

Win server 2012

192.168.学号.221自定

2)建立本地虚拟用户

[root@ftp ~]# useradd -d /home/ftp virtual

3)建立虚拟用户数据库

[root@ftp ~]# mkdir /etc/vsftpd

[root@ftp ~]# vi /etc/vsftpd/logins.txt

gavin
123
jimson
123
admin
admin

[root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db

[root@ftp ~]# chmod 700 /etc/vsftpd/vsftpd_login.db

我们看看db文件是什么样的:vi vsftpd_login.db

图2-4

4) 建立基于vsftpd_login的PAM授权文件

//查看版本号,以确定pam文件的位置

[root@ftp ~]# uname -m

x86_64

所以pam文件:

[root@ftp ~]# cat /etc/pam.d/vsftpd.vu

auth     required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_login

account  required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_login

5)设置用户权限

建立用来存放用户权限设置文件的目录并进入

[root@ftp ~]# mkdir /etc/vsftpd/virtual  && cd /etc/vsftpd/virtual

并在该文件夹下依次建立与logins.txt对应的帐号名称相同的文件

[root@ftp virtual]# vi gavin

anon_world_readable_only=NO

local_root=/home/ftp

[root@ftp virtual]# vi jimson

anon_world_readable_only=NO

write_enable=YES

anon_mkdir_write_enable=YES

anon_upload_enable=YES

local_root=/home/ftp

[root@ftp virtual]#vi admin

anon_world_readable_only=NO

write_enable=YES

anon_mkdir_write_enable=YES

anon_upload_enable=YES

anon_other_write_enable=YES

local_root=/home/ftp

write_enable=YES                    # 允许写入

anon_upload_enable=YES              # 允许虚拟用户上传文件

anon_mkdir_write_enable=YES         # 允许虚拟用户创建目录

anon_other_write_enable=YES         # 允许虚拟用户执行其他操作(如改名、删除)

anon_umask=022             # 上传文件的掩码,022时,上传目录权限为755,文件权限为644

local_root=/var/ftp/virftp/       # 指定虚拟用户的虚拟目录(虚拟用户登录后的主目录

创建:gavin(只能下载)/jimson(允许建立、修改、不得删除)/admin(全部权限)5、设置vsftpd.conf

//找不到配置文件在哪里吗?

[root@localhost virtual]# find / -name vsftpd.conf

/etc/vsftpd/vsftpd.conf

//找到了,那就动手吧

[root@localhost virtual]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

ftpd_banner=Welcome to virtual FTP service.

chroot_local_user=YES

allow_writeable_chroot=YES

listen=YES

listen_ipv6=NO

guest_enable=YES

guest_username=virtual

pam_service_name=vsftpd.vu

user_config_dir=/etc/vsftpd/virtual

anonymous_enable=NO                   

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

local_enable=YES                            #允许本地用户登录,                    

guest_enable=YES                        #启用虚拟账户

guest_username=virftp                       #把虚拟账户映射到系统账户virftp

chroot_local_user=YES                   #锁定账户的根目录

allow_writeable_chroot=YES              #启用chroot时,虚拟用户根目录允许写入

pam_service_name=vsftpd                     #使用虚拟用户验证(PAM验证)

user_config_dir=/etc/vsftpd/vsftpd_viruser      #设置存放各虚拟用户配置文件的目录6、重新启动vsftpd

service vsftpd restart

3.3验证

客户端安装ftp

以gavin身份登录,可以查看,但无法创建和删除

[root@squid ~]# ftp 192.168.100.68

Connected to 192.168.100.68 (192.168.100.68).

220 Welcome to virtual FTP service.

Name (192.168.100.68:root): gavin

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> dir

227 Entering Passive Mode (192,168,100,68,36,13).

150 Here comes the directory listing.

drwx------    2 1007     1007           45 Nov 27 09:21 wuzz

drwx------    2 1007     1007            6 Nov 27 08:54 wuzz1

226 Directory send OK.

ftp> cd /wuzz

250 Directory successfully changed.

ftp> dir

227 Entering Passive Mode (192,168,100,68,112,187).

150 Here comes the directory listing.

-rw-r--r--    1 0        0             166 Nov 27 09:21 服务器期末考试题目.txt

226 Directory send OK.

ftp> rmdir wuzz

550 Permission denied.

以jimson身份登录,可以查看,创建,但不能删除

[root@squid ~]# ftp 192.168.100.68

Connected to 192.168.100.68 (192.168.100.68).

220 Welcome to virtual FTP service.

Name (192.168.100.68:root): jimson

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> mkdir wuzz2

257 "/wuzz2" created

ftp> rmdir wuzz2

550 Permission denied.

以admin身份登录,具有完全权限

[root@squid ~]# ftp 192.168.100.23

Connected to 192.168.100.68 (192.168.100.68).

220 Welcome to virtual FTP service.

Name (192.168.100.68:root): admin

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> rmdir wuzz1

250 Remove directory operation successful.

ftp> rmdir wuzz2

250 Remove directory operation successful.

ftp> mkdir wuzz3

257 "/wuzz3" created

ftp> dir

227 Entering Passive Mode (192,168,100,68,104,64).

150 Here comes the directory listing.

drwx------    2 1007     1007           45 Nov 27 09:21 wuzz

drwx------    2 1007     1007            6 Nov 27 10:36 wuzz3

226 Directory send OK.

4.思考题

在一个部署完整ftp的Linux服务器上,如何彻底删除ftp服务及其用户、数据目录?