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

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/    #因为配置文件中设置禁锢在自己的家目录中


http://www.kler.cn/a/417943.html

相关文章:

  • 07.ES11 08.ES12
  • 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程
  • 大数据治理:解锁数据价值,引领未来创新
  • Java有关数组的相关问题
  • Cesium在vue2中的引入和注意事项
  • k8s--pod创建、销毁流程
  • 技术文档的高质量翻译对俄罗斯汽车推广的影响
  • 嵌入式C语言学习——8:GNU扩展
  • vue.js学习(day 14)
  • 从缓存到分布式缓存的那些事
  • 游戏引擎学习第27天
  • Python 在Excel中插入、修改、提取和删除超链接
  • Vivo手机投屏到Windows笔记本电脑,支持多台手机投屏、共享音频!
  • 【linux学习指南】详解Linux进程信号保存
  • Python `def` 函数中使用 `yield` 和 `return` 的区别
  • git安装与配置与相关命令
  • Matlab搜索路径添加不上
  • 人脸识别API解锁智能生活、C++人脸识别接口软文
  • Apache SeaTunnel 自定义连接器适配华为大数据平台集成组件ClickHouse
  • FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
  • sentinel使用手册
  • 基于java注解实现websocket详解
  • 如何更好地设计SaaS系统架构
  • MATLAB期末复习笔记(上)
  • 基于Java Springboot 求职招聘平台
  • 爬虫框架快速入门——Scrapy