FTP服务搭建配置笔记
1|01、什么是文件共享服务?
简单来说就是文件域存储块设备可以共享给他人使用。
1|11.1 实现文件共享服务的三种方式
- FTP:属于应用层服务,可以跨平台使用
- NFS:属于内核模式,不可以跨平台使用
- Samba:可以跨平台使用
1|21.2 实现存储设备域服务器连接的三种方式
- DAS:连接磁盘
- NAS:通过nfs/cifs协议实现网络文件共享(文件存储方式),电子邮件、网页服务器、多媒体流服务、档案分享等就适用于NAS存储架构
- SAS:通过网线或者光纤实现ISCSI和FCSAN将物理存储设备连接起来使用(块存储方式比较底层,需要格式化并挂载当本地磁盘使用),数据库有关的应用适用于SAS存储架构
2|02、FTP简介
FTP是File Transfer Protocol文件传输协议的缩写,基于网络来传输文件的应用层协议。
FTP能够通过网络来传输文件,主要是因为工作再应用层所以不会受到平台的限制。
2|12.1 FTP的工作方式
客户端通过TCP三次握手与服务端建立连接,连接建立成功之后才可以进行文件传输。
- FTP的数据传输分为命令数据与文件数据,命令传输的就是客户端要执行的命令,服务端收到后返回给客户端执行结果,如ls命令就返回给当前目录下的所有文件个目录。文件传输就是客户端要传输的数据,服务端与客户端连接来传输文件数据。
- FTP的服务端与客户端建立连接大体有三个步骤,建立连接、传输数据、断开连接。
- FTP是基于TCP协议来传输数据的,使用21端口来建立认证通道,20端口来建立数据通道。
- FTP是明文传输的。
- FTP的用户可以分为实体用户(real user),匿名用户(anonymous user),访客用户(guest user)。
2|22.2 FTP的工作模式
由于现在的网络架构中都会有防火墙来阻止端口与高位端口被主动连接,特别20端口是被禁止主动连接的,因为20端口是FTP的数据端口,所以为了解决客户端或者服务端的防火墙问题,FTP就有了主动和被动两种工作模式,通过防火墙内的一端来主动连接防火墙外端的一方,这样子就不会被防火墙阻拦。
2.2.1 主动模式
一般用于服务端存在防火墙的情况,客户端无法主动连接到服务端的20数据端口,需要由服务端主动连接到客户端的两个端口。
- 两端在建立TCP通信通道后,客户端会发送port请求与服务端的21端口认证连接并开放用来建立数据连接的高位端口。
- 服务端在收到请求后,会通过20端口发送ACK响应请求。
- 服务端通过20端口与客户端发送的高位端口建立数据连接通道。
2.2.2 被动模式
一般用于客户端存在防火墙的情况,服务端在收到连接请求后因为客户端存在防火墙而无法达到客户端高位端口,需要客户端主动连接至服务端的数据传输端口。
- 两端在建立TCP通信通道连接后,客户端会发送PASV请求给服务端。
- 服务端在收到PASV请求后就会打开一个高位端口作为数据传输端口来响应给客户端等待客户端连接。
- 客户端在收到响应后,就会去连接服务端响应的端口建立数据传输通道。
2|32.3 FTP的用户类型
-
匿名用户
anonymous或ftp
-
本地用户
账号名称、密码等信息保存在passwd、shadow文件中
-
虚拟用户
使用独立的账号/密码数据文件
user_list ftp_user1 123456 /var/pub
3|03、VSFTPD的安装及使用
3|13.1 关闭防火墙和SELINUX
3|23.2 安装vsftpd
3|33.3 查看安装生成的文件
3|43.4 基于匿名用户的访问控制
要配置基于匿名用户的访问控制,需要修改vsftpd的主配置文件/etc/vsftpd/vsftpd.conf
,主要有下面几个参数:
- anonymous_enable=YES:启用匿名用户
- anon_upload_enable=YES:允许匿名用户上传文件
- anon_mkdir_write_enable=YES:是否允许匿名用户创建目录,要考虑文件系统上的家目录,必须要有写权限
- anon_other_write_enable=YES:允许匿名用户更多于上传或者建立目录之外的权限,譬如删除或者重命名
- anon_umask=077:指定上传文件的默认所有者和权限
3.4.1 运行匿名用户登录
不修改配置文件直接启动后,直接通过FTP软件连接即可,用户名默认是ftp,没有密码。
但是此时匿名用户是不能上传文件和创建目录的:
3.4.2 运行匿名用户上传文件、创建目录
开启允许匿名用户上传文件和创建文件夹的权限:
重新登录ftp,在testdir目录中可以创建目录和上传文件,但是却没有删除文件和重命名文件的权限。
3.4.3 开启匿名用户删除和重命名权限
测试删除文件和重命名:
3|53.5 基于本地用户的访问控制
默认情况下,操作系统的账户是可以直接使用用户名和密码登陆的。并且登陆之后,默认进入自己的家目录。
基于本地用户的访问控制也通过修改vsftpd的配置文件来实现,主要有一下几个参数:
- local_enable=YES:是否允许Linux用户登录,默认是允许的,当然也可以禁止
- write_enable=YES:是否允许系统用户上传文件
- local_root=/ftproot:非匿名用户登录所在目录,当使用Linux用户登录成功之后,就不会默认在自己的家目录了。相反,会位于指定的目录之下
- local_umask=022:指定系统用户上传文件的默认权限
3.5.1 允许系统用户登录并上传文件
系统用户默认具有上传文件、创建目录、删除和重命名的权限。
系统用户默认也可以进入其他目录,所以并不安全,所以如果要启用系统用户登陆FTP那么就要修改配置文件,禁止系统用户访问除了家目录以外的其他目录。
3.5.2 配置本地用户只能访问自己的家目录
修改vsftpd.conf配置文件
但是开启这个参数之后,由于vsftpd更新到2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要解决这个错误有两种方式:
3.5.3 配置指定的本地用户只能访问家目录
配置指定用户只能访问家目录,其他用户可以访问其他目录,需要在配置文件中关闭全局设置的参数allow_writeable_chroot=YES
,开启下面两个参数:
然后需要创建指定的文件chroot_list
并在文件中指定对应的用户:
用centos用户访问,只能在自己的家目录中:
用redhat用户访问,可以访问除了家目录以外的其他目录:
3|63.6 设置chroot
在默认配置中,本地用户可以切换到自己家目录以外的其他目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。
如果希望本地用户登录之后不能访问除了家目录以外的目录,则需要设置chroot选项,具体设置下面三个选项:
3.6.1 设置所有用户只需chroot
只需要将chroot_local_user
选项设置为YES
,所有的本地用户都只能访问自己的家目录。
2.6.2 设置部分指定用户执行chroot
需要注释全局的设置或者设为NO,然后开启另外两个选项:
这样,文件/etc/vaftpd/chroot_list
中的用户就只能访问自己的家目录,其他本地用户可以访问除了家目录的其他目录。
配置基于本地用户的访问限制,需要修改配置文件,主要有以下两种方式:
-
限制指定的本地用户不能访问,而其他本地用户可以访问
使文件/etc/vsftpd/user_list中指定的本地用户不能访问FTP服务器,而其他的本地用户可以访问FTP服务器。
3|73.7 提示信息
3.7.1 登陆提示信息
登陆提示信息图形界面(FTP软件)是看不到的,只适用于ftp作为客户端的时候。可以使用下面的方式进行配置。但是优先级却不一样。
3.7.2 访问目录提示信息
当用户进入某一目录后,可以给用户一个提示消息。用来提示这个目录的作用。在相应的目录下新建一个隐藏文件.message
,该文件中进行提示信息描述。需要添加如下配置:
3|83.8 进一步配置VSFTPD
3.8.1 最大传输速率限制
上面的设置是将本地用户的最大传输速率限制为50kbytes/s,匿名用户最大传输速率限制为30kbytes/s。
3.8.2 设置客户端连接时的端口范围
上面的设置将客户端连接时的端口范围限制在50000-60000之间,提高系统安全性。
3.8.3 基本性能和安全选项配置
4|04、VSFTPD虚拟用户
4|14.1 虚拟用户
- 所有虚拟用户会统一映射为一个指定的系统账号:访问共享设置,即为此系统账号的家目录。
- 各虚拟账户可以被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。
4|24.2 虚拟账号的存储方式
4.2.1 文本
编辑文本文件,该文件需要被编码为hash格式。奇数行为用户名、偶数行为密码。
4.2.2 关系型数据库
实时查询数据库完成用户认证。
-
MySQL
https://www.cnblogs.com/zhenhui/p/5916116.html
pam需要依赖于pam_mysql
- /lib/security/pam_mysql.so
- /usr/share/doc/pam_mysql-0.7/README
- 安装MySQL及pam_mysql插件
- 创建vsftpd数据库和用户表
- 创建虚拟用户
- 授权
- 配置pam认证
- 创建虚拟用户的映射用户
- 修改vsftpd的配置文件,使其适应mysql认证
- 配置虚拟用户具有不同的访问权限
- 重启vsftpd服务并测试
登陆jack账户,有上传、新建、删除、重命名的权限:
登陆tom账户,只有上传的权限:
__EOF__

本文链接:https://www.cnblogs.com/jie-fang/p/11139348.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律