FTP(File Transfer Protocol,文件传输协议)
一种用于在计算机网络中传输文件的标准协议。它允许用户通过客户端程序与远程服务器进行文件交换,支持文件的上传、下载、删除、重命名等操作。FTP服务常用于将网站文件上传到服务器,或者在公司内部网络中共享大文件。
FTP工作原理
FTP基于客户端-服务器模型,工作时使用两个独立的连接:控制连接和数据连接。
- 控制连接(Command Channel):
- 控制连接用于发送命令和接收响应,如登录、文件操作等。控制连接通常使用TCP端口21。
- 控制连接是一个持久化的连接,即在会话期间保持打开,直到会话结束。
- 数据连接(Data Channel):
- 数据连接用于实际传输文件。每当需要传输文件时,客户端和服务器会建立一个新的数据连接。
- 数据连接可以是主动模式(PORT模式)或被动模式(PASV模式)。在主动模式下,客户端在本地打开一个端口等待服务器连接;在被动模式下,服务器在其端口上等待客户端连接。
FTP的工作模式
- 主动模式(PORT模式):
- 在客户端发出连接请求后,客户端告诉服务器自己打开了一个端口用于接收数据,服务器则向该端口发起连接。
- 这种模式的缺点是客户端必须在防火墙外部,或者防火墙必须允许客户端向外发起连接。
- 被动模式(PASV模式):
- 在被动模式下,客户端发起控制连接后,服务器告诉客户端其将用于数据传输的端口,客户端再向这个端口发起连接。
- 被动模式通常用于客户端在防火墙后时的连接,能够避免防火墙阻止数据连接的建立。
FTP的主要特点
- 双向传输:
- FTP支持文件的双向传输,既可以上传文件,也可以从服务器下载文件。
- 命令和响应协议:
- FTP的控制连接基于文本命令和响应,命令遵循标准格式,如USER、PASS、LIST、GET、PUT等。
- 支持匿名访问:
- FTP服务器可以配置为支持匿名登录,这意味着用户不需要提供用户名和密码即可访问公共文件夹。
- 支持大文件传输:
- FTP支持大文件的传输,适合传输大量数据或大文件。
- 安全性问题:
- 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客户端程序包括:
- FileZilla:开源的FTP客户端,支持FTP、FTPS和SFTP。
- WinSCP:Windows平台的FTP客户端,支持多种协议。
- Cyberduck:支持FTP、SFTP、WebDAV等协议的跨平台客户端。
安全性与FTP的扩展
为了提高FTP的安全性,除了FTPS和SFTP外,还有其他一些增强安全性的协议和扩展:
- FTPS:FTP Secure,基于SSL/TLS加密传输。
- SFTP:SSH File Transfer Protocol,基于SSH协议加密传输,通常与SSH一同使用。
- 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 会创建一个新的数据库文件。
如果目标数据库已经存在,则会根据选项决定是覆盖还是合并数据,通常需要确保文件权限正确。
注意事项:
- 输入文件 /vftp/vuser.txt 必须按照特定的格式组织,比如每行包含一个键值对,适用于哈希表的存储结构。
- 如果 /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/ #因为配置文件中设置禁锢在自己的家目录中