当前位置: 首页 > news >正文

FTP服务器

FTP

FTP:
文件传输协议(File Transfer Protocol 简称FTP),采用c/s模式工作
控制端口:21
数据端口:20

FTP工作原理:
1、主动模式 standard
FTP客户端从任意一个非特权端口N(N>1024)发送PORT命令给FTP服务端控制端口21,
其中PORT命令包含客户端接收数据的端口N+1,此时服务器收到了这条PORT命令,
它就会让自己的数据端口20与客户端的数据端口N+1连接。此时如果传输数据的话,
就需要服务端与客户端重新建立一个新的连接来传输数据。

2、被动模式 passive
FTP客户端从任意一个非特权端口N(N>1024)发送PASV命令给FTP服务端控制端口21,
其中PASV命令包含客户端接收数据的端口N+1,此时服务端会随机开启一个
高端端口P(P>1024),并发送PORT命令给客户端,PORT命令包括服务端的数据端口P,
然后客户端从数据端口N+1发起一个请求连接服务端数据端口P,这时产生了数据连接。
使用被动模式就不需要服务端与客户端重新建立一个新的连接来传输数据。

不同点:
传输数据的连接方式不同:主动模式是服务端向客户端发起数据连接,
而被动模式是客户端向服务端发起数据连接。

相同点:
都是使用21号控制端口进行用户验证和管理。

FTP服务器的部署与配置
1、安装FTP服务所需的软件包
yum -y install vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
匿名用户的主目录:/var/ftp/
匿名用户的下载目录:/var/ftp/pu

2、主配置文件/etc/vsftpd/vsftpd.conf

Allow anonymous FTP? (Beware - allowed by default if you comment this out).

anonymous_enable=YES //控制匿名用户访问权限,YES表示允许匿名访问FTP服务器

Uncomment this to allow local users to log in.

When SELinux is enforcing check for SE bool ftp_home_dir

local_enable=YES —控制FTP用户是否可以访问FTP服务器,YES表示允许FTP用户访问FTP服务,
同时当selinux处于enforcing状态时,需要调整ftp_home_dir的bool值。
(但是从RHEL7上安装vsftpd3.0版本后,就是没有ftp_home_dir这个bool值了,
所以就不需要修改此bool值)

Uncomment this to enable any form of FTP write command.

write_enable=YES //-控制FTP用户对FTP服务器的可写权限,YES表示可写

Default umask for local users is 077. You may wish to change this to 022,

if your users expect that (022 is used by most other ftpd’s)

local_umask=022 ----FTP用户创建目录或文件时的umask值

When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access

#anon_upload_enable=YES

-控制匿名用户上传文件的权限,YES表示允许匿名用户上传文件。

Uncomment this if you want the anonymous FTP user to be able to create

new directories.

#anon_mkdir_write_enable=YES —控制匿名用户创建目录的权限,YES表示允许匿名用户创建目录

#chroot_list_enable=YES —控制列表中的FTP用户能否离开自己的FTP主目录,
YES表示禁止列表中的FTP用户离开自己的FTP主目录。默认是允许

(default follows)

#chroot_list_file=/etc/vsftpd/chroot_list —FTP用户列表文件,每一行一个用户名

示例:匿名用户

1、设置允许匿名用户访问FTP服务器(centos7默认允许,不用做修改;centos8修改如下)
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES —启用匿名登录

2、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件下载上传

下载

在服务器的/var/ftp/pub 创建123456
[root@ws ~]# cd /var/ftp/pub/
[root@ws pub]# ls
[root@ws pub]# touch 123
[root@ws pub]# ls
123
在客户端下载123
[root@ws2 yum.repos.d]# lftp 192.168.110.10
lftp 192.168.110.10:/pub> get 123
[root@ws2 yum.repos.d]# ls
123  server.repo

ls -ld /var/ftp/pub --查看/var/ftp/pub目录权限,发现其他用户对该目录没有写入权限

[root@ws pub]# ll -d /var/ftp/pub/
drwxr-xr-x. 2 root root 17 8月  14 20:44 /var/ftp/pub/

setfacl -m u:ftp:rwx /var/ftp/pub —设置ftp用户对/var/ftp/pub目录有读写权限

[root@ws ~]# setfacl -m u:ftp:rwx /var/ftp/pub/

vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES

在这里插入图片描述

systemctl restart vsftpd

lftp 192.168.110.10:/pub> put 111
[root@ws pub]# ls
111  123

3、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录
vim /etc/vsftpd/vsftpd.conf

write_enable=YES

anon_mkdir_write_enable=YES

在这里插入图片描述

systemctl restart vsftpd

lftp 192.168.110.10:/pub> mkdir test1
mkdir 成功, 建立 `test1'
lftp 192.168.110.10:/pub> touch 1
未知命令 `touch'.
lftp 192.168.110.10:/pub> 

4、设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或
目录进行重命名或删除操作
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_other_write_enable=YES

在这里插入图片描述

systemctl restart vsftpd

lftp 192.168.110.10:/pub> ls
-rw-------    1 14       50              0 Aug 14 13:04 111
-rw-r--r--    1 0        0               0 Aug 14 12:44 123
drwx------    2 14       50              6 Aug 14 13:08 test1
lftp 192.168.110.10:/pub> mv 111 file1
重命名成功
lftp 192.168.110.10:/pub> ls
-rw-r--r--    1 0        0               0 Aug 14 12:44 123
-rw-------    1 14       50              0 Aug 14 13:04 file1
drwx------    2 14       50              6 Aug 14 13:08 test1
lftp 192.168.110.10:/pub> rm 123
rm 成功, 删除 `123'
lftp 192.168.110.10:/pub> ls
-rw-------    1 14       50              0 Aug 14 13:04 file1
drwx------    2 14       50              6 Aug 14 13:08 test

注意:出了上面设置外,还需要ftp服务账户必须对/var/ftp/pub目录具有读写的权限,
而且ftpd_anon_write和ftpd_full_access的bool设置为on。
这两步在第2题中已经完成了,所以不需要操作了

示例:FTP用户

创建三个用户

[root@ws ~]# useradd ftpuser1
[root@ws ~]# useradd ftpuser2
[root@ws ~]# useradd ftpuser3
[root@ws ~]# echo 123456 | passwd --stdin ftpuser1
更改用户 ftpuser1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ws ~]# echo 123456 | passwd --stdin ftpuser2
更改用户 ftpuser2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ws ~]# echo 123456 | passwd --stdin ftpuser3
更改用户 ftpuser3 的密码 。
passwd:所有的身份验证令牌已经成功更新。

1、设置允许FTP用户访问FTP服务器
vim /etc/vsftpd/vsftpd.conf
local_enable=YES
write_enable=YES

lftp 192.168.110.10:~> user ftpuser1
口令: 
lftp ftpuser1@192.168.110.10:~> ls
lftp ftpuser1@192.168.110.10:~> 
lftp ftpuser1@192.168.110.10:~> 
lftp ftpuser1@192.168.110.10:~> ls
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r--    1 0        0               0 Aug 14 15:46 file9

在这里插入图片描述

离开了用户家目录

2、设置FTP用户访问FTP服务器时,将所有FTP用户访问的目录限制在自己的主目录中,
不允许FTP用户访问其他目录( FTP用户对自己的家目录不能有写入的权限)

在这里插入图片描述

同时FTP用户对自己家目录不能有写入权限,
否则会提示登录失败 500 OOPS:vsftpd:refusing to run with writable root
inside chroot()从2.3.5之后,vsftpd增强了安全检查,
如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!
如果检查发现还有写权限,就会报该错误

在vsftpd的配置文件中增加下列两项中的一项

在这里插入图片描述

lftp ftpuser1@192.168.110.10:/> ls
-rw-r--r--    1 0        0               0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:/> cd ..
lftp ftpuser1@192.168.110.10:/> cd ..
lftp ftpuser1@192.168.110.10:/> cd ..
不能用户家目录 打开第一个

3.设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录。

如果限制ftpuser2和ftpuser3用户访问的目录限制在自己的家目录中,ftpuser1可以访问其他目录

在这里插入图片描述

客户端

lftp 192.168.110.10:~> user ftpuser1
口令: 
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r--    1 0        0               0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r--    1 0        0               0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:~> cd /
cd 成功, 当前目录=/
lftp ftpuser1@192.168.110.10:/> ls
lrwxrwxrwx    1 0        0               7 Jul 23 03:42 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 Jul 23 03:58 boot
drwxr-xr-x   19 0        0            3280 Aug 18 12:12 dev
drwxr-xr-x  139 0        0            8192 Aug 18 12:28 etc
drwxr-xr-x    6 0        0              64 Aug 18 12:28 home
lrwxrwxrwx    1 0        0               7 Jul 23 03:42 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 Jul 23 03:42 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Apr 11  2018 media
drwxrwxr-x    8 0        0            2048 Nov 25  2018 mnt
drwxr-xr-x    3 0        0              16 Jul 23 03:49 opt
dr-xr-xr-x  197 0        0               0 Aug 18 12:12 proc
dr-xr-x---   14 0        0            4096 Aug 18 12:48 root
drwxr-xr-x   38 0        0            1200 Aug 18 12:14 run
lrwxrwxrwx    1 0        0               8 Jul 23 03:42 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Apr 11  2018 srv
dr-xr-xr-x   13 0        0               0 Aug 18 12:12 sys
drwxrwxrwt   22 0        0            4096 Aug 18 12:29 tmp
drwxr-xr-x   13 0        0             155 Jul 23 03:42 usr
drwxr-xr-x   21 0        0            4096 Aug 18 12:14 var
lftp ftpuser1@192.168.110.10:/> user ftpuser2
口令: 
lftp ftpuser2@192.168.110.10:~> ls
lftp ftpuser2@192.168.110.10:/> cd /
lftp ftpuser2@192.168.110.10:/> cd ..
说明写入进去的可以离开用户家目录 没有写进去不能离开

将文件恢复默认

两个配置文件中都是默认禁止访问ftp(/etc/vsftpd/ftpusers、/etc/vsftpd/user_list)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@ws2 ~]# lftp 192.168.110.10 
lftp 192.168.110.10:~> user ftpuser1
口令: 
lftp ftpuser1@192.168.110.10:~> ls
ls: 登录失败: 530 Login incorrect.              
lftp ftpuser1@192.168.110.10:~> 
不能访问ftpuser1

将/etc/vsftpd/user_list中的userlist_deny=NO加入配置文件中那么就是允许/etc/vsftpd/user_list中的用户访问ftp

在这里插入图片描述

在这里插入图片描述

[root@ws2 ~]# lftp 192.168.110.10
lftp 192.168.110.10:~> user ftpuser1
口令: 
lftp ftpuser1@192.168.110.10:~> ls
-rw-r--r--    1 0        0               0 Aug 18 12:30 file3
lftp ftpuser1@192.168.110.10:~> user ftpuser2
口令: 
lftp ftpuser2@192.168.110.10:~> ls
ls: 登录失败: 530 Permission denied.              
lftp ftpuser2@192.168.110.10:~> user ftpuser2
口令: 
http://www.dtcms.com/a/337084.html

相关文章:

  • 【Python面试题】写一个用元类(metaclass)实现API接口自动注册的Demo。以及装饰器在项目中典型应用场景。
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP
  • 继承中的向上转型、向下转型与动态绑定的深入解析
  • 【案例分享】AI使用分享|如何运用 GPT完成小任务并提升效率 —— Prompt 与案例整理
  • 跨平台笔记协作:cpolar 提升 Obsidian 知识库共享效率方案
  • 基于ssm jsp中学校园网站源码和答辩PPT论文
  • vue的双向数据绑定
  • 哪里找最新AI工具官网?如何快速对比ChatGPT替代品?AI工具导航指南 - AIbase
  • 基于Spring Boot+Vue的社区便民服务平台 智慧社区平台 志愿者服务管理
  • [矩阵置零]
  • 快速搭建项目(若依)
  • 【JavaEE】(16) Spring Boot 日志
  • 重温k8s基础概念知识系列四(服务、负载均衡和联网)
  • [免费]基于Python的全国气象数据采集及可视化大屏系统(Flask+request库)【论文+源码+SQL脚本】
  • Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
  • 你好星识内测,未来是人与AI共创的时代
  • [特殊字符] 什么是 Linux?[特殊字符] 什么是 Shell?[特殊字符] 什么是 Bash? [特殊字符]Linux、Shell、Bash 的关系?
  • 特种行业许可证识别技术:通过图像处理、OCR和结构化提取,实现高效、准确的许可证核验与管理
  • 通过PhotoShop将多张图片整合为gif动画
  • npm设置了镜像 pnpm还需要设置镜像吗
  • Ps 2025 图像编辑 Photoshop(Mac中文)
  • 前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
  • PDF处理控件Aspose.PDF教程:将 PNG 合并为 PDF
  • Arkts加载网页url的pdf发票黑屏问题
  • vscode wsl解决需要用别的用户调试的问题
  • 国产化Excel处理组件Spire.XLS教程:使用 C# 从数据库导出数据到 Excel(含 SQL 示例)
  • Android使用Kotlin协程+Flow实现打字机效果
  • 【内网渗透】CVE-2020-0796 永恒之黑 复现
  • 19.8 《3步实现OPT-6.7B无损量化:用自定义数据集省70%显存,精度仅跌2.3%》
  • (Arxiv-2025)OPENS2V-NEXUS:一个面向主体到视频生成的详细基准与百万规模数据集