文件服务器之三:FTP服务部署搭建

FTP(File Transfer Protocol)是相当古老的传输协议之一,主要功能是在服务器与客户端之间进行文件的传输,且协议使用明文传输方式。

一、FTP功能简介

1.1 不同等级的用户身份:user、guest、anonymous

实体用户:user
访客:guest
匿名用户:anonymous

1.2 命令记录与日志文件记录

FTP可以利用系统的syslogd来进行数据的记录,而记录的数据包括了用户曾经使用过的命令与用户传输数据(传输时间、文件大小等)的记录,所以可以在/var/log中找到各项日志信息

1.3 限制用户活动的目录chang root(简称chroot)

FTP可以限制用户工作范围在自己的用户主目录下

二、vsftpd服务器基础设置

vsftpd的全名是“very secure FTP Daemon”,vsftps最初发展的理念是构建一个以安全为重心的FTP服务器。

2.1 vsftpd的特点

  • vsftpd服务的启动者身份为一般用户,所以对于Linux系统的权限较低,对Linux系统的危害也就相对降低了,此外,vsftpd亦利用chroot()这个函数进行改换根目录的操作,使得系统工具不会被vsftpd这个服务所误用
  • 任何需要具有较高执行权限的vsftpd命令均以一个特殊的上层程序所控制,该上层程序享有的较高执行权限功能已经被限制的相当低,并不影响Linux本身的系统为准
  • 绝大部分FTP会使用到的额外命令功能(dir、ls、 cd等)都已经被整合到vsftpd主程序当中去了,因此理论上vsftpd不需要使用额外的系统提供的命令,所以在chroot的情况下,vsftpd不但可以顺利工作,且不需要额外功能对于系统来说也比较安全
  • 所有来自客户端且想要使用这个上层程序所提供的较高执行权限的vsftpd命令的需求,均被视为不可信任的要求来处理,必须经过相当程度的身份确认后,方可利用该上层程序的功能,例如chown()、Login的要求操作
  • 上面提到的上层程序中,依然使用chroot()的功能来限制用户的执行权限

2.2 vsftpd的安装及启动

#安装vsftpd所需软件
yum install vsftpd -y
#启动vsftpd服务
systemctl start vsftpd.service
systemctl status vsftpd.service

2.3 vsftpd.conf配置值说明

/etc/vsftpd/vsftpd.conf本身就是个详细的配置文件,可通过man 5 vsftpd.conf查看完整的参数说明

2.3.1 与服务器环境相关的设置值

connect_from_port_20=YES(NO)   #ftp-data的端口号
listen_port=21  			   #vsftpd使用的命令通道port
dirmessage_enable=YES(NO)      #当用户进入某个目录时,会显示该目录需要注意的内容,显示的文件默认是.message
message_file=.message          #当dirmessage_enable=YES时,可以设置这个项目让vsftpd寻找该文件来显示信息
listen=YES(NO)  			   #默认设置为NO,若设置为YES,表示vsftpd是以stand alone的方式来启动
pasv_enable=YES(NO)            #支持数据流的被动式连接模式(passive mode),一定要设置为YES
use_localtime=YES(NO)          #vsftpd默认使用GMT时间(格林尼治时间),建议设置为YES,使用本地时间
write_enable=YES(NO)           # 如果你允许用户上传数据时,就要启动这个设置
connect_timeout=60             #单位是秒,在数据连接的主动式连接模式下,我们发出的连接信号在60s内得不到客户端的响应,则不等待并强制断线
accept_timeout=60              #当用户以被动式PASV来进行数据传输时,如果服务器启用passive port并等待client超过60s无回应,则强制断线
data_connection_timeout=300    #如果服务器与客户端连接已成功建立(主动/被动连接),但是可能由于线路问题导致300s内还是无法顺利地完成数据的传送,那么客户端就会被我们的vsftpd强制剔除
idle_session_timeout=300       #如果用户没有在300s内都没有命令操作,强制脱机!避免占用空间
max_clients=0  				   #如果vsftpd是以stand alone方式启动的,这个设置项目可以限制使用FTP的数量
max_per_ip=0                   #同一个ip同一时间可以允许多少连接
pasv_min_port=0                #被动模式传输数据最小的port,0表示随机取用而不限制
pasv_max_port=0                #被动模式传输数据最大的port,0表示随机取用而不限制
ftp_banner=一些文字说明          #当用户连接进入到vsftpd时,ftp客户端软件会显示的说明文字、
banner_file=/path/file         #指定某个纯文本文件作为用户登录vsftpd服务器时所显示的欢迎文字

2.3.2 与实体用户相关的设置值

guest_enable=YES(NO)           #设置为yes时,任何实体帐号,均会被设置成guest(默认是不开放的),至于访客在vsftpd当中,默认会取得ftp这个用户的相关权限,但可以通过guest_username来修改
guest_username=ftp             #在guest_enable=YES时才会生效,指定访客的身份
local_enable=YES(NO)           #这个设置值必须要为YES时,在/etc/passwd内的帐号才能以实体用户的方式登录我们的vsftpd服务器
local_max_rate=0      		   #实体用户的传输速度限制,单位为byte/second,0为不限制
chroot_local_user=YES(NO)	   #在默认的情况下,是否要将用户限制在自己的用户主目录之内(chroot)?
chroot_list_enable=YES(NO)     #是否启用chroot写入列表功能,与下面的chroot_list_file有关,这个项目需要开启,否则下面的列表文件会无效
chroot_list_file=/etc/vsftpd.chroot_list   #如果chroot_list_enable=YES,那么就可以设置这个项目了,这个项目与chroot_local_user有关
userlist_enable=YES(NO)        			   #是否借助vsftpd的阻挡机制来处理某些不受欢迎的帐号,与下面的参数设置有关
userlist_deny=YES(NO)    	               # 当userlist_enable=YES时才会生效,若设置为YES,则当用户帐号被列入某个文件时,在该文件内的用户将无法登录vsftpd服务器,该文件的文件名与下列设置项有关
userlist_file=/etc/vsftpd/user_list        #userlist_deny=YES时,则这个文件就有用处了,在这个文件内的帐号都无法使用vsftpd

2.3.3 与匿名用户相关的设置值

anonymous_enable=YES(NO)                #默认为YES,允许anonymous登录vsftpd主机,下面的设置项均要基于anonymous_enable=YES后才生效
anon_world_readable_only=YES(NO)        #仅允许anonymous具有下载可读文件的权限,默认是YES
anon_other_write_write_enable=YES(NO)   #是否允许anonymous具有除了写之外的权限,包括删除与修改服务器上的文件及文件名等权限,默认当然是NO,如果要设置为YES,那么开放给anonymous的目录权限亦需要调整权限,让vsftpd的PID拥有者可以写入才行
anon_mkdir_write_enable=YES(NO)         #是否让anonymous具有建立目录的权限,默认值是NO,如果设置值为YES,那么anon_other_write_write_enable必须设置为YES
anon_upload_enable=YES(NO)              #是否让anonynous具有上传数据的功能,默认是NO,如果要设置为YES,则anon_other_write_write_enable=YES需要设置
deny_email_enable=YES(NO)   		    #将某些特殊的E-mail address阻拦住,不让那些anonymous登录
banned_email_file=/etc/vsftpd/banned_emails   #deny_email_enable=YES时,可以利用这个设置项目来规定哪个E-mail address不可登录我们的vsftpd,在文件中一行一行输入E-mail address即可
no_anon_passwd=YES(NO)   				#当设置为YES时,表示anonynous将会略过密码检查步骤,而直接进入vsftpd服务器内,所以一般默认是NO
anoy_max_rate=0    						#单位为bytes/s,限制anonymous的传输速度,如果是0则不限制,例如也可设置anoy_max_rate=30000(30KB/s)
anon_umask=077 							#限制anonymous上传文件的权限

2.3.4 关于系统安全方面的一些设置值

ascii_download_enable=YES(NO)      #如果设置为YES,那么Client就优先(默认)使用ASCII格式下载文件
ascii_upload_enable=YES(NO)		   #如果设置为YES,那么Client就优先(默认)使用ASCII格式上传文件
one_process_model=YES(NO)          #当设置为YES时,表示每个建立的连接都会拥有一个process在负责,可以提高vsftpd的效率,不过除非你的系统比较安全,而且硬件配置比较高,否则容易耗尽系统资源,一般建议设置为NO
tcp_wrappers=YES(NO)   			   #我们习惯支持TCP Wrappers,所以设置为YES
xferlog_enable=YES(NO) 			   #当设置为YES时,用户的上传和下载文件都会被记录下来
xferlog_file=/var/logxferlog       #当xferlog_enable=YES时,就可以设置了,这个是日志文件的文件名
xferlog_std_format=YES(NO)   	   #是否设置为wu-ftp相同的日志文件格式,默认为NO,因为日志文件会比较容易读,不过,如果你有使用wu-ftp日志文件分析软件,就需要设置为YES
dual_log_enable=YES 、vsftpd_log_file=/var/log/vsftpd.log   #vsftpd的独特日志文件格式
nopriv_user=nobody   			    #vsftpd默认以nobody作为此一服务执行者的权限,因为nobody的权限较低,安全系统较高
pam_service_name=vsftpd   			#pam模块的名称,我们放置在/etc/pam.d/vsftpd中的即是这个

2.4 vsftpd启动模式

vsftpd可以使用stand alone 或super daemon的方式来启动,centos默认是以stand alone来启动的,如果你的FTP服务器是提供给整个因特网来进行大量的下载任务,例如各大专院校的FTP服务器,那建议你使用stand alone的方式,服务的速度上会比较好,如果仅是提供给内部人员使用的FTP服务器,那么使用super daemon来管理即可

2.4.1 stand alone方式启动

[root@node1 ~]$ systemctl start vsftpd.service
[root@node1 ~]$ netstat -nltpa | grep ftp
tcp6       0      0 :::21                   :::*                    LISTEN      7681/vsftpd  

2.4.2 super daemon方式启动

[root@node1 ~]$ vim /etc/vsftpd/vsftpd.conf 
#修改listen=YES为listen=NO
listen=NO

修改super daemon配置文件

[root@node1 ~]$ yum install xinetd
[root@node1 ~]$ vim /etc/xinetd.d/vsftpd
service ftp
{
       socket_type             = stream
       wait                    = no 
       user                    = root
       server                  = /usr/sbin/vsftpd
       log_on_success          += DURATION USERID
       log_on_failure          += USERID
       nice                    = 10
       disable                 = no
}

启动xinetd服务

[root@node1 ~]$ systemctl start xinetd.service 
[root@node1 ~]$ netstat -nltpa | grep xinetd
tcp6       0      0 :::21                   :::*                    LISTEN      419242/xinetd 

注意:stand alone和super daemon两种启动方式不可同时启动

2.5 实体帐号登录相关设置

[root@node1 ~]$ vim /etc/vsftpd/vsftpd.conf
# 1. 与匿名用户相关的信息,将匿名登录取消
anonymous_enable=NO

# 2. 与实体用户相关的信息:可写入,且umask为022
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list  #该文件默认存在

# 3. 与服务器环境有关的设置
user_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt    #该文件需要手动建立

2.6 匿名帐号登录相关设置

[root@node1 ~]$ vim /etc/vsftpd/vsftpd.conf
# 1. 与匿名用户相关的信息
anonymous_enable=YES
anon_upload_enable=YES
no_anon_passwd=YES    #匿名用户登录时,系统不会检验密码
anon_max_rate=1000000    #最大带宽使用为1MB/s左右
data_connection_timeout=60  #数据流连接的timeout为60s
idle_session_timeout=600    #匿名用户发呆超过10min就断线
max_clients=50   #最大连接与每个IP的可用连接
max_per_ip=5

# 2. 与实体用户相关的信息,将实体用户登录取消
local_enable=NO

# 3. 与服务器环境有关的设置
user_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt    #该文件需要手动建立

三、防火墙设置

  • 加入iptables的ip_nat_ftp、ip_conntrack_ftp两个模块
  • 开放port 21给因特网使用
  • 开放port 65400-65410端口给Internet连接用
# 1. 加入模块即可,两个模块中间用空格键隔开,然后重新启动iptables服务
[root@node1 ~]$ vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
[root@node1 ~]$ systemctl restart iptables.service

# 2. 被动数据传输模式下开放连接端口65400-65410
[root@node1 ~]$ vim /etc/vsftpd/vsftpd.conf 
pasv_min_port=65400
pasv_max_port=65410
[root@node1 ~]$ systemctl restart vsftpd.service 

参考链接
《鸟哥的Linux私房菜-服务器架设篇(第三版)》
https://help.aliyun.com/document_detail/60152.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值