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

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

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

1 实验目标

1)理解FTP服务器原理

  1. 掌握FTP服务器的配置文件

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

  1. 具备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服务及其用户、数据目录?

相关推荐
两点王爷1 小时前
docker 运行自定义化的服务-后端
运维·docker·容器
邪恶的贝利亚2 小时前
FFMEPG常见命令查询
linux·运维·网络·ffmpeg
搜搜秀2 小时前
find指令中使用正则表达式
linux·运维·服务器·正则表达式·bash
弧襪3 小时前
Ubuntu vs CentOS:Shell 环境加载机制差异分析
linux·ubuntu·centos
七七powerful3 小时前
使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标
运维
Archie_IT4 小时前
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
运维·服务器·前端·git·深度学习·npm·conda
行思理4 小时前
centos crontab 设置定时任务访问链接
linux·运维·centos
阳光明媚大男孩4 小时前
24.0.2 双系统ubuntu 安装显卡驱动黑屏,系统启动界面键盘失灵
linux·ubuntu·计算机外设
无名之逆4 小时前
[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案
服务器·开发语言·前端·网络·后端·http·rust
再玩一会儿看代码5 小时前
[特殊字符] 深入理解 WSL2:在 Windows 上运行 Linux 的极致方案
linux·运维·windows·经验分享·笔记·学习方法