Linux系统中使用FTP协议的vsftpd服务传输文件

目录

FTP协议是什么

FTP协议的端口号20和21的区别

vsftpd服务程序

匿名开放模式

本地用户模式

虚拟用户模式

TFTP 简单文件传输协议


FTP协议是什么

FTP(File Transfer Protocol) ,是一种处于应用层的,用于文件传输的协议。是基于TCP协议的应用层协议,用于在网络上传输文件。

FTP协议的端口号20和21的区别

ftp端口号20和21的区别是21端口用于连接,20端口用于传输数据。进行FTP文件传输中,客户端首先连接到FTP服务器的21端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为20来进行传输数据文件。

默认情况下FTP协议使用TCP端口中的20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

vsftpd服务程序

vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux系统上的FTP服务程序,不仅开源而且免费,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。

vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。

  • 匿名开放模式

  • 本地用户模式

  • 虚拟用户模式

# 安装vsftpd服务
[root@localhost ~]# yum install vsftpd -y

# 清空iptables防火墙的默认策略
iptables防火墙默认禁止了FTP传输协议的端口号,因此在正式配置vsftpd服务程序之前,需要清空iptables防火墙的默认策略
[root@localhost ~]# iptables -F

# 主配置文件:/etc/vsftpd/vsftpd.conf
由于主配置文件中大部分内容是注释信息,我们可以通过grep命令加上-v参数,过滤出没有包含井号的参数行(即过滤出所有的注释信息),然后将过滤后的参数行通过输出重定向写回原始的主配置文件中
[root@localhost vsftpd]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@localhost vsftpd]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES

匿名开放模式

在vsftpd服务程序中,匿名开放模式是最不安全的一种认证模式。任何人都可以无需密码而直接登录到FTP服务器。

vsftpd服务程序默认开启了匿名开放模式,我们需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。

# 可以向匿名用户开放的权限参数以及作用

anonymous_enable=YES                    允许匿名用户访问模式
anon_umask=022                                匿名用户上传文件的umask值
anon_upload_enable=YES                  允许匿名用户上传文件
anon_mkdir_write_enable=YES          允许匿名用户创建目录
anon_other_write_enable=YES           允许匿名用户修改目录名称或删除目录

# 在主配置文件/etc/vsftpd/vsftpd.conf中正确填写参数
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES

本地用户模式

相较于匿名开放模式,本地用户模式要更安全,而且配置起来也更简单。

# 本地用户模式使用的权限参数以及作用

anonymous_enable=NO                禁止匿名访问模式
local_enable=YES                         允许本地用户模式
write_enable=YES                         设置可写权限
local_umask=022                           本地用户模式创建文件的umask值
userlist_enable=YES                      启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_deny=YES                         开启用户作用名单文件功能

# 在主配置文件/etc/vsftpd/vsftpd.conf中正确填写参数
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES

# 重启服务并且设置开机自启
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd

使用本地用户的身份登录FTP服务器

[root@localhost vsftpd]# ftp 192.168.58.165
Connected to 192.168.58.165 (192.168.58.165).
220 (vsFTPd 3.0.3)
Name (192.168.58.165:root): root
530 Permission denied.
Login failed.
ftp>

然而使用root管理员用户登录却被系统拒绝访问了!

主要是因为vsftpd服务的目录中有两个“用户名单”文件(ftpusers和user_list),vsftpd服务程序为了保证服务器的安全性而默认禁止了root管理员和大多数系统用户的登录行为,这样可以邮箱地避免黑客通过FTP服务对root管理员密码进行暴力破解

如果确定在生产环境中使用root管理员不会对系统安全造成影响,只需在两个“用户名单”文件中删除root用户名即可

# 我们可以选择这两个文件中没有的一个普通用户 suda 来尝试登录FTP服务器
[root@localhost vsftpd]# echo "123456"|passwd suda --stdin
更改用户 suda 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost vsftpd]# ftp 192.168.58.165
Connected to 192.168.58.165 (192.168.58.165).
220 (vsFTPd 3.0.3)
Name (192.168.58.165:root): suda
331 Please specify the password.
Password:	        # 此处输入123456
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
550 Create directory operation failed.

# 新建文件夹的操作被拒绝,此时需要开启SELinux域中对FTP服务的允许策略
[root@localhost ~]# getsebool -a|grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off    # 要设置该行
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost ~]# setsebool -P ftpd_full_access=on

# 再次登录FTP服务器,分别执行文件的创建、重命名和删除操作,发现操作均被允许了
[root@localhost vsftpd]# ftp 192.168.58.165
Connected to 192.168.58.165 (192.168.58.165).
220 (vsFTPd 3.0.3)
Name (192.168.58.165:root): suda
331 Please specify the password.
Password:	# 此处输入123456
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
257 "/home/suda/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

虚拟用户模式

虚拟用户模式是这三种模式中最安全的一种认证模式。

虚拟用户模式通过创建独立的FTP用户数据库文件来进行认证并登录到FTP服务器的认证方式,所以相比较来说它是最安全的认证模式。

TFTP 简单文件传输协议

TFTP是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。它提供不复杂、开销不大的文件传输服务,可将其当作FTP协议的简化版本。

TFTP的命令功能不如FTP强大,在安全性方面也弱于FTP服务,文件传输过程也不像FTP那样可靠。但是TFTP不需要客户端的权限认证,所以在传输琐碎(trivial)不大的文件时,效率很高。

TFTP的安装与配置

# 安装tftp相关软件包
[root@localhost ~]# yum install tftp-server tftp -y

TFTP服务是使用xinetd服务程序来管理的,xinetd服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能。

# 在xinetd服务程序中开启tftp服务
[root@localhost ~]# vim /etc/xinetd.d/tftp
service tftp
{
	socket_type	= dgram
	protocol	= udp
	wait		= yes
	user		= root
	server		= /usr/sbin/in.tftpd
	server_args	= -s /var/lib/tftpboot
	disable		= no	
	per_source	= 11
	cps		= 100 2
	flags		= IPv4
}

# 重启xinetd服务,并且添加开机自启
[root@localhost xinetd.d]# systemctl restart xinetd
[root@localhost xinetd.d]# systemctl enable xinetd
[root@localhost xinetd.d]# ps -ef|grep xinetd
root        2417       1  0 23:00 ?        00:00:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
root        2430    1893  0 23:01 pts/1    00:00:00 grep --color=auto xinetd

使用TFTP服务

TFTP的根目录为/var/lib/tftpboot,可以使用 tftp 命令尝试访问其中的文件。

tftp命令中可用的参数
?                        帮助信息
put                    上传文件
get                    下载文件
verbose             显示详细的处理信息
status                显示当前的状态信息
binary                使用二进制进行传输
ascii                  使用ASCII码进行传输
timeout             设置重传的超时时间
quit                   退出

举例

[root@localhost ~]# echo "i love linux" > /var/lib/tftpboot/test.txt
[root@localhost ~]# tftp 192.168.58.165
tftp> get test.txt
tftp> quit
[root@localhost ~]# ls
test.txt
[root@localhost ~]# cat test.txt 
i love linux

你可能感兴趣的:(Linux,linux,运维)