博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FTP(vsftp)服务器的搭建配置以及访问控制
阅读量:3949 次
发布时间:2019-05-24

本文共 9307 字,大约阅读时间需要 31 分钟。

                       

什么是FTP

FTP是(File Transfer Protocol )文件传输协议的缩写。

FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。

控制通道:控制通道是和进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。数据通道:数据通道是和进行文件传输或者列表的通道。  
1
2
3

FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式

PORT模式(主动方式)

FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。  
1

PASV模式(被动方式)

在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。  
1

ftp&&vsftp

要在Linux/Unix服务器上搭建一个安全、高性能、稳定性好的,那么vsftpd是首选应用。vsftpd意思为“very secure FTP daemon(非常安全的FTP进程)”,是一个基于GPL发布的类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX以及Irix等系统上面。vsftpd支持很多其他传统的FTP服务器不支持的良好特性,比如:

非常高的安全性需求带宽限制良好的可伸缩性创建虚拟用户的可能性IPv6支持中等偏上的性能分配虚拟 IP 的可能性高速  
1
2
3
4
5
6
7
8

vsFTPd运行有两种模式,在RPM包管理的系重审统,大多是由Fedora/Redhat 开发而来,对于这样的系统有xinted服务器一说;对于非RPM包管理的系统,一般没有xinted这一说。为了保证本文档的统一,我们都不要用xinetd模式,而用initd运行模式来启动和管理服务器,也就是独立运行模式。

相关阅读:什么是xinetd模式和initd模式

像其它一样,vsftpd提供了standalone和inetd(inetd或xinetd)两种运行模式。简单解释一下, standalone一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源,因此经常应用于对实时反应要求较高的专业FTP服务器。inetd恰恰相反,由于只在外部连接发送请求时才调用FTP进程,因此不适合应用在同时连接数量较多的系统。此外,inetd模式不占用系统资源。除了反应速度和占用资源两方面的影响外,vsftpd还提供了一些额外的高级功能,如inetd模式支持per_IP(单一IP)限制,而 standalone模式则更有利于PAM验证功能的应用。

1.xinetd运行模式

大多数较新的系统采用的是xinetd超级服务守护进程。使用“vi /etc/xinetd.d/vsftpd” 看一下它的内容,如下:disable = no socket_type = streamwait = no# 这表示设备是激活的,它正在使用标准的TCP Sockets。如果“/etc/vsftpd.conf”中的有选项为“listen=YES”,注销它最后,重启xinetd,命令如下:$ /etc/rc.d/init.d/xinetd restart需要注意的是,“/etc/xinetd.d”目录中仅能开启一个FTP服务。  
1
2
3
4
5
6
7
8
9
10
11

2.standalone模式

standalone模式便于实现PAM验证功能。进入这种模式首先要关闭xinetd下的vsftpd,设置“disable = yes”,或者注销掉“/etc/inetd.conf”中相应的行。然后修改“/etc/vsftpd.conf”中的选项为“listen=YES”。如果是standlone模式,那么它是作为单独的一个服务启动的,不需要系统协作,不作为系统服务,  如果要是成为xinetd模式,那么它的服务就要受系统服务的限制,比如创建一个新的服务进程,但是也有缺点,如果xinetd服务本身出了问题,那么相关的服务也是会受到影响的。  
1
2
3
4
5
6
7
8
9

xinetd模式和standalone模式的区别

以xinetd模式运行的服务表示该服务进程并不以守护进程执行,以FTPD进程为例吧,以xinetd模式运行这个服务,情况是这样的,本身FTP服务是会监听21号端口的,但是以这种模式运行这个服务的话,21号端口则由xinetd进程来监听(此时FTPD服务并没有运行),如果你的网卡接收到有21号端口请求,则有xinetd进程会去调用FTPD程序,将在21号端口接收到的请求数据移交给FTPD进程去处理,处理完后FTPD进程退出,而xinetd进程继续监听21号端口,这有点类似windows的svhost进程;而以 standalone模式运行的服务则是服务进程,如ftpd以守护进程在内存中运行,接收到21号端口的请求后由FTPD进程fork出一个子进程进行处理,而原进程继续监听21号端口。  
1

基本知识和拓展知识完了我们来搭建FTP服务器了

FTP服务器的搭建

1.使用yum工具安装vsftp服务,安装完成需要启动服务

这里写图片描述
2.使用yum工具安装lftp
lftp命令是一款优秀的文件客户端程序,它支持ftp、SETP、HTTP和FTPs等多种文件传输协议。更多内容请阅读

3.本机通过lftp命令连接ftp服务器

这里写图片描述
注意上面示例中本机连接ftp没有问题,但是其他主机连接不上!

4.设置ftp服务使得主机均可连接

如果要让外部能够访问那就需要设置防火墙策略或者直接关闭防火墙firewall-config命令可以打开图形界面的防火墙配置如下图右侧所选,然后在opiton选中中reload firewall即可另外与进程有关的还有 SELinux 这个加强文件存取安全性的软件,需要disabled掉,可以使用命令system-config-selinux打开图形界面,也可以修改文件/etc/sysconfig/selinux!  
1
2
3
4

这里写图片描述

这里写图片描述

这里写图片描述

各服务相关配置文件及作用

这里写图片描述

配置文件解读

vsftpd的主配置文件/etc/vsftpd/vsftpd.conf说明

和中的大多数配置文件一样,vsftpd的配置文件中以#开始注释。

# 是否允许匿名登录FTP服务器,默认设置为YES允许# 用户可使用用户名ftp或anonymous进行ftp登录,口令为用户的E-mail地址。# 如不允许匿名访问则设置为NOanonymous_enable=YES# 是否允许本地用户(即中的用户帐号)登录FTP服务器,默认设置为YES允许# 本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub# 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器local_enable=YES# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许write_enable=YES # 掩码,本地用户默认掩码为077# 你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值#local_umask=022# 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES#anon_upload_enable=YES# 是否允许匿名用户创建新文件夹#anon_mkdir_write_enable=YES # 是否激活目录欢迎信息功能# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息# 默认情况下,欢迎信息是通过该目录下的.message文件获得的# 此文件保存自定义的欢迎信息,由用户自己建立#dirmessage_enable=YES# 是否让系统自动维护上传和下载的日志文件# 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定# 默认值为NOxferlog_enable=YES# Make sure PORT transfer connections originate from port 20 (ftp-data).# 是否设定FTP服务器将启用FTP数据端口的连接请求# ftp-data数据传输,21为连接控制端口connect_from_port_20=YES# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用# 注意,不推荐使用root用户上传文件#chown_uploads=YES# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名# 可以把上传的文件都改成root属主。whoever:任何人#chown_username=whoever# 设定系统维护记录FTP服务器上传和下载情况的日志文件# /var/log/vsftpd.log是默认的,也可以另设其它#xferlog_file=/var/log/vsftpd.log# 是否以标准xferlog的格式书写传输日志文件# 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定# 默认值为NO#xferlog_std_format=YES# 以下是附加配置,添加相应的选项将启用相应的设置# 是否生成两个相似的日志文件# 默认在/var/log/xferlog和/var/log/vsftpd.log目录下# 前者是wu_ftpd类型的传输日志,可以利用标准日志工具对其进行分析;后者是vsftpd类型的日志#dual_log_enable# 是否将原本输出到/var/log/vsftpd.log中的日志,输出到系统日志#syslog_enable# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改#idle_session_timeout=600# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改#data_connection_timeout=120# 运行vsftpd需要的非特权系统用户,缺省是nobody#nopriv_user=ftpsecure# 是否识别异步ABOR请求。# 如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用# 而一般此设定并不安全,所以通常将其取消#async_abor_enable=YES# 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。# 启用此选项将允许服务器以ASCII方式传输数据# 不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击#ascii_upload_enable=YES#ascii_download_enable=YES# 登录FTP服务器时显示的欢迎信息# 如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后#ftpd_banner=Welcome to blah FTP service.# 黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限# 可以将某些特殊的email address抵挡住。#deny_email_enable=YES# 当上面的deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器# 此文件需用户自己创建,一行一个email address即可#banned_email_file=/etc/vsftpd/banned_emails# 用户登录FTP服务器后是否具有访问自己目录以外的其他文件的权限# 设置为YES时,用户被锁定在自己的home目录中,vsftpd将在下面chroot_list_file选项值的位置寻找chroot_list文件# 必须与下面的设置项配合#chroot_list_enable=YES# 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录# 从而有利于FTP服务器的安全管理和隐私保护。此文件需自己建立#chroot_list_file=/etc/vsftpd/chroot_list# 是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O#ls_recurse_enable=YES# 是否允许监听。# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求listen=YES# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,# 则必须运行两套vsftpd,采用两套配置文件# 同时确保其中有一个监听选项是被注释掉的#listen_ipv6=YES# 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件# 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中#pam_service_name=vsftpd# 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO# 若此项设为YES,则user_list文件中的用户允许登录FTP服务器# 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有#userlist_enable=YES/NO# 设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES#userlist_deny=YES/NO# 是否使用tcp_wrappers作为主机访问控制方式。# tcp_wrappers可以实现中网络服务的基于主机地址的访问控制# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制# 前者设置允许访问记录,后者设置拒绝访问记录。# 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器# 此时FTP服务器虽可以PING通,但无法连接tcp_wrappers=YES  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110

配置访问和操作权限控制

5.匿名用户的设置

匿名登陆(ftp用户)通过改变文件组为ftp限制用户操作(local_umask=022)

这里写图片描述

例如匿名用户的上传限制修改

1.首先打开配置文件增加以下参数设置write_enable=YESanon_upload_enable=YES2.修改目录权限chgrp ftp /var/ftp/pubchmod 775 /var/ftp/pub3.重启服务systemctl restart vsftpd  
1
2
3
4
5
6
7
8

6. 本地登陆

lftp -u username 172.25.254.136

对应配置的各参数以及最终实现的作用

local_root=/lockey#设置用户家目录chroot_local_user=NO#锁定用户到家目录中chroot_local_user=YES#用户可以任意且话目录chroot_list_enable=YES#开启用户黑白名单chroot_list_file=/etc/vsftpd/chroot_list#用户访问白名单chroot_list_enable=YES  是否将系统用户限制在自己的home目录下chroot_list_file=/etc/vsftpd/chroot_list如果chroot_list_enable=YES 那么在/etc/vsftpd/chroot_list 中列出的是被限制的用户的列表  
1
2
3
4
5
6
7
8
9

7.建立虚拟用户

在虚拟用户使用vsftpd服务器之前,要对服务器进行配置,主要包括如下几个步骤:

(1)生成虚拟用户口令库文件。(2)配置生成vsftpd的认证文件。(3)建立虚拟用户访问所需要的目录并且设定相应的访问权限。(4)建立配置文件。(5)重新启动vsftpd服务器。  
1
2
3
4
5
6
7
8
9

1.首先创建用户密码表,添加用户及对应的密码,一行用户名一行密码

vim /etc/vsftpd/testuser1#用户123#密码user2#用户123#密码  
1
2
3
4
5

2.将用户密码表加密

db_load -T -t hash -f test login.db#转换 转换方式 哈希 文件  
1
2

3.编辑系统关于ftp登录检测的文件,格式如下

vim /etc/pam.d/virtualauth    required    pam_userdb.so   db=/etc/vsftpd/login(后缀不需要,系统会自动检测)account required    pam_userdb.so   db=/etc/vsftpd/login  
1
2
3

4.修改配置文件

pam_service_name=vsftpd改为pam_service_name=login(读取用户列表文件)添加guest_enable=YES(开启虚拟用户访问)guest_username=ftp(虚拟用户影射)  
1
2
3
4
5

systemctl restart vsftpd

8.建立虚拟用户家目录

mkdir /virtual/user{1,2} -p#为用户创建家目录chmod u-w /virtual/user{1,2} #改变用户家目录权限,使得用户可以正常访问chown ftp.ftp /virtual/user{1,2}#改变用户家目录所属组#修改配置文件vim /etc/vsftpd/vsftpd.conflocal_root=/virtual/$USER#使每一个登陆的用户指向自己的家目录user_sub_token=$USER#用户认证指向  
1
2
3
4
5
6
7
8
9
10
11
12
13

ftp如何设置匿名用户的上传文件功能

0.firewalld策略

1.selinux : SELINUX=disable
2.vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
3.给目录权限chmod 777 /var/ftp/pub
chgrp ftp /var/ftp/pub
4.semanage fcontext -a -t public_content)rw_t ‘/var/ftp/pub(/.*)?’
restorecon -RvvF /var/ftp/pub/
getsebool -a | grep ftp
setsebool -P ftpd_anon_write on
关于用户目录操作的一个常见错误及原因
例如用户要切换到一个指定目录下
这里写图片描述
原因:组用户对于目录的权限过大,需要执行以下命令
    chmod g-w /test/ftp

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

你可能感兴趣的文章
XXL-Job使用
查看>>
如何在SwaggerAPI中添加统一授权认证
查看>>
多线程
查看>>
【Linux】Centos7 常用命令
查看>>
【Redis】Centos7下安装Redis
查看>>
【Redis】Centos7下搭建Redis集群
查看>>
【Redis】Centos7下搭建Redis集群——哨兵模式
查看>>
【Linux】本地ping不同VM虚拟机
查看>>
【SpringCloud】Hystrix
查看>>
乐观锁、悲观锁、公平锁、可重入锁
查看>>
快速阅读——《认知篇》
查看>>
【C#】返回值为DataTable的数据
查看>>
【Asp.net】基本概念
查看>>
【Asp.net】Web服务器控件
查看>>
【Asp.net】内置对象
查看>>
C语言数据类型笔记 by STP
查看>>
C语言指针笔记 by STP
查看>>
CoreLocation笔记 by STP
查看>>
Application Transport Security has blocked a cleartext HTTP (http://) 解决方案
查看>>
The identity used to sign the executable is no longer valid.解决方案
查看>>