centos7搭建FTP

news2024/12/23 7:29:57

1.简介

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一种协议,工作于OSI,TCP的应用层,客户端和服务端之前连接要经过一次TCP的三次握手,其作用就是可以使用户以文件操作的方式与另一台主机相互(增、删、改、查、传送)文件,然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

端口号:tcp20(数据端口),tcp21(控制端口)

特定:两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率

匿名用户:anonymous

2.支持模式

FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)

主动:

客户端连接的时候使用一个的端口(这里为A)去向服务端的21号端口进行连接,在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口(B)发送数据,FTP server必须和客户端建立一个新的连接用来传送数据

被动:

建立连接和主动一样,服务器收到连接命令后,会打开一个临时端口(>1024<65535)并通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据

3.vsftp

(1)介绍

vsftpd(very secure ftp daemon,非常安全的 FTP 守护进程)是一款运行在 Linux 操作系统上的 FTP 服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他 FTP 服务程序不具备的特点。

(2)安装和防火墙配置

安装yum -y install vsftpdiptabels -I INPUT -p tcp --dport 20:21 -j ACCEPT

(3)常用配置目录和selinux设置

/etc/vsftpd

配置根目录

/etc/vsftpd/vsftpd.conf

主配置文件

/etc/vsftpd/ftpusers

所有位于此文件内的用户都不能访问vsftp服务

/etc/vsftpd/user_list

ftp 用户名单,可以设置白名单或黑名单

/etc/vsftpd/chroot_list

chroot黑白名单

usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf

配置命令模板文件

setsebool ftp_home_dir on

SELinux开启本地用户登录

setsebool -P ftpd_full_access on

setsebool -P ftpd_anon_write=on

SELinux允许匿名用户写入

(4)vsftpd.conf文件详解

匿名用户相关参数

anonymous_enable=YES # 允许匿名用户登陆

no_anon_password=NO # 对匿名用户密码检测

ftp_username=ftp # 匿名用户登陆的username

anon_mkdir_write_enable=NO # 不允许匿名用户创建目录

anon_other_write_enable=NO # 不允许匿名用户对文件增、删、改

anon_upload_enable=NO # 不允许匿名用户上传文件

anon_world_readable_only=YES # 如果为YES,匿名用户只能下载可读的文件

anon_max_rate=0 # 允许匿名用户最大数据传输速率,单位为B/s

anon_umask=077 #umask的权限

chown_uploads=NO # 如果设置为YES,所有的匿名用户上传的文件属主都设置为chown_username指定用户

chown_username=root # 指定chown_uploads中所需的文件属主用户

deny_email_enable=NO # 如果设置为YES,则提供一个内容为mail address的文件,若是使用匿名登入,则会要求输入email address,如果它不在文件内,则禁止进入

banned_email_file=/etc/vsftpd/banned_emails # 指定deny_email_enable中的文件路径

本地用户相关参数

local_enable=YES # 是否允许本地用户登陆

write_enable=YES # 本地用户写权限

local_umask=022 # 本地用户的文件umask码

local_root=none # 本地用户登陆后改变的目录,默认是各自家目录

local_max_rate=0(unlimited) # 本地用户使用的最大传输速度,单位为B/s

虚拟用户相关参数

pam_service_name=vsftpd # 设置PAM使用的名称

guest_enable=NO # 是否启用虚拟用户

guest_username=vsftpuser # 指定本地用户名,用来映射虚拟用户

virtual_use_local_privs=NO # 如果启用,虚拟用户将使用与本地用户相同的权限,否则与匿名用户权限相同

banner参数

dirmessage_enable=YES # 如果设置为YES,当用户首次进入一个目录后,会查找.message文件并显示

message_file=message # 设置message文件

ftpd_banner=Welcome to blah FTP service # 设置进入banner信息

banner_file=none # 设置一个包含banner信息的文件路径,开启它将会覆盖ftpd_banner

日志文件

xferlog_enable=YES # 是否开启上传下载日志,默认放在/var/log/vsftpd.log

xferlog_std_format=NO # 日志将以xferlog格式写入

xferlog_file=/var/log/xferlog # 设置日志存放路径

log_ftp_protocol # 记录所有请求和响应,前提是xferlog_std_format=NO

数据传输模式

ascii_upload_enable=YES # 是否启用ASCII模式上传数据

ascii_download_enable=YES # 是否启用ASCII模式下载数据

工作模式与端口设置

listen_port=21 # 设置ftp服务工作的端口

connect_from_port_20=YES # 主动模式数据传输的端口

pasv_enable=YES # YES为被动模式工作,NO则是主动模式,默认YES

pasv_max_port=0 # PASV模式下,最大传输数据端口号,0为任意无限制

pasv_min_port=0 # PASV模式下,最小传输数据端口号

超时时间设置

idle_session_timeout=600 # 客户端连接FTP后无命令超时时间

data_connection_timeout=120 # 无数据传输超时时间

accept_timeout=60 # 建立FTP连接的超时时间

connect_timeout=60 # PORT模式下建立数据连接的超时时间

目录权限,锁定家目录

chroot_local_user=NO # 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录

chroot_list_enable=NO # 是否启用chroot列表文件,写入文件中的用户是否锁定家目录,与chroot_local_user的结果相对立

chroot_list_file=/etc/vsftpd/chroot_list # 指定用户列表文件的文件路径

以下为4中组合方式:

chroot_local_user=YES,chroot_list_enable=YES # 只允许chroot_list_file文件中的用户切换到其他目录

chroot_local_user=YES,chroot_list_enable=NO # 所有本地用户都锁定在家目录下

chroot_local_user=NO,chroot_list_enable=YES # chroot_list_file文件中的用户将锁定在家目录下

chroot_local_user=NO,chroot_list_enable=NO # 所有本地用户都可以切换到其他目录

主服务运行模式与连接设置

listen=YES # 设置vsftpd服务器是否以standalone模式运行,有很多与服务器运行相关的配置命令,需要在此模式下才有效。 若设置为NO,则vsftpd以super daemon运行,要受到xinetd 服务的管控,功能上会受到限制

max_clients=0(unlimited) # 设置客户端最大连接数,standalone模式下有效

max_per_ip=0(unlimited) # 同一IP客户端最大连接数,standalone模式下有效

用户访问控制

userlist_file=/etc/vsftpd/user_list # 控制用户访问FTP的文件

userlist_enable=NO # 如果启用,vsftpd将从userlist_file提供的文件名加载用户名列表

userlist_deny=YES # 如果设为YES,userlist_file文件中的用户不可以访问FTP服务;如果设为NO,只用文件中用户才能访问服务

/etc/vsftpd/ftpusers # 文件用来定义不允许访问FTP服务的用户列表,优先级比userlist_deny高

自定义用户配置

user_config_dir=/etc/vsftpd/virtual_user_conf/ # 指定虚拟用户配置文件目录,目录下可以创建与虚拟用户名相同的文件,给予不同的权限设置

其他设置

download_enable=YES # 如果设置为NO,所有下载请求被拒绝

ls_recurse_enable=NO # 启用后,允许使用ls -R命令,此命令可能会消耗大量资源

anonymous_enable=YES

启用匿名用户登录

local_enable=yes

是否允许本地用户登录

(记得SElinux权限)

setsebool -P ftp_home_dir on

write_enable=YES

是否允许本地用户可写

local_umask=022

umask值

anon_upload_enable=YES

ascill //文档

bin //照片

anon_upload_enable=YES

selinux:

开启匿名用户的上传写入权限

anon_mkdir_write_enable=NO

不允许匿名用户创建目录

dirmessage_enable=YES

当用户首次进入一个目录后,会查找.message文件并显示出来,类型登录控制台

xferlog_enable=YES

是否开启上传下载日志

xferlog_file=/var/log/xferlog

设置上传下载日志存放路径

xferlog_std_format=YES

日志将以xferlog格式写入

connect_form_port_20=YES

主动模式数据传输的端口是否为20

chown_uploads=YES

所有的匿名用户上传的文件属主都设置为chown_username指定用户

chown_username=root

指定chown_uploads中所需的文件属主用户

idle_session_timeout=600

超时时间,超过600s没有任何操作自动断开连接

listen=YES

是否监听

pam_service_name=vsftpd

设置PAM使用的名称

userlist_enable=YES

userlist_deny = YES

如果设为YES,userlist_file文件中的用户不可以访问FTP服务;如果设为NO,只用文件中用户才能访问服务

userlist_file = /etc/vsftpd/user_list

设置ftp 用户访问

tcp_wrappers=YES

4.ftp实验(虚拟用户)

//安装vsftpd服务器

[root@router vsftpd]# yum -y install vsftpd

//创建用户密码文件

[root@router ~]# cd /etc/vsftpd/

[root@router vsftpd]# vim vuser.list

[root@router vsftpd]# cat vuser.list

webuser

123.com

aaa

123.com

[root@router vsftpd]# db_load -T -t hash -f vuser.list vuser.db

[root@router vsftpd]# chmod 600 vuser.db

//创建用户

[root@router vsftpd]#useradd -d /var/www/html -s /sbin/nologin ftpuser

[root@router vsftpd]#chmod 777 /var/www/html

[root@router vsftpd]# useradd webuser

//新建一个虚拟用户认证的 PAM 文件

[root@router vsftpd]# vim /etc/pam.d/vsftpd.vu

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

auth required pam_userdb.so db=/etc/vsftpd/vuser

account required pam_userdb.so db=/etc/vsftpd/vuser

//修改配置文件

[root@router vsftpd]# cat /etc/vsftpd/vsftpd.conf | grep -Ev "#|$&"

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

anon_umask=133

file_open_mode=755

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

chown_uploads=YES

chown_username=webuser

xferlog_std_format=YES

chroot_local_user=YES

listen=NO

listen_ipv6=YES

allow_writeable_chroot=yes

pam_service_name=vsftpd

guest_enable=yes

guest_username=ftpuser

pam_service_name=vsftpd.vu

user_config_dir=/etc/vsftpd/dir

userlist_enable=YES

tcp_wrappers=YESS

//创建用户配置文件

[root@router vsftpd]# mkdir dir

[root@router vsftpd]# vim dir/webuser

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_umask=133

file_open_mode=755

客户端测试

FTP响应码

110: 重新启动标记应答。

120: 在n分钟内准备好

125: 连接打开准备传送

150: 打开数据连接

200: 命令成功

202: 命令失败

211: 系统状态

212: 目录状态

213: 文件状态

214: 帮助信息

215: 名字系统类型

220: 新用户服务准备好了

221: 服务关闭控制连接,可以退出登录

225: 数据连接打开,无传输正在进行

226: 关闭数据连接,请求的文件操作成功

227: 进入被动模式

230: 用户登录

250: 请求的文件操作完成

257: 创建”PATHNAME”

331: 用户名正确,需要口令

332: 登录时需要帐户信息

350: 下一步命令

421: 不能提供服务,关闭控制连接

425: 不能打开数据连接

426: 关闭连接,中止传输

450: 请求的文件操作未执行

451: 中止请求的操作:有本地错误

452: 未执行请求的操作:系统存储空间不足

500: 格式错误,命令不可识别

501: 参数语法错误

502: 命令未实现

503: 命令顺序错误

504: 此参数下的命令功能未实现

530: 未登录

532: 存储文件需要帐户信息

550: 未执行请求的操作

551: 请求操作中止:页类型未知

552: 请求的文件操作中止,存储分配溢出

553: 未执行请求的操作:文件名不合法

FTP术语

150    文件状态良好,打开数据连接

200    命令成功

202    命令未实现

211    系统状态或系统帮助响应

212    目录状态

213    文件状态

214    帮助信息,信息仅对人类用户有用

215    名字系统类型

220    对新用户服务准备好

221    服务关闭控制连接,可以退出登录

225    数据连接打开,无传输正在进行

226    关闭数据连接,请求的文件操作成功

227    进入被动模式

230    用户登录

250    请求的文件操作完成

257    创建”PATHNAME”

331    用户名正确,需要口令

332    登录时需要帐户信息

350    请求的文件操作需要进一步命令

421    连接用户过多

425    不能打开数据连接

426    关闭连接,中止传输

450    请求的文件操作未执行

451    中止请求的操作:有本地错误

452    未执行请求的操作:系统存储空间不足

500    格式错误,命令不可识别

501    参数语法错误

502    命令未实现

503    命令顺序错误

504    此参数下的命令功能未实现

530    账号或密码错误

532    存储文件需要帐户信息

550    未执行请求的操作

551    请求操作中止:页类型未知

552    请求的文件操作中止,存储分配溢出

553    未执行请求的操作:文件名不合法

FTP交互命令

命令 描述

ABOR : 中断数据连接程序

ACCT : 系统特权帐号

ALLO : 为服务器上的文件存储器分配字节

APPE : 添加文件到服务器同名文件

CDUP : 改变服务器上的父目录

CWD : 改变服务器上的工作目录

DELE : 删除服务器上的指定文件

HELP : 返回指定命令信息

LIST : 如果是文件名列出文件信息,如果是目录则列出文件列表

MODE : 传输模式(S=流模式,B=块模式,C=压缩模式)

MKD : 在服务器上建立指定目录

NLST : 列出指定目录内容

NOOP : 无动作,除了来自服务器上的承认

PASS : 系统登录密码

PASV : 请求服务器等待数据连接

PORT : IP 地址和两字节的端口 ID

PWD : 显示当前工作目录

QUIT : 从 FTP 服务器上退出登录

REIN : 重新初始化登录状态连接

REST : 由特定偏移量重启文件传递

RETR : 从服务器上找回(复制)文件

RMD : 在服务器上删除指定目录

RNFR : 对旧路径重命名

RNTO : 对新路径重命名

SITE : 由服务器提供的站点特殊参数

SMNT : 挂载指定文件结构

STAT : 在当前程序或目录上返回信息

STOR : 储存(复制)文件到服务器上

STOU : 储存文件到服务器名称上

STRU : 数据结构(F=文件,R=记录,P=页面)

SYST : 返回服务器使用的操作系统

TYPE : 数据类型(A=ASCII,E=EBCDIC,I=binary)

USER : 系统登录的用户名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十二章 实现shallowReadonly功能

实现shallowReadonly功能 shallowReadonly: 让一个响应式数据变为只读的(浅只读) 接下来附上测试用例: import { isReadonly,shallowReadonly } from "../reactive"describe(shallowReadonly,()>{test(should not make non-reactive pro…

Session会话管理

会话管理Web会话管理概述常见的Web应用会话管理方式基于Server端的Session的管理方式基于Cookie的Session的管理方式Cookie与Session最大的区别Cookie-Based的管理方式基于Token-Based的管理方式Web会话管理的安全问题Web会话管理概述 会话管理:在进行人机交互的时…

java高级篇之三大性质总结:原子性、可见性以及有序性

1. 三大性质简介 在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于sy…

JavaSE:常用类

前言从现在开始进入高级部分的学习,鼓励自己一下!画个大饼: 常用类->集合框架->IO流->多线程->网络编程 ->注解与反射->GUI很重要的东西,不能不会!Object类祖宗类,主要方法:t…

接口测试简介

接口测试简介 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 ——百度百科! …

低代码开发与传统开发有什么不同?有什么价值?

低代码开发与传统开发有些什么不同?有什么价值? 自2014年Forrester明确提出低代码(Low-Code)概念以来,这一领域已经逐步升温。近年来,低代码凭借其低开发门槛和易用性等优点赢得了众多投资研究机构和企业用…

设计模式(十四)----结构型模式之组合模式

1 概述 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树…

Cookie原理及JAVA端关于Cookie的增删改查操作

什么是Cookie 在java中,Cookie是来自于Servlet规范中一个工具类,存在于Tomcat提供servlet-api.jar中Cookie存放当前用户的私人数据 Cookie原理 用户打开浏览器第一次(指每次重新打开浏览器的第一次,而非指历来第一次&#xff0…

ChatGPT可以作为一个翻译器吗?

论文地址:https://arxiv.org/abs/2301.08745.pdf 背景 自从OpenAI2022年11月30日发布ChatGPT以来,基本上把NLP所有任务大统一了,那么在机器翻译的表现到底如何呢?腾讯AI Lab在翻译Prompt、多语言翻译以及翻译鲁棒性三方面做了一…

365天深度学习训练营-第J4周:ResNet与DenseNet结合探索

目录 一、前言 二、论文解读 三、DPN代码复现 四、总结 一、前言 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制● 难度:夯实基础⭐⭐ ● 语言:Python3、Pytorc…

难道ERP"死了",中台"凉了",低/无代码要称王了?

一句:“不上ERP等死,上了ERP找死”,可把ERP的尴尬处境说透了。 有人把ERP奉为信仰:“那些说ERP不好用的根本是没用明白。” 有人则认为ERP只是卖概念,冷嘲:“实施ERP的企业,估计一半都倒闭了。…

JavaSE-集合框架013-队列Queue及双端队列Deque

原文链接 Queue 我们可以把LinkedList当作队列来用,也可以当作链表来用。LinkedList只是一个实现方式,但是可以具备很多特点 虽然他是一个链表,但是当你从后加从前取,就是队列(Queue)。当你从后加从后取&a…

第七章 实现effect的stop功能

实现effect的stop功能 通过stop函数传入effect返回的runner 再次修改响应式对象的值的时候 不会修改成功 其实主要思路就是在调用stop函数的时候将 收集的effect依赖移除掉 老样子先给上测试用例: it(stop,()>{// 通过stop函数传入effect返回的runner 再次修…

JPG格式图片怎么弄?可以试试这些途径

在日常生活中,我们经常需要将图片转换为JPG格式,以便在各种设备上使用,因为 JPG 是一种常用的图像格式,具有广泛的兼容性和易用性。这里将介绍几种简单的方法,以帮助您将图片转换为JPG格式。方法一、使用格式转换软件转…

快速入门 Stream 流 【学习笔记】Java基础

若文章内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系博主删除。写这篇博客旨在制作笔记,方便个人在线阅览,巩固知识,无其他用途。 学习视频:【黑马 Java 基础教程…

怎么避免计算机SCI论文的重复率过高? - 易智编译EaseEditing

论文成稿前 在撰写阶段就避免重复:在撰写阶段就避免文章中的重复内容,可以减少后期修改的工作量。 在写作前,可以制定良好的计划和大纲,规划好文章的结构和内容,从而减少重复内容。 加强对相关文献的阅读 为了避免自己…

大话数据结构-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)

6 最短路径 最短路径,对于图来说,是两顶点之间经过的边数最少的路径;对于网来说,是指两顶点之间经过的边上权值之和最小的路径。路径上第一个顶点为源点,最后一个顶点是终点。 6.1 迪杰斯特拉(Dijkstra&am…

【C语言】深度理解指针(上)

前言🌊谈到指针,想必大家都不陌生。它不仅是C语言的重难点,还是不少C初学者的噩梦。本期我们将深度探讨一些较为复杂的指针以及指针的妙用,带领大家感受指针的魅力😝。首先,我们先来复习复习指针的概念&…

dbutils给bean类对象赋值源码分析

本文重点 以ResultSetHandler的实现类BeanListHandler为例&#xff0c;探索dbutils的QueryRunner的实现细节&#xff0c;重点是如何给java bean类对象赋值。 public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws…

119.Android 简单的软键盘和菜单无缝切换效果,聊天界面软键盘无缝切换

//此效果主要通过动态设置windowSoftInputMode三种状态的切换实现&#xff1a;SOFT_INPUT_ADJUST_NOTHING、SOFT_INPUT_ADJUST_PAN、SOFT_INPUT_ADJUST_RESIZE。 1.第一步 导入需要用到的依赖库&#xff1a; //RecyclerView implementation com.android.support:recyclerview-…