当前位置:网站首页>FTP 服务器
FTP 服务器
2022-07-27 09:56:00 【不会就跑路的小白】
FTP 简介
FTP(File Transfer Protocol,文件传输协议)是用于在网络上进行文件传输的一套标准协议,它属于网络传输协议的应用层。它最主要的功能是在服务器与客户端之间进行文件的传输。这个协议使用的是明文传输。为了更安全的使用FTP协议,只介绍较为安全但功能较少的vsftpd这个软件。
FTP服务器的功能除了单纯的进行文件的传输与管理外,依据服务器软件的配置架构,它还可以提供以下几个主要功能:
1、不同的用户:
FTP服务器在默认的情况下,依据用户登录的情况而分为三种不同的身份,分别是:实体用户,real user;访客,guest;匿名用户,anonymous。
2、命令记录与日志文件记录
FTP可以利用系统的syslogd来进行数据的记录,而记录的数据包括了用户曾经使用过的命令与用户传输数据(传输时间、文件大小等)的记录,所以你可以在/var/log/里面找到各项日志信息。
3、限制用户活动的目录(change root,简称chroot).
为了避免用户在你的linux系统中随意切换目录,所以将用户的工作范围局限在用户主目录下面。FTP可以限制用户仅能在自己的用户主目录当中活动。当用户登录FTP后,由于用户无法离开自己的用户主目录,显示的根目录就是自己用户主目录的内容。这种环境称为change root,即chroot,即改变根目录的意思。
ftp 工作过程
FTP的传输使用的是TCP数据包协议。FTP服务器使用了两个连接,分别是命令通道与数据流通道。由于是TCP数据包,这两个连接都需要经过三次握手。
建立命令通道的过程
客户端会随机获取一个大于1024以上的端口来与FTP服务器端的port 21来实现连接,这个过程需要三次握手。实现连接后客户端便可以通过这个连接来对FTP服务器执行命令,查询文件名、下载、上传等命令都是利用这个通道来执行的。
建立数据通道的过程
FTP服务器主动向客户端连接
(1)通知FTP服务器端使用主动连接且告知连接的端口号**FTP服务器的端口21号主要用在命令的执行,但是牵涉到数据流时,就不是使用这个连接了。**客户端在需要数据的情况下,会告知服务器端要用什么方式来连接,如果是主动连接,客户端会先随机启用一个端口,且通过命令通道告知FTP服务器这两个信息,并等待FTP服务器的连接。
FTP服务器主动向客户端连接
FTP服务器由命令通道了解客户端的需求后,会主动地由port 20向客户端的数据端口连接,这个连接也会经过三次握手。此时FTP的客户端与服务器端会建立两条连接,分别用在命令的执行与数据的传递。而默认FTP服务器端使用的主动连接端口就是port 20。
数据传输通道是在有数据传输的行为时才会建立的通道,并不是一开始连接到FTP服务器就立刻建立的通道。
注意:port 21主要接收来自客户端的主动连接,port 20则为FTP服务器主动连接至客户端。
图解:
客户端选择被动式连接模式
客户端通过命令通道发出被动式连接要求,并等待服务器的回应。
FTP服务器启动数据端口,并通知客户端连接
如果你所使用的FTP服务器是能够处理被动式连接的,此时FTP服务器会先启动一个监听端口。这个端口号码可以是随机的,也可以自定义某一范围的端口,这要看FTP服务器软件而定。然后FTP服务器会通过命令通道告知客户端这个已经启动的端口port pasv,并等待客户端的连接。
客户端随机取用大于1024的端口进行连接
然后客户端会随机取用一个大于1024的端口号来进行对主机的port pasv连接。如果一切都没有问题的话,那么FTP数据就可以通过客户端的随机端口和服务端的port pasv来传送了。
图解:
搭建ftp服务器
ftp配置文件解析
[[email protected] ~]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES #是否允许匿名用户登录vsftpd主机
16 local_enable=YES #是否允许/etc/passwd内的账号登录vsftpd服务器
19 write_enable=YES #是否允许用户上传数据
23 local_umask=022 #默认本地用户上传普通文件权限掩码
29 #anon_upload_enable=YES #是否允许匿名用户上传文件
33 #anon_mkdir_write_enable=YES #是否让匿名用户具有建立目录的权限。
37 dirmessage_enable=YES #当用户进入某个目录时,会显示该目录需要注意的内容
40 xferlog_enable=YES #设置为YES时,用户上传与下载文件都会被记录下来
43 connect_from_port_20=YES #主动请求的数据端口
53 #xferlog_file=/var/log/xferlog #如果xferlog_enable=YES,这里就可以设置日志文件的文件名
57 xferlog_std_format=YES
60 #idle_session_timeout=600 #如果用户在600秒内都没有命令操作,强制脱机。
63 #data_connection_timeout=120 #如果服务器与客户端的数据连接已经成功建立,但是由于线路问题导致120秒内还是无法顺利的完成数据的传送,那客户端的连接就会被强制断开
67 #nopriv_user=ftpsecure #设置一个执行vsftpd服务的用户
82 #ascii_upload_enable=YES #为YES表示客户端默认使用ascii格式上传文件
83 #ascii_download_enable=YES #如果设置为YES,那么client就默认使用ASCII格式下载文件
90 #deny_email_enable=YES #将某些特殊的email address阻挡住
92 #banned_email_file=/etc/vsftpd/banned_emails #如果deny_email_enable=YES,可以利用这个设置项目来规定哪个email address不可登录我们的vsftpd。在上面设置的文件内,一行输入一个email address即可
100 #chroot_local_user=YES #是否将用户限制在自己的主目录之内,如果是YES代表用户会被限制在自己的主目录之内
101 #chroot_list_enable=YES 是否启用chroot写入列表的功能
103 #chroot_list_file=/etc/vsftpd/chroot_list 如果chroot_list_enable=YES就可以设置这个项目,这个项目与chroot_local_user有关
114 listen=NO
123 listen_ipv6=YES
125 pam_service_name=vsftpd #设置PAM认证模块名称为vsftpd
126 userlist_enable=YES #是否借助vsftpd的阻挡机制来处理某些不受欢迎的账号
127 tcp_wrappers=YES #服务端和客户端访问控制策略
实验一 匿名用户登录登陆
实验要求:
a.具有上传文件权限
b.具有创建目录权限
c.具有删除目录和文件权限
第一步:配置解析文件: /etc/vsftpd/vsftpd.conf
[[email protected] vsftpd]# vim vsftpd.conf
anonymous_enable=yes #允许匿名用户登录vsftpd主机
anon_umask=022 #匿名用户上传普通文件权限掩码
ftp_username=ftp #定义匿名登入的使用者名称。默认值为ftp。
anon_upload_enable=YES #允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。
no_anon_password=YES #使用匿名登入时,不会询问密码
anon_mkdir_write_enable=YES #允许匿名登入者有新增目录的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。
anon_other_write_enable=YES #允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。
anon_root=/var/ftp #匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限。
write_enable=YES #允许登陆用户有写权限
注意:这里需要/var/ftp/目录下的 pub目录的权限
[[email protected] ftp]# ll
total 4
drwxr-xr-x. 2 root root 6 Feb 17 2020 pub
[[email protected] ftp]# chmod 777 pub/
第二步:启动ftp服务
[[email protected] vsftpd]# systemctl restart vsftpd
[[email protected] vsftpd]# systemctl stop firewall
[[email protected] vsftpd]# setenforce 0
第三步:客户端验证
1.首先匿名登录成功
2.可以删除和创建目录,文件

3.可以上传文件
4.可以下载文件
实验二配置ftp本地用户登录
a.设置umask为002并创建目录并查看权限
设置欢迎语:
连接欢迎语: Welcome to connect my ftp server
访问目录欢迎语: Welcome to access my directory
第一步:配置解析文件
[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #匿名用户登录vsftpd主机
local_enable=YES #允许/etc/passwd内的账号登录vsftpd服务器
write_enable=YES #允许用户上传数据
local_umask=022 #默认本地用户上传普通文件权限掩码
userlist_enable=YES #允许借助vsftpd的阻挡机制来处理某些不受欢迎的账号
第二步:启动服务
[[email protected] vsftpd]# systemctl restart vsftpd
[[email protected] vsftpd]# systemctl stop firewall
[[email protected] vsftpd]# setenforce 0
第三步:客户端访问 验证
这里通过windows 访问
注意:这里登录的用户在服务器上真实存在,即需要创建用户
实验三:访问控制
访问控制和两个文件有关,分别是/etc/vsftpd/ftpuser和/etc/vsftpd/user_list两个文件决定。
ftpuser文件的优先级高于user_list.在ftpuser文件中的中的用户不能登录。
user_list文件中的用户需要取决于在配置文件/etc/vsftpd/vsftpd.conf中的uselistr_deny配置项决定。如果userlist_deny=no,那么只有user_lisy中的用户可以访问。如果userlist_deny=YES,那么user_list中的用户不允许放访问。
1.通过ftpuser文件控制用户登录
[[email protected] vsftpd]# vim ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
ftpuser1 #添加用户
注意:这里登录的用户在服务器上真实存在,即需要创建用户
验证实验,ftpuser1禁止登陆。
2.通过配置项userlist_deny 控制用户登录
配置文件添加配置项
[[email protected] vsftpd]# vim vsftpd.conf
userlist_deny=YES #在use_list中的用户禁止防问
[[email protected] vsftpd]# vim user_list
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
ftpuser2 #添加访问用户
注意:这里登录的用户在服务器上真实存在,即需要创建用户
验证结果,在user_list中的用户禁止访问。
实验四 控制用户切换目录
第一步:配置配置文件
[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES
dirmessage_enable=YES
#chroot_list配置
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=NO
allow_writeable_chroot=YES #如果该字段未添加,chroot的三个重要文件去掉注释,则未写在chroot_list文件的用户无法登录
这里对以下两条命令进行解释:
chroot_local_user= chroot_list_enable=
当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列的用户,可以切换其他的目录。未在文件中的用户,不能切换其他目录。
当chroot_list_enable=YES,chroot_local_user=NO时在/etc/vsftpd/chroot_list文件中列的用户,不能切换其他的目录。未在文件中的用户,可以切换其他目录。
当chroot_list_enable=NO,chroot_local_user=YES时,所有用户不能切换目录。
当chroot_list_enable=NO,chroot_local_user=NO时,所以普用户都可以切换目录。
第二步:配置 /etc/vsftpd/chroot_list 用户列表
[[email protected] vsftpd]# vim /etc/vsftpd/chroot_list
ftpuser1
ftpuser2
注意:这里登录的用户在服务器上真实存在,即需要创建用户
第三步: 启动服务验证配置
在chroot_list文件中的用户不可以切换目录。
不在chroot_list中的用户可以切换用户。
实验五 欢迎语
[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd.conf
ftpd_banner=Welcome to haha! #在登陆界面加入欢迎语

实验五 虚拟用户设置
虚拟用户使用PAM认证方式。
因为在linux之下,使用vsftp建立用户之后,默认使用ftp访问的时候,是会访问到对应的用户家目录。如果想多个用户同时访问某一个目录,同时对同一目录下有着不同的权限,比如部分用户只能看,不修改,或者有的用户只能下载不能上传这些权限,这些设定只能通过vsftp中的虚拟用户来进行设定,普通的用户无法达到这样的效果。故先通过建立一个普通系统用户,建立家目录,然后将所有的虚拟用户映射到对应的普通系统用户家目录中,然后再对各虚拟用户进行权限控制,达到上述的效果。
第一步:配置文件中启用虚拟用户
[[email protected] vsftpd]# vim vsftpd.conf
guest_enable=YES #启用虚拟用户
guest_username=ftpuser3 #虚拟用户登陆成功后访问的此用户的家目录 并且此用户必须存在
virtual_use_local_privs=YES #本地虚拟用户特权开启表示和本地用户访问时的权限一样,如果为NO表示虚拟用户和匿名用户是相同的权限。
pam_service_name=ftppam #设置PAM认证模块名称为ftppam
第二步:创建虚拟用户文件
[[email protected] vsftpd]# vim /etc/vsftpd/vuserlist
vuser1
vuser1
vuser2
vuser2
注意:奇数行行为虚拟用户用户名,偶数行为虚拟用户登录密码。
第三步:将虚拟用户文件转换成数据库文件
[[email protected] ~]# db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuser.db
-T表示允许应用程序能够将文本文件转译载入进数据库
-t hash表示使用hash码加密
-f指定包含用户名和密码文本文件。此文件格式为:奇数行为用户名、偶数行为密码
第四步:编辑pam认证配置文件
[email protected] pam.d]# vim /etc/pam.d/ftppam
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
注:这里的ftppam是自己创建的,也可以直接写在/etc/vsftpd/vsftpd(需要注释掉里面的内容)文件中。
(.so动态链接数据库)数据库文件名的扩展名“.db”不用写。
第五步:启动服务,登录验证。
[[email protected] pam.d]# systemctl restart vsftpd
[[email protected] pam.d]# systemctl stop firewall
[[email protected] pam.d]# setenforce 0


边栏推荐
- 线代004
- 直播倒计时 3 天|SOFAChannel#29 基于 P2P 的文件和镜像加速系统 Dragonfly
- Excellent Kalman filter detailed article
- Final examination paper of engineering materials
- Ant高级-path和fileset
- Metaaploit-后渗透技知识
- TFlite 的简单使用
- hdu5288(OO’s Sequence)
- File upload of native input tag
- C # set different text watermarks for each page of word
猜你喜欢

Shell operator, $((expression)) "or" $[expression], expr method, condition judgment, test condition, [condition], comparison between two integers, judgment according to file permission, judgment accor

NVIDIA geforce experience login error: the verifier failed to load. Please check your browser settings, such as the advertisement interceptor (solution)

Acl2021 best paper released, from ByteDance

SE(Squeeze and Excitation)模块的理解以及代码实现

Brush the title "sword finger offer" day04

Shell综合应用案例,归档文件、发送消息

超赞的卡尔曼滤波详解文章

Provincial Emergency Management Department: Guangzhou can strive to promote the experience of emergency safety education for children

Configuration of pytorch deep learning environment based on cuda10.0

面试必备:虾皮服务端15连问
随机推荐
Reason for pilot importerror: cannot import name 'pilot_ Version 'from' PIL ', how to install pilot < 7.0.0
Brush the title "sword finger offer" day04
Mathematical reasoning: five couples get together and shake hands when they meet
Example of ICP registration for PCL
Matlab- draw superimposed ladder diagram and line diagram
pytorch中对BatchNorm2d()函数的理解
Leetcode.1260. 2D grid migration____ In situ violence / dimensionality reduction + direct positioning of circular array
How to create a.Net image with diagnostic tools
QT learning (II) -.Pro file explanation
LeetCode.1260. 二维网格迁移____原地暴力 / 降维+循环数组直接定位
Come on, chengxujun
线代004
Shell的read 读取控制台输入、read的使用
并发之park与unpark说明
Summary of engineering material knowledge points (full)
Xiandai 004
Food safety | the kitchen board environment is very important. Do you know these use details?
[cloud native • Devops] master the container management tool rancher
StyleGAN论文笔记+修改代码尝试3D点云生成
File upload of native input tag