FTP 文件传输协议

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP 文件传输协议相关的知识,希望对你有一定的参考价值。

FTP:是文件传输协议(file transfer protocol)的缩写。用来实现文件的上传(upload)和下载(download)。
FTP是工作在C/S架构模式下。
C/S架构:是客户端Client/服务器server访问模式。C/S的特点是客户机必须使用专用的客户端程序去访问服务器。
B/S架构:是浏览器Browser、服务器Server访问模式。B/S的特点是客户机只需用IE、Firefox等浏览器来访问服务器。B/S架构通常是用来开发基于web网站的应用程序。

vsftpd:是非常安全的ftp守护进程(Very secure ftp Daemon)。
进程:正在进行(运行running)的程序。
守护进程Daemon:网络服务类的程序都会有守护进程。守护进程是指实时监测服务访问状态的程序。通常都是在系统后台运行。

FTP的工作端口:
21 控制端口,用于在客户机和服务器之间建立连接。
20 数据端口。用于服务器给客户机主动进行数据连接。
网络服务端口号的作用:用来标示服务器上的不同业务(服务)。

服务器:提供服务的机器。

vsftpd的部署思路:(网络服务的部署通用思路)
0.关闭安全功能,并查状态:
systemctl stop firewalld ; setenforce 0
systemctl status firewalld ; getenforce
1.查软件是否已安装,如果未安装就安装软件。
2.启动服务,并允许开机自动启动
3.设置共享目录,重新加载设置。
4.做本地(内测)访问测试,做异地(公测)访问测试。

环境准备:
关闭安全功能,并查状态:
systemctl stop firewalld ; setenforce 0
systemctl status firewalld ; getenforce

vsftpd、ftp、lftp安装:
说明:vsftpd是服务器端程序
ftp、lftp是客户端程序

查是否已安装:rpm -q vsftpd ftp lftp
安装:yum install -y vsftpd ftp lftp
查软件的文件列表:rpm -ql vsftpd
查配置文件列表:rpm -qc vsftpd

vsftpd 服务管理:
重启动服务:systemctl restart vsftpd
允许开启自动启动:systemctl enable vsftpd
查服务状态:systemctl status vsftpd

共享需要的文件:
vsftpd的默认共享目录:
匿名用户(ftp或anonymous)共享:/var/ftp目录
普通用户:访问的是普通用户自己的家目录,通常是"/home/用户名"文件夹
注意:root用户默认不能登录vsftpd服务器来访问共享,因为root账号在黑名单里。

vsftpd的配置文件:rpm -qc vsftpd
/etc/logrotate.d/vsftpd 日志轮滚策略文件
/etc/pam.d/vsftpd pam认证文件(重点)
/etc/vsftpd/ftpusers 黑名单文件(重点)
/etc/vsftpd/user_list 用户访问列表文件(重点),默认是黑名单,但是可以设置成白名单
/etc/vsftpd/vsftpd.conf 服务的主配置文件(重点)

练习:将root用户从ftpusers黑名单文件中注释掉,重启vsftpd服务,用root账号访问共享资源。
第1步:编辑黑名单文件1。
vim /etc/vsftpd/ftpusers 编辑黑名单文件1
#root 在此行行首添加#号

第1步:编辑黑名单文件2。
vim /etc/vsftpd/user_list 编辑黑名单文件2
#root 在此行行首添加#号

第3步:重启服务。(修改黑名单文件是立即生效的,可以不重启服务)。
systemctl restart vsftpd

第四步,做共享访问测试。
win7/10访问vsftpd共享:win+E-->ftp://root:[email protected]

linux用root访问共享:
ftp 192.168.11.11 回车---》用户名root回车--->密码0回车-->看到successful表示登录成功
lftp 192.168.11.11 -u root,0

练习:在centos系统中用useradd 创建tom用户,设置登录密码为tom。然后分别用win7/10和centos做共享访问测试。并在win7/10上传一个文件到用户的家目录中。

问题:什么时候让user_list文件变成白名单?
答:由于当user_list为白名单时,仅允许白名单中的用户访问vsftpd共享。所以当系统中有1万个用户账号时,我只让3个人能访问vsftpd文件共享服务,那么就得用白名单。

练习:在系统中创建3个用户tom、lucy、lily,给他们设置登录密码为0。用windows做ftp访问共享测试,分别上传一个文件到用户的家目录中。
useradd tom
useradd lucy
useradd lily
echo 0 | passwd --stdin tom
echo 0 | passwd --stdin lucy
echo 0 | passwd --stdin lily

win7/10访问共享:
Win+E--> ftp://192.168.11.11回车--->右键菜单-->登录-->用户名和密码-->上传文件。

练习:采用user_list白名单功能,仅允许tom用户访问vsftpd共享。
第一步,将tom用户加入到user_list文件中。
vim /etc/vsftpd/user_list 在文件最后添加如下内容
tom

第二步,将user_list设置成白名单文件。
vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO 找到此行,如果没有就在最后添加此行

第三步,重启vsftpd服务.
systemctl restart vsftpd

第四步,分别用tom、lucy、lily访问共享,看是否只有tom能访问。
win7/10访问共享:
Win+R-->cmd--> ftp 192.168.11.11回车--->用户名和密码-->看登录是否成功( successful)

小结:vsftpd的用户名单监测流程如下:
先监测user_list文件(是黑还是白)----》再监测ftpusers黑名单中是否有这个用户。

练习:将tom用户从ftpusers和user_list文件中删除或用#号注释掉。将/etc/vsftpd/vsftpd.conf主配置文件的userlist_deny=NO这行用#号注释掉,并重启vsftpd服务,最后用tom、lucy、lily做ftp的命令行访问测试,确保这3个用户都能访问共享。

到此:ftpusers和user_list名单文件功能介绍完毕

vsftpd.conf主配置文件:
功能:对vsftpd软件的功能进行设置,可以设置限速、匿名和普通用户访问权限、chroot等功能。

专家建议:修改主配置文件之前,最好备份一下配置文件。备份文件的后缀通常为.bak或.org。
cd /etc/vsftpd ; ls
cp -av vsftpd.conf{,.bak}
说明:-a 是复制时包括源文件的所有(all)的权限和属性、selinux属性都复制给目标文件。而-p选项时复制时不包含selinux属性的。

练习:查看并熟悉vsftpd.conf主配置文件中的默认设置。查看时不包含#开头(^#)的、空白行(^$),要求显示行号。
grep -nEv ‘^#|^$‘ /etc/vsftpd/vsftpd.conf 内容如下(共13行)
12:anonymous_enable=YES 允许匿名访问共享
16:local_enable=YES 允许本地普通用户(是指用useradd创建的用户)访问共享
19:write_enable=YES 允许写操作,即可写权限
23:local_umask=022 本地用户的umask值
37:dirmessage_enable=YES 允许显示目录信息
40:xferlog_enable=YES 允许xferlog日志,xferlog文件路径是/var/log/xferlog文件,仅记录文件的上传和下载日志
43:connect_from_port_20=YES 启用20号端口的连接(data数据端口)
57:xferlog_std_format=YES 启用xferlog标准(std是standard)格式的日志
115:listen=NO 不启用ipv4监听
124:listen_ipv6=YES 启用IPV6监听,会向下兼容ipv4
126:pam_service_name=vsftpd vsftpd的pam用户认证服务文件,是/etc/pam.d/vsftpd文件
127:userlist_enable=YES 启用user_list用户列表文件
128:tcp_wrappers=YES 启用tcp_wrappers防火墙功能,用来做基于IP的TCP访问控制

vsftpd.conf默认设置的功能:
1.允许匿名用访问共享,访问的是/var/ftp目录,且只能下载文件,不能上传文件。
2.允许普通用访问共享,访问的是用户自己的家目录,既能下载文件,也能上传文件。
3.普通用户用ftp命令登录到vsftpd服务器之后,能chroot到服务器的其他目录路径下,此功能不安全,建议关掉。

练习:设置vsftpd.conf配置文件中不允许anonymous匿名用户访问vsftpd共享,重启服务后,做访问测试。测试完毕后,将设置还原,并重启服务。

xferlog是一个上传下载日志。只是记录上传下载。如果要看更加具体的登录的一些日志,需要vsftpd.log日志文件。
例:/var/log/xferog日志文件内容如下。
Tue Jan 22 11:53:35 2019,1 ,::ffff:192.168.11.1 , 2061, /home/tom/qr.png ,b _ i r tom ftp 0 c
发生时间,传输所花时间,客户端IP,文件大小byte,文件名路径,文件传输格式,文件特殊处理标记,i上传或o下载,r真实用户登录,tom用户,ftp服务器名,认证方式为0,认证用户ID为
,传输完成状态为c已完成。

下面解释一下xferlog日志文件中每一列的含义。
列号 列功能 说明 示例
1 发生时间 记录发生的时间 例:SunJun1612:23:532013
2 文件传输时间 传输该文件使用的时间 例:1
3 客户端 客户端主机的IP或主机名 例:192.168.1.100
4 文件大小 单位:字节 例:12
5 文件名 上传或下载的文件名称 例:/pub/dd
6 文件传输类型 a表示ASCII(文本),b(二进制) 例:b
7 包括四种文件特殊处理标记,“_”表不做任何处理,C表示文件时压缩格式,U表示文件是非压缩格式,T表示是tar格式
8 文件传输方向 o表示从服务器到客户端,i相反 例:i
9 用户登录方式 a表示匿名登录,g表示虚拟用户登录,r表示真实用户登录。 例:a
10 用户名称 用户名称 ?(匿名用户)
11 服务器名 一般为FTp ftp
12 认证方式 0表示无,1表示RFC931认证 例:0
13 认证的用户ID 表示无法获得用户ID 例:
14 传输完成状态 c表示完成,i表示没完成 例:i

以上基本上就是我们的xferlog日志记录内容。


vsftpd的chroot牢笼功能:vim /etc/vsftpd/vsftpd.conf 找到如下内容
#chroot牢笼功能:锁定用户在自己的家目录中,即不允许用户访问自己家目录以外的目录。
#chroot_local_user=YES 允许本地用户chroot牢笼功能(change root),默认为NO不启用
#chroot_list_enable=YES 启用chroot_list文件功能,默认NO不启用此功能

(default follows)

#chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路径,默认无此文,需要用户自己创建

chroot牢笼四种情况:
1.全部不锁(默认情况)
2.全部加锁(用两行代码)
3.少数不加锁(用三行代码)
4.少数加锁(用四行代码)

情况1.关闭所有普通用户的牢笼功能(即不锁,默认情况)。设置如下
#chroot_local_user=YES 允许本地用户chroot牢笼功能(change root),默认为NO不启用
#chroot_list_enable=YES 启用chroot_list文件功能,默认NO不启用此功能

(default follows)

#chroot_list_file=/etc/vsftpd/chroot_list

情况2.启用所有普通用户的牢笼功能(即对所有人加锁)。设置如下
chroot_local_user=YES 启用本地用户chroot牢笼功能(change root),默认为NO不启用
allow_writeable_chroot=YES 允许chroot牢笼功能下执行写操作(centos7中必加此行)

测试练习:将vsftpd.conf文件中的chroot_local_user=YES功能启用,重启服务,用tom、lucy用访问共享,执行ls /usr看命令结果。

情况3.给指定的少数普通用户不启用牢笼功能(即少数人不加锁,白名单)。设置如下
chroot_local_user=YES 启用本地用户chroot牢笼功能(change root),默认为NO不启用
allow_writeable_chroot=YES 允许chroot牢笼功能下执行写操作(centos7中必加此行)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路径

测试练习:将vsftpd.conf文件中的chroot_list做如下白名单设置,重启服务,用tom、lucy用访问共享,执行pwd看命令结果。
第1步,编辑vsftpd.conf文件。
vim /etc/vsftpd/vsftpd.conf
启用如下chroot的4行代码
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

第2,修改chroot_list名单文件。(此文件中的用户不启用牢笼功能)
vim /etc/vsftpd/chroot_list 添加如下内容
lucy
lily

第3步,重启服务,分别在ftp命令行用tom、lucy、lily做访问测试,执行pwd命令看显示的工作路径。
测试结果:tom启用了牢笼功能,lucy、lily是不启用牢笼功能的。

情况4.给指定的少数普通用户启用牢笼功能(即少数人加锁,黑名单)。设置如下
#chroot_local_user=YES 启用本地用户chroot牢笼功能(change root),默认为NO不启用
allow_writeable_chroot=YES 允许chroot牢笼功能下执行写操作(centos7中必加此行)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路径

测试练习:将vsftpd.conf文件中的chroot功能做如下chroot_list黑名单设置,重启服务,用tom、lucy用访问共享,执行pwd看命令结果。
第1步,编辑vsftpd.conf文件。
vim /etc/vsftpd/vsftpd.conf
启用如下chroot的4行代码
#chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

第2,修改chroot_list名单文件。(此文件中的用户不启用牢笼功能)
vim /etc/vsftpd/chroot_list 添加如下内容
lucy
lily

第3步,重启服务,分别在ftp命令行用tom、lucy、lily做访问测试,执行pwd命令看显示的工作路径。
测试结果:lucy、lily启用了牢笼功能,tom是不启用牢笼功能的。

练习:将vsftpd.conf配置文件中的chroot功能的配置选项代码全部注释掉。再继续研究新的功能。


需求:实现允许anonymous匿名用户既能下载又能上传文件文件。
需求分析:匿名用户要想对共享目录有rw可读可写的权限,必须满足以下2个条件:
1.文件共享软件必须允许这个用户有可读可写的权限。
2.用户对共享目录自身要有可读可写的权限。
3.匿名用户仅允许上传文件到/var/ftp中的子目录中。如/var/ftp/upload,且ftp匿名用户对upload目录要有可读可写权限。

警告:/var/ftp目录的属主、属组不允许修改,且other权限不允许有w可写权限,否则用ftp匿名用户访问共享时会提示下面这个500错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection

实施参考:
第1步,在vsftpd.conf配置文件中允许anonymous匿名用户有可读可写的权限。
vim /etc/vsftpd/vsftpd.conf 找到如下代码,去掉29、33行的#号
12 anonymous_enable=YES
29 #anon_upload_enable=YES 允许匿名用户上传
33 #anon_mkdir_write_enable=YES 允许匿名用户用mkdir创建目录
anon_other_write_enable=YES 允许匿名用户执行rm删除等操作(添加此行)
anon_world_readable_only=NO 关闭匿名用户只读的限制(为YES时会无法下载)

第2步,用root用户创建/var/ftp/upload目录,权限为777或属主和属组均为ftp,重启vsftpd服务,在win7/10中用ftp匿名用户访问共享ftp://192.168.11.11,上传一个文件到upload共享目录,看是否能传上去。结果是可以匿名用户上传文件到upload目录中。
mkdir -v /var/ftp/upload
chown -v ftp:ftp /var/ftp/upload 或 chmod -v 777 /var/ftp/upload
systemctl restart vsftpd


vsftpd.conf的其他配置选项:man vsftpd.conf
48 #chown_uploads=YES 允许修改上传后的文件的属主和属组
49 #chown_username=whoever 文件的属主、属组修改成当前访问共享的用户
53 #xferlog_file=/var/log/xferlog 指定xferlog日志文件名及其路径,当xferlog_enable为YES时,此项默认为启用
60 #idle_session_timeout=600 (重点)空闲会话超时为600秒(即10分钟),默认开启了,时间是300秒
idle空闲会话超时时间是指用户登录到ftp服务后,n秒都没执行操作,服务器自动将此用户断开连接。(防止客户机占用服务器网络资源)
63 #data_connection_timeout=120 (重点)数据连接超时时间为120秒,默认开启了,时间是300秒
data_connection超时时间是指当客户端下载或上传文件时,由于网络不稳定,当数据掉线时间超过120秒,文件就下载或上传失败。(防止客户机占用服务器网络资源)
67 #nopriv_user=ftpsecure
72 #async_abor_enable=YES 允许异步方式传输数据
83 #ascii_upload_enable=YES 允许以ascii编码方式上传文件,默认为NO,是以binary二进制方式上传
84 #ascii_download_enable=YES 允许以ascii编码方式下载文件,默认为NO,是以binary二进制方式下载
87 #ftpd_banner=Welcome to blah FTP service. (重点)自定义banner欢迎提示语(标语)(用于打广告)
banner_file=/etc/vsftpd/banner.txt (重点)自定义banner标语文件(用于打广告)
91 #deny_email_enable=YES
93 #banned_email_file=/etc/vsftpd/banned_emails

local_max_rate=0 本地用户(普通用户)最大传输速度,0是不限速。单位是byte字节
anon_max_rate=0 匿名用户最大传输速度,0是不限速。单位是byte字节
anon_other_write_enable=YES 允许匿名用户执行除了新建和上传外的其他权限,如删除、改名。

listen_port=21 监听21号端口(默认开启)
pasv_enable=YES 启用pasv被动模式
pasv_min_port=5000 指定pasv被动模式的最小端口号
pasv_max_port=6000 指定pasv被动模式的最大端口号
dual_log_enable=YES 启用/var/log/xferlog 和 /var/log/vsftpd.log 双日志文件(默认关闭)
max_per_ip=数字 单个IP的最大并发量(即单个客户端IP能同时登录的数量),同时下载几个文件
max_clients=数字 最大客户端数量(即并发量),即允许有多少个IP的客户端同时访问服务器

user_config_dir=/etc/vsftpd/userconf 定义用户个人配置文件所在目录。定义了这句之后,就要在userconf目录中创建以用户名命名的文件,这就是这个用户的配置文件。其中加入一条local_root=/home/ftp为指定用户登录目录。
setproctitle_enable=YES 将所有连接以不同的进程体现出来

练习:要求在vsftpd.conf中对每个用户限制不同的文件传输速度,并且设置不同的登录“标示语”。
第1步,在vsftpd.conf配置文件中添加如下功能选项。
vim /etc/vsftpd.conf 添加如下内容
user_config_dir=/etc/vsftpd/userconf 指定用户个性化配置文件的主目录

第2步,创建/etc/vsftpd/userconf目录,给tom限制上传和下载速度为2MB/s(约2000000字节)。
mkdir -v /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/tom 添加如下设置内容
local_max_rate=2000000

第3步,参考lucy的限速设置方法,给lucy设置成限制上传和下载速度为8M/s(约2000000字节)。
vim /etc/vsftpd/userconf/tom 添加如下设置内容
local_max_rate=8000000


vsftpd的tcp_wrapers防火墙设置
查网络服务对应的端口手册文件:more /etc/services
tcp_wrapers的功能:是一个迷你的TCP防火墙,可以用来做基于TCP协议的应用程序的IP安全访问控制。
配置文件:
白名单:/etc/hosts.allow
黑名单:/etc/hosts.deny

技巧:让少数人为白户,那么先在hosts.deny中做拒绝所有(all)黑名单,然后在hosts.allow中做少数IP的放行白名单。

配置文件格式:man hosts.allow
格式说明: 守护进程名称:主机名或IP地址
守护进程名称可以是:vsftpd、sshd、httpd、in.tftpd等。
主机名或IP地址可以是:all所有主机、主机名、域名(网址)、IP地址、网络地址、IP地址范围。

设置举例:
vim /etc/hosts.deny 黑名单
vsftpd:192.168.11.1 拒绝192.168.11.1这台主机访问vsftpd共享
sshd:192.168.11.1 拒绝192.168.11.1这台主机访问sshd共享

注意:做完hosts.deny黑名单测试后,请将hosts.deny文件中的设置注释掉或删掉。然后再做下面的vsftpd虚拟用户项目。

vsftpd虚拟用户
虚拟用户:即非useradd创建的用户账号(非/etc/passwd中的账号),而是用vim创建的属于vsftpd的独立用户账号。
虚拟用户的优势:可以避免系统中的用户账号过多,让vsftpd文件共享软件独立管理自己的用户账号。

虚拟用户账号文件格式:
文件中的奇数行是用户账号,偶数行是用户的密码。

vsftpd的虚拟用户方案思路:
0.准备工作:确保vsftpd文件共享服务已安装,并已启动vsftpd服务,且关闭了selinux和firewalld安全功能。
1.创建虚拟用户账号文件。
2.将虚拟用户账号用db_load转换成加密的数据库格式文件。
3.在vsftpd的pam认证文件中添加虚拟用户账号文件的认证关系。
4.用useradd创建一个普通用户账号vftper。
5.在vsftpd.conf配置文件中启用guest来宾(即虚拟用户)功能,设置一个真实用户账号,并将真实用户账号vftper和虚拟用户账号文件关联起来。
6.给每个虚拟用户账号设置独立的共享访问速度和访问目录。
7.重启vsftpd服务,并分别用虚拟用户账号访问共享。

vsftpd虚拟用户实施思路:
0.准备工作:确保关闭了selinux和firewalld安全功能。且vsftpd文件共享服务已安装,并已启动vsftpd服务。
setenforce 0
getenfroce
systemctl stop firewalld
systemctl status firewalld

1.创建虚拟用户账号文件。
cat > /etc/vsftpd/vuser.txt <<EOF
f1
passf1
f2
passf2
f3
passf3
EOF

2.将虚拟用户账号转换成加密的数据库格式文件。
yum provides db_load
yum install -y libdb-utils
cd /etc/vsftpd
ls
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuserdb.db
chmod -v 600 /etc/vsftpd/vuserdb.db

db_load选项:
-T 是translation转换文件格式
-t hash 指定格式转换的算法为hash算法
-f 是指定要转换格式的文件
/etc/vsftpd/vuser.txt 是要转换格式的文件
/et/vsftpd/vuserdb.db 是转换格式之后的文件

3.在vsftpd的pam认证文件中添加虚拟用户账号文件的认证关系。
cp -av /etc/pam.d/vsftpd{,.bak}
vim /etc/pam.d/vsftpd 做如下修改
#%PAM-1.0
#以下两行的功能:仅能实现虚拟用户访问共享,普通用户不能访问共享。(不建议使用)
#required 意思是必须的 sufficient 意思是满足的、备选的
#auth required pam_userdb.so db=/etc/vsftpd/vuserdb
#account required pam_userdb.so db=/etc/vsftpd/vuserdb
#以下功能选项的功能:既能让虚拟用户访问共享,也能让普通用户访问共享。(推荐使用)
auth sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
account sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
#以下几行功能选项是vsftpd的默认pam认证文件内容。(无需修改)
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth

4.用useradd创建一个普通用户账号vftper。
useradd vftper -s /sbin/nologin
id vftper
ls -ld /home/vftper

5.在vsftpd.conf配置文件中设置一个真实用户账号,并将真实用户账号vftper和虚拟用户账号文件关联起来。
cd /etc/vsftpd
cp -av vsftpd.conf{,.bak}
cat /etc/vsftpd/vsftpd.conf
vim vsftpd.conf 在文件最后添加如下内容
guest_enable=YES 允许来宾用户访问共享,即虚拟用户
guest_username=vftper 指定来宾用户名为vftper用户(即第4步新建的用户)
user_config_dir=/etc/vsftpd/vuser_conf 指定用户配置文件目录
allow_writeable_chroot=YES 允许chroot功能下执行写操作(必须加此行,否则会登录失败)
#user_sub_token=$USER 使用用户子令牌(通常不用)

6.给每个虚拟用户账号设置独立的共享访问速度和访问目录。
cd /etc/vsftpd
mkdir -v vuser_conf
cd vuser_conf
#创建f1、f2虚拟用户的会员个性化设置文件,允许f1这个虚拟用户在自己的家目录中可读可写。
touch f1 f2
mkdir -v /home/vftper/{f1,f2,f3}
chmod -v 777 /home/vftper/{f1,f2,f3}
cat > f1 <<EOF
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vftper/f1
EOF

#允许f2这个用户在自己的家目录中可读,但不可写。
cat > f2 <<EOF
#添加local_root这行即可,其余内容可以不添加。
local_root=/home/vftper/f2
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

EOF

7.重启vsftpd服务,并分别用虚拟用户账号访问共享。
systemctl restart vsftpd
ftp 192.168.11.11 -->用f1、f2虚拟用户分别访问共享,测试文件的上传。

到此,vsftpd的虚拟用户项目试验完毕。


ftp和lftp客户端程序的操作功能:

ftp命令:
用法:ftp [选项] 主机名或IP地址

练习:用tom用户登录到ftp 192.168.11.11服务器上,执行如下的ftp内部命令。

ftp的内部操作命令:
help或? 显示命令帮助
pwd 显示远程工作目录路径
ls 显示远程文件名列表
!本地命令 执行客户机本地的操作命令,如!date 、 !ls
lcd 切换或查询本地(local)路径,如 lcd /etc 、 lcd /opt
cd 切换远程网络资源路径
put 上传单个本地当前目录下的文件到远程服务器的的当前工作目录下.如put group
mput 上传多个本地当前目录下的文件到(同上),如 mput hosts
get 下载单个文件到当前的本地工作目录下,如 get group
mget 下载多(multi)个文件到当前的本地工作目录下,如 mget host

注意:put、mput、get、mget操作只用对本地当前工作目录中的文件操作。
prompt 关闭或开启交互式模式,即是否提示yes、no
verbose 开启或关闭执行过程进度
delete 删除服务器上的单个文件
mdelete 删除服务器上的多个文件,如 mdelete hosts*
mkdir 在共享目录中新建目录,如 mkdir haha
rmdir 在共享目录中删除目录,如 rmdir haha
passive 关闭或开启ftp的被动数据传输模式
user 切换用户登录账号
rename 修改共享目录中的文件名

lftp命令:
用法:ftp [选项] 主机名或IP地址
例:lftp 192.168.11.11 -u tom,0
说明:-u 是指定用户名和密码,两者间用逗号分隔

练习:用tom用户登录到ftp 192.168.11.11服务器上,执行如下的ftp内部命令。
lftp 192.168.11.11 -u tom,0

lftp的内部操作命令:
help或? 显示命令帮助
pwd 显示远程工作目录路径
ls 显示远程文件名列表
!本地命令 执行客户机本地的操作命令,如!date 、 !ls
lcd 切换或查询本地(local)路径,如 lcd /etc 、 lcd /opt
cd 切换远程网络资源路径
put 上传单个本地当前目录下的文件到远程服务器的的当前工作目录下.如put /etc/group
mput 上传多个本地当前目录下的文件到(同上),如 mput /etc/host
get 下载单个文件到当前的本地工作目录下,如 get group
mget 下载多(multi)个文件到当前的本地工作目录下,如 mget host

mirror 下载共享目录中当前的所有文件到本地的当前目录下
mrm 删除共享目录中的多个文件,mrm删目录需要用-r选项,如 mrm host*
注意:put、mput、get、mget操作可用绝对路径。


win7/10下的ftp客户端软件:
ftp、资源管理器(Win+E)、flashFXP

flashFXP客户端软件:优点是支持断点续传功能。
断点续传:是指客户机重启系统后可以继续下载未完成文件内容。


ftp的工作模式:主动port、被动passive模式

ftp主动(port)模式工作过程:
1.客户机和服务器建立连接关系(登录): 客户机(>1024的随机端口号) <----> 服务器 21号port
2.双方建立数据连接关系,传输数据:客户机(>1024的随机port) <----> 服务器 20号port

ftp被动(pasv)模式工作过程:
1.客户机和服务器建立连接关系(登录): 客户机(>1024的随机端口号) <----> 服务器 21号port
2.双方建立数据连接关系,传输数据:客户机(>1024的随机port) <----> 服务器(>1024的随机port)
说明:当ftp服务器上有防火墙时,通常客户机是以被动模式去访问ftp服务器的。在ftp服务器的vsftpd.conf和防火墙上要指定放行的被动模式端口范围的最小值和最大值。
vsftpd.conf 的被动模式端口范围:
pasv_min_port=5000
pasv_max_port=6000

vsftpd共享小结:
1.ftp是什么?实现什么功能?2个工作端口?
2.vsftpd的查、安装、启动、允许开机自启动、查状态、查配置文件?
3.vsftpd黑、白名单。ftpusers、user_list。
4.vsftpd.conf主配置文件的功能选项。如限速、并发量、banner标示语等设置。
5.vsftpd的chroot牢笼功能。熟悉四行chroot的代码。
6.ftp、lftp是客户端程序的命令使用:通过命令做文件的上传、下载。
7.vsftpd的虚拟用户(guest来宾用户)功能。
8.vsftpd的匿名用户上传功能的实现。
9.ftp服务的主、被动模式工作过程。主、被动模式的区别?

以上是关于FTP 文件传输协议的主要内容,如果未能解决你的问题,请参考以下文章

文件传输协议FTP

文件传输协议

FTP文件传输协议

FTP文件传输协议之vsftpd服务

文件传输协议----FTP

文件传输协议(FTP)