目录
一.简介
二. FTP基础
主动模式(Active Mode):
被动模式(Passive Mode):
三. Vsftp 服务器简介
四. Vsftpd配置
1. 安装vsftpd(ftp服务端)
2.编辑配置文件 (ftp服务端)
3. FTP Clinet(lftp客户端)
4. FTP配置本地用户登录
4.1 创建 zhangsan、lisi 密码都设置为 “123456”
4.2 配置本地用户ftp配置文件
4.3在客户端操作(lftp)
一.简介
FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上传输文件的标准协议。它允许用户通过网络连接到FTP服务器,并在客户端和服务器之间传输文件。
LFTP是一个基于命令行的FTP客户端程序,它是FTP的一个实现。与标准的FTP客户端相比,LFTP提供了更多的功能和灵活性,包括支持多个连接、断点续传、脚本编程等。
以下是FTP和LFTP之间的一些区别和特点:
-
功能和灵活性:
- FTP是标准的文件传输协议,提供基本的文件传输功能,但在功能和灵活性方面受到一些限制。
- LFTP是一个功能强大的FTP客户端程序,提供了许多高级功能,如多连接支持、断点续传、脚本编程等。它更适合于复杂的文件传输任务和自动化操作。
-
命令行界面:
- FTP客户端通常有图形用户界面(GUI)和命令行界面(CLI)两种版本。CLI版本通常使用命令行来执行文件传输操作。
- LFTP是一个纯命令行的FTP客户端程序,所有操作都通过命令行执行。
-
使用场景:
- FTP通常用于简单的文件传输任务,如上传和下载文件。
- LFTP更适用于复杂的文件传输需求,如需要同时传输多个文件或者需要使用脚本自动化文件传输操作的情况。
二. FTP基础
FTP Server
作用:提供文件共享服务,实现上传下载
端口:
21号,建立tcp连接 默认端口
20号:传输数据
软件包: vsftpd
FTP端口: 控制端口:21/tcp
配置文件: /etc/vsftpd/vsftpd.conf
FTP协议中的主动模式(Active Mode)和被动模式(Passive Mode)是用于建立数据连接的两种不同方式。在FTP传输过程中,除了控制连接(用于发送命令和响应)外,还需要建立数据连接来传输文件和目录列表等数据。主动模式和被动模式主要影响了数据连接的建立方式。
-
主动模式(Active Mode):
- 在主动模式中,FTP客户端向服务器的端口20发起连接,用于传输数据。
- 在数据传输之前,FTP客户端会向FTP服务器的端口20发送一个PORT命令,其中包含了客户端用于数据传输的IP地址和端口号。
- 服务器收到PORT命令后,会主动连接到客户端指定的IP地址和端口,然后进行数据传输。
-
被动模式(Passive Mode):
- 在被动模式中,FTP客户端向服务器的端口21发起连接,用于发送命令和控制连接。
- 在数据传输之前,FTP客户端会向FTP服务器发送一个PASV命令,服务器在一个范围的高端口中选择一个端口并将其通知给客户端。
- 客户端收到服务器返回的被动端口后,会建立一个新的数据连接,连接到服务器选择的端口上,然后进行数据传输。
主动模式和被动模式的区别在于数据连接的建立方式。在主动模式中,服务器主动连接到客户端指定的端口,而在被动模式中,客户端主动连接到服务器选择的端口。被动模式通常用于解决防火墙和网络地址转换(NAT)等环境下的问题,因为它可以减少对防火墙的配置要求。
三. Vsftp 服务器简介
vsftpd(Very Secure FTP Daemon)是一个开源的FTP服务器软件,它专注于安全性、性能和稳定性。vsftpd 服务器以其简单、轻量级和高性能而闻名,并且广泛用于Linux和Unix系统中。
以下是vsftpd服务器的一些特点和功能:
-
安全性:
- vsftpd致力于提供高级的安全功能,包括支持SSL/TLS加密、虚拟用户、限制用户访问权限等。
- 通过SSL/TLS加密传输,vsftpd可以提供数据的加密传输,防止数据在传输过程中被窃听或篡改。
-
性能:
- vsftpd被设计为高性能的FTP服务器,具有较低的内存消耗和高效的文件传输速度。
- 它支持异步I/O和多线程处理,能够处理大量的并发连接和高负载的FTP访问。
-
灵活性:
- vsftpd提供了丰富的配置选项,可以根据用户的需求进行灵活配置。
- 它支持用户和组的管理,允许管理员创建虚拟用户、限制用户的访问权限、限制用户的上传和下载速度等。
-
轻量级:
- vsftpd是一个轻量级的FTP服务器软件,它的代码简洁、清晰,并且运行稳定。
-
易于部署和管理:
- vsftpd易于安装、配置和管理,可以快速部署一个安全、高性能的FTP服务器。
- 它提供了丰富的文档和在线资源,以帮助管理员进行配置和管理。
四. Vsftpd配置
实验环境--准备两台机器,修改其主机名用来区分
#对192.168.226.100修改主机名
hostnamectl set-hostname ftp-server
#对192.168.226.130修改主机名
hostnamectl set-hostname client
都关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1. 安装vsftpd(ftp服务端)
[root@ftp-server ~]# yum install -y vsftpd #下载
[root@ftp-server ~]# systemctl start vsftpd #启动
[root@ftp-server ~]# systemctl enable vsftpd #开机自启
FTP默认共享目录:/var/ftp
[root@ftp-server ~]# mkdir /var/ftp/upload #创建自己的共享目录
[root@ftp-server ~]# touch /var/ftp/upload/test.txt #创建文件到共享目录
[root@ftp-server ~]# cd /var/ftp/
[root@ftp-server ftp]# ls
pub upload
#修改ftp目录下所有文件的属主与属组,当时ftp目录切记不能自己修改,只能修改ftp目录下的文件
[root@ftp-server ftp]# chown ftp.ftp * -R
[root@ftp-server ftp]# ll
总用量 0
drwxr-xr-x 2 ftp ftp 6 6月 10 2021 pub
drwxr-xr-x 2 ftp ftp 22 5月 14 14:53 upload
-
重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用户的身份访问的,而默认的属主属组是root。
-
注意: - 修改完配置之后需要重启完服务才能生效
- 还需要从新从客户端登陆,否则修改后的配置看不到效果。
2.编辑配置文件 (ftp服务端)
#找到下面的这些配置选项,取消注释,如果每找到就新增即可,但开启的参数避免重复引发报错
[root@ftp-server ftp]# vi /etc/vsftpd/vsftpd.conf +29
anon_umask=022 #添加匿名用户上传下载目录权限掩码,022 表示匿名用户上传的文件将会具有权限 rw-r--r--
anon_upload_enable=YES #这个选项用于允许匿名用户上传文件到FTP服务器
anon_mkdir_write_enable=YES #这个选项允许匿名用户在FTP服务器上创建目录(文件夹)
anno_other_write_enable=YES #这个选项用于允许其他用户对匿名用户上传的文件进行写操作
#重启服务
[root@ftp-server ftp]# systemctl restart vsftpd
3. FTP Clinet(lftp客户端)
注意关闭防火墙和selinux
[root@client ~]# yum -y install lftp #安装客户端
1.get命令(下载,首先要开启下载功能
[root@client ~]# lftp 192.168.226.100
lftp 192.168.226.100:~> ls
drwxr-xr-x 2 14 50 6 Jun 09 2021 pub
drwxr-xr-x 2 14 50 22 May 14 06:53 upload
lftp 192.168.226.100:/> cd upload/
lftp 192.168.226.100:/upload> ls
-rw-r--r-- 1 14 50 0 May 14 06:53 test.txt
lftp 192.168.226.100:/upload> get test.txt #下载
lftp 192.168.226.100:/upload> exit
[root@client ~]# ls #会下载到当前目录
anaconda-ks.cfg test.txt
2.put命令(上传命令,上传之前请在服务端进行配置,将上传功能打开)
[root@client ~]# touch /ceshi.txt #创建测试文件
[root@client ~]# mkdir /yut/ #创建测试目录
[root@client ~]# touch /yut/b.txt #在测试目录下面创建测试文件
[root@client ~]# lftp 192.168.226.100
lftp 192.168.226.100:~> cd upload/
cd 成功, 当前目录=/upload
lftp 192.168.226.100:/upload> put /ceshi.txt #上传文件
lftp 192.168.226.100:/upload> ls
-rw------- 1 14 50 0 May 14 07:50 ceshi.txt
-rw-r--r-- 1 14 50 0 May 14 06:53 test.txt
lftp 192.168.226.100:/upload> mirror -R /yut/ #上传目录以及目录中的子文件
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
2 bytes transferred
lftp 192.168.226.100:/upload> ls
-rw-r--r-- 1 14 50 0 May 14 08:30 ceshi.txt
-rw-r--r-- 1 14 50 0 May 14 06:53 test.txt
drwxr-xr-x 2 14 50 19 May 14 08:43 yut
lftp 192.168.226.100:/upload> mkdir tty #创建文件夹
mkdir 成功, 建立 `ty'
lftp 192.168.226.100:/upload> rm ceshi.txt #删除ceshi.txt
rm 成功, 删除 `ceshi.txt'
lftp 192.168.226.100:/upload> ls
-rw-r--r-- 1 14 50 0 May 14 06:53 test.txt
drwxr-xr-x 2 14 50 6 May 14 08:28 tty
drwx------ 2 14 50 19 May 14 08:19 yut
lftp 192.168.226.100:/upload> mirror yut/ #下载目录
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
2 bytes transferred
lftp 192.168.226.100:/upload> exit #退出
[root@client ~]# ll
总用量 4
-rw-------. 1 root root 1257 4月 30 23:34 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 5月 14 14:53 test.txt
drwxr-xr-x 2 root root 19 5月 14 16:45 yut
[root@client ~]# cd yut
[root@client yut]# ls
b.txt
4. FTP配置本地用户登录
4.1 创建 zhangsan、lisi 密码都设置为 “123456”
[root@ftp-server ~]# useradd zhangsan
[root@ftp-server ~]# useradd lisi
[root@ftp-server ~]# echo '123456' | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ftp-server ~]# echo '123456' | passwd --stdin lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
4.2 配置本地用户ftp配置文件
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
#对如下参数找到并进行添加注释并修改
anonymous_enable=NO #将允许匿名登录关闭
#anon_umask=022 #匿名用户所上传文件的权限掩码
#anon_upload_enable=YES #允许匿名用户上传文件
#anon_mkdir_write_enable=YES #允许匿名用户创建目录
#anon_other_write_enable=YES #是否允许匿名用户有其他写入权(改名,删除,覆盖)
103 chroot_list_enable=YES #启用限制登陆用户在主目录里面
104 # (default follows)
105 chroot_list_file=/etc/vsftpd/chroot_list #限制登陆的用户在这个文件列表中,一行一个用户
#需要添加的参数:
allow_writeable_chroot=YES #允许限制的用户对目录有写权限
local_root=/home/zhangsan # 设置本地用户的FTP根目录,一般为用户的家目录
local_max_rate=0 # 限制最大传输速率(字节/秒)0为无限制
[root@ftp-server ~]# vim /etc/vsftpd/chroot_list #新增zhangsan
zhangsan
#重启服务
[root@ftp-server ~]# systemctl restart vsftpd
4.3在客户端操作(lftp)
[root@client ~]# lftp 192.168.226.100 -u zhangsan
口令:
lftp zhangsan@192.168.226.100:~> ls
lftp zhangsan@192.168.226.100:~> mkdir uuio
mkdir 成功, 建立 `uuio'
lftp zhangsan@192.168.226.100:~> mkdir tgh
mkdir 成功, 建立 `tgh'
lftp zhangsan@192.168.226.100:~> put /root/test.txt
lftp zhangsan@192.168.226.100:~> ls
-rw------- 1 1000 1000 0 May 14 09:25 test.txt
drwx------ 2 1000 1000 6 May 14 09:29 tgh
drwx------ 2 1000 1000 6 May 14 09:25 uuio
lftp zhangsan@192.168.226.100:~> rm -rf tgh
rm 成功, 删除 `tgh'
lftp zhangsan@192.168.226.100:~> ls
-rw------- 1 1000 1000 0 May 14 09:25 test.txt
drwx------ 2 1000 1000 6 May 14 09:29 uuio
#现在切换回服务端查看有无刚刚在客户端上传和创建的文件
#服务器端查看
[root@ftp-server ~]# cd /home/zhangsan/
[root@ftp-server zhangsan]# ll
总用量 0
-rw------- 1 zhangsan zhangsan 0 5月 14 17:25 test.txt
drwx------ 2 zhangsan zhangsan 6 5月 14 17:25 uuio
4.4 lftp常用命令总结
get | 下载单个文件 |
mget | 下载多个文件 |
mirror | 下载目录 |
put | 上传单个文件 |
mput | 上传多个文件 |
mirror -R | 上传目录 |
mkdir | 创建目录 |
rm -rf | 删除文件或者目录 |