linux-FTP服务器配置

FTP(File Transfer Protocol,文件传输协议)

一种用于在计算机网络中传输文件的标准协议。它允许用户通过客户端程序与远程服务器进行文件交换,支持文件的上传、下载、删除、重命名等操作。FTP服务常用于将网站文件上传到服务器,或者在公司内部网络中共享大文件。

FTP工作原理

FTP基于客户端-服务器模型,工作时使用两个独立的连接:控制连接和数据连接。

  1. 控制连接(Command Channel)
    • 控制连接用于发送命令和接收响应,如登录、文件操作等。控制连接通常使用TCP端口21。
    • 控制连接是一个持久化的连接,即在会话期间保持打开,直到会话结束。
  2. 数据连接(Data Channel)
    • 数据连接用于实际传输文件。每当需要传输文件时,客户端和服务器会建立一个新的数据连接。
    • 数据连接可以是主动模式(PORT模式)或被动模式(PASV模式)。在主动模式下,客户端在本地打开一个端口等待服务器连接;在被动模式下,服务器在其端口上等待客户端连接。

FTP的工作模式

  1. 主动模式(PORT模式)
    • 在客户端发出连接请求后,客户端告诉服务器自己打开了一个端口用于接收数据,服务器则向该端口发起连接。
    • 这种模式的缺点是客户端必须在防火墙外部,或者防火墙必须允许客户端向外发起连接。
  2. 被动模式(PASV模式)
    • 在被动模式下,客户端发起控制连接后,服务器告诉客户端其将用于数据传输的端口,客户端再向这个端口发起连接。
    • 被动模式通常用于客户端在防火墙后时的连接,能够避免防火墙阻止数据连接的建立。

FTP的主要特点

  1. 双向传输
    • FTP支持文件的双向传输,既可以上传文件,也可以从服务器下载文件。
  2. 命令和响应协议
    • FTP的控制连接基于文本命令和响应,命令遵循标准格式,如USER、PASS、LIST、GET、PUT等。
  3. 支持匿名访问
    • FTP服务器可以配置为支持匿名登录,这意味着用户不需要提供用户名和密码即可访问公共文件夹。
  4. 支持大文件传输
    • FTP支持大文件的传输,适合传输大量数据或大文件。
  5. 安全性问题
    • FTP协议本身没有加密功能,传输的数据,包括用户名和密码,都是明文的,因此容易受到中间人攻击。
    • 为了增强安全性,通常会使用FTPS(FTP Secure)或SFTP(SSH File Transfer Protocol)等变种,分别基于SSL/TLS和SSH进行加密。

FTP命令和响应

一些常用的FTP命令包括:

  • USER:提供用户名
  • PASS:提供密码
  • LIST:列出当前目录中的文件
  • GET:下载文件
  • PUT:上传文件
  • QUIT:结束会话

FTP响应是三位数字代码,表示操作的结果,例如:

  • 200:命令成功
  • 530:登录失败
  • 550:文件操作失败(例如,文件不存在)

FTP客户端

常见的FTP客户端程序包括:

  1. FileZilla:开源的FTP客户端,支持FTP、FTPS和SFTP。
  2. WinSCP:Windows平台的FTP客户端,支持多种协议。
  3. Cyberduck:支持FTP、SFTP、WebDAV等协议的跨平台客户端。

安全性与FTP的扩展

为了提高FTP的安全性,除了FTPS和SFTP外,还有其他一些增强安全性的协议和扩展:

  1. FTPS:FTP Secure,基于SSL/TLS加密传输。
  2. SFTP:SSH File Transfer Protocol,基于SSH协议加密传输,通常与SSH一同使用。
  3. FTP over TLS/SSL:TLS(传输层安全协议)和SSL(安全套接字层)提供了加密的通道,保护FTP数据免受窃听。

/etc/serveice 下记录了所有端口服务信息

第一部分:基础五步

1,挂载光盘,并写镜像源方便装包

Linux 编写本地仓库

2,寻找我们需要的软件包

yum search ftp

3,安装软件包

yum install -y vsftpd

4,关闭selinux

vim /etc/selinux/config

更改配置文件之后再重启centOS-7,再查看setenforce 0

5,关闭防火墙 systemctl stop firewalld.service

实验一,匿名传输

6,查询配置文件路径 rpm -qc vstfpd

7,修改配置文件 vim /etc/vsftpd/vsftpd.conf

分别修改12/16/19/23/29/33/37行为YES

8,然后再重启FTP服务 systemctl restart vsftpd

9,通过windows主机访问ftp服务器验证实验效果

发现只有有限权限,无法新建文件夹或目录

这是因为linux中这个目录本身权限的问题

匿名访问的Windows用户相对于Linux是其他人other,只有读和执行权限r-x。那么就需要使用更安全的方法在linux上面给目录加权限

chmod o+w /var/ftp/pub

这个时候windows就可以新建目录和文件了

实验二,本地用户访问

6-8 步骤同实验一

9,创建用户并设置密码

useradd user1

useradd user2

echo 123456 | passwd --stdin user1

echo 123456 | passwd --stdin user2

查看创建用户密码效果

tail -2 /etc/passwd

tail -2 /etc/shadow

10,在克隆的centOS7验证实验效果(6-8步骤已经开启了允许匿名与本地用户访问)

实验三,禁止 user1 登录 ftp 服务器

1,进入vsftpd的配置文件路径 cd /etc/vsftpd/

其中ftpuser通常是一个专门为FTP访问创建的用户账号。这些用户通常用于管理和配置FTP服务器上的文件访问权限。ftpuser 的具体功能和角色可能会根据不同的FTP服务器软件(如 vsftpd、ProFTPD、Pure-FTPd等)以及系统配置而有所不同。

2,然后设置user1不允许登录,即在ftpusers文件里面写入不允许登录的用户

添加user1,表示user1不允许登录ftp服务器

3,然后验证user1是否还能够登录

发现已经user1不能够登录

实验四,允许,禁止用户访问

1、进入vsftpd的配置文件路径

cd /etc/vsftpd/

ls

2、修改配置文件不允许user2登录 vim user_list

3,验证实验效果

4,见第2步的截图,可以通过修改配置文件/etc/vsftpd/vsftpd.conf调整允许user2登录

vim /etc/vsftpd/vsftpd.conf

userlist_deny=NO #最后一行添加内容

5,重启服务 systemctl restart vsftpd

6,在192.168.23.142验证实验效果

实验五,查找配置文件的帮助手册

1、还原实验三(将配置文件中的userlist_deny=NO删除或者注释)

2、查找帮助 man vsftpd.conf

/EX

n ----按n跳转

max_per_ip

3、修改主配置文件 vim /etc/vsftpd/vsftpd.conf

max_per_ip=1 #最后一行添加

4、因为对主配置文件进行了修改,所以需要重启服务 systemctl restart vsftpd

5、通过windows的command验证实验效果

第一次ftp登录成功 ftp 192.168.23.157

第二次ftp登录失败

实验六,设置 vsftp 的虚拟账户

1,给虚拟用户创建用户数据库

mkdir /vftp

db_load

db_load 是 Berkeley DB 的一个命令行工具,用来将数据从文本文件加载到 Berkeley DB 数据库中。

-T

这个选项指定使用事务模式。在 Berkeley DB 中,事务模式可以确保在对数据库进行读写时,数据的一致性和完整性得以维护。事务模式允许你在发生错误时回滚所有的更改。

-t hash

-t 选项指定数据库的类型为哈希数据库。哈希数据库是基于哈希表实现的,常用于需要快速键值查找的场景。

如果不指定 -t,默认使用 B+ 树类型的数据库,但使用 -t hash 时,会显式告诉 Berkeley DB 使用哈希表作为数据存储结构。

-f /vftp/vuser.txt

-f 选项指定输入文件,也就是数据源文件。/vftp/vuser.txt 是一个包含要加载到数据库的数据的文件。

该文件一般是文本格式,通常每行表示一个键值对,适合导入哈希数据库。

/vftp/vuser.db

这是目标数据库文件,即数据将会被加载到这个文件中。如果这个文件不存在,db_load 会创建一个新的数据库文件。

如果目标数据库已经存在,则会根据选项决定是覆盖还是合并数据,通常需要确保文件权限正确。

注意事项:

  1. 输入文件 /vftp/vuser.txt 必须按照特定的格式组织,比如每行包含一个键值对,适用于哈希表的存储结构。
  2. 如果 /vftp/vuser.db 已经存在,加载数据时要确保没有冲突或覆盖错误

vim /vftp/vuser.txt

admin1

123456

admin2

123456

2,存放用户的txt文件生成数据库

db_load -T -t hash -f /vftp/vuser.txt /vftp/vuser.db

ls /vftp

3,在真实业务环境下,需要修改数据库文件达到合适的权限

chmod 700 /vftp/vuser.db

ls -ld /vftp/vuser.db

4,修改PAM文件

vim /etc/pam.d/vsftpd

需要把原文件默认配置全部注释掉,添加相应字段

auth required pam_userdb.so db=/vftp/vuser #做虚拟认证

account required pam_userdb.so db=/vftp/vuser #做虚拟账户的认证

#认证 请求 pam数据库 数据库文件

批量注释:

1,跳转到批量注释的行

2,按住ctrl +v进入可视化块模式

3,按上下方向键选中要注释的行

4,按I在行首输入

5,按#注释

6,按两次esc

5,创建用户(给虚拟用户做映射)

useradd -d /var/ftp/vuser vuser

chown vuser.vuser /var/ftp/vuser

chmod 555 /var/ftp/vuser

ls -ld /var/ftp/vuser

6、创建文件和目录(为了测试)

mkdir /var/ftp/vuser/dir1

touch /var/ftp/vuser/file1

ls /var/ftp/vuser

7、修改配置文件 vim /etc/vsftpd/vsftpd.conf

12 #anonymous_enable=YES #关闭匿名访问

13 anonymous_enable=NO

30 anon_upload_enable=NO #关闭匿名上传

31 #anon_upload_enable=YES

35 anon_mkdir_write_enable=NO #关闭匿名创建目录

36 #anon_mkdir_write_enable=YES

17 local_enable=YES #开启本地用户登录

104 chroot_local_user=YES #禁锢用户只能在自己的家目录中

105 #chroot_local_user=YES

106 allow_writeable_chroot=YES #添加,允许用户在自己家目录中可写

134 guest_enable=YES #添加,开启虚拟用户登录

135 guest_username=vuser #添加,指定虚拟用户名

136 pam_service_name=vsftpd #指定pam的服务名

120 listen=YES #允许侦听ipv4

121 #listen=NO

130 listen_ipv6=NO #不允许侦听ipv6

131 #listen_ipv6=YES

8、重启服务 systemctl restart vsftpd

9,验证配置效果

ftp 192.168.23.157

ls #列出刚创出来的文件

cd /etc/ #因为配置文件中设置禁锢在自己的家目录中

相关推荐
一叶知秋yyds18 小时前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
瀚高PG实验室18 小时前
审计策略修改
网络·数据库·瀚高数据库
forAllforMe19 小时前
etherCAT的协议VoE,FoE,EoE,CoE的概念和区别
网络
专吃海绵宝宝菠萝屋的派大星19 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
斯普信云原生组19 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
大数据新鸟19 小时前
操作系统之虚拟内存
java·服务器·网络
迷藏49420 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
zmj32032420 小时前
汽车电子内部网络架构图
网络·汽车
safestar201220 小时前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins
来一颗砂糖橘21 小时前
负载均衡的多维深度解析
运维·负载均衡