Linux中的FTP服务

207 阅读6分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

FTP是TCP/IP协议簇中的协议之一,也称为文件传输协议。

FTP概述

FTP采用“客户机/服务器”模式,FTP服务器一般会提供上传和下载两项基本功能。

FTP服务器文件的传输方式

传输方式分为两种:

  • ASCII传输
  • 二进制传输

当用户复制的文件只包含简单ASCII文本,且客户机和服务器的操作类型不同时,一般使用ASCII传输,此时FTP服务器会自动调整文件内容,将文件解释为客户端主机可存储的文本格式。

若用户复制的文件为代码段、数据库、压缩文件等,为保证保存文件时,源文件和复制得到的文件完全一致,通常在二进制模式下传输文件。

FTP服务器的工作模式

FTP在对外提供服务时需要维护两个连接:

  • 控制连接:传输控制命令,监听TCP21端口
  • 数据连接:传输数据,在主动模式下监听TCP20端口

主动模式是FTP的一种工作模式,在主动模式下,控制连接的发起方是FTP客户机,而数据连接的发起方是FTP服务器。

被动模式为控制连接和数据连接的发起方都是客户机。

VSFTP概述

VSFTP是Linux系统下最常用的一种免费FTP服务器软件。

VSFTP优点

  • 安全性高
  • 高速
  • 稳定
  • 小巧
  • 多用户

VSFTP用户类型

  • 匿名用户:默认的匿名用户有ftpanonymous,匿名用户登陆密码为空,工作目录为/var/ftp
  • 本地用户:/etc/passwd文件中存储的、使用Linux操作系统的用户,对应的工作目录为用户的宿主目录。默认情况下,本地用户可访问FTP服务器中除root目录下的所有资料
  • 虚拟用户:FTP专有用户,只能访问FTP服务器提供的资源

安装并启动VSFTP服务

yum -y install vsftpd
systemctl start vsftpd

VSFTP的配置文件

/etc/vsftpd/vsftpd.conf		# 主配置文件
/etc/vsftpd/ftpusers		#用户控制配置文件
/etc/vsftpd/user_list		#用户列表配置文件

主配置文件

主配置文件原始配置如下:

anonymous_enable=YES		#开启匿名登录
local_enable=YES			#开启本地用户登录
write_enable=YES			#开启写人功能
local_umask=022				#设置本地用户创建文件的umask值为022
dirmessage_enable=YES		#激活目录消息
xferlog_enable=YES			#激活上传、下载功能
connect_from_port_20=YES	#设置VSFTP服务器的数据连接端口为20 !
xferlog_std_format=YES		#将日志文件格式设置为标准的FTP服务器日志格式
listen_ipv6=YES				#接受来自IPv4和IPv6客户端的连接
pam_service_name=vsftpd		#指定VSFTPD将使用的PAM服务的名称为vsftpd
userlist_enable=YES 		#加载用户名列表
tcpwrappers=YES				#将vsftp与tcp wrapper结合使用

主配置文件中常用的选项及其功能介绍:

image-20220615200140021

image-20220615200202105

用户控制配置文件

文件内容为用户列表,该文件用来限制用户列表中的用户登录FTP服务器

用户列表配置文件

文件内容同样是用户列表,该配置文件有两个功能:

  • 允许登录:只允许用户列表中的用户登录FTP服务器,但当用户同时存在于user_listftpusers时,则该用户无法登录
  • 拒绝登录:拒绝用户列表中的用户登录FTP服务器

限制/排除名单文件

配置文件chroot_list中也是用户列表,该文件路径由主配置文件中的chroot_list_file选项指定。

文件功能有两种:

  • 限制:用户列表中的用户只能在其主目录活动
  • 排除:用户列表中的用户可以跳出主目录

当主配置文件中chroot_local_user值为YES,则当chroot_list被启用后,存在chroot_list文件中的用户就可跳出自己主目录,反之值为NO时,不可跳出。

chroot_list文件是否启用由主配置文件中chroot_list_enable值决定,值为YES,启用文件,值为NO,禁用文件。

安装VSFTP客户端

yum -y install ftp

匿名登陆

VSFTP主配置文件中anonymous_enable默认值为YES,即可以使用匿名登陆,则使用ftp连接VSFTP服务器:

ftp FTP服务器IP
Connected to 192.168.255.157 (192.168.255.157).
220 (vsFTPd 3.0.2)
Name (192.168.255.157:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

验证身份后显示登陆成功

配置匿名FTP服务器

VSFTP服务器虽然默认允许匿名用户登录,但匿名用户登录可使用的功能不完善。

创建本地用户

为保证文件安全性,VSFTP服务一般会统一更改匿名用户所上传文件的所有者,因为文件所有者必须是本地用户,所以需要创建本地用户:

useradd Tom		# 创建Tom用户
passwd Tom		# 设置用户密码

编辑主配置文件

参考以下内容对主配置文件进行修改:

anonymous_enable=YES			# 允许匿名用户访问
write_enable=YES				# 允许登录用户有写权限(全局设置)
anon_root=/var/ftp				# 指定匿名用户登录的目录
anon_upload_enable=YES			# 打开匿名用户有上传文件的权限
anon_other_write_enable=YES		# 打开匿名用户删除和重命名的权限
anon_mkdir_write_enable=YES		# 打开匿名用户新增目录的权限
chown_uploads=YES				# 设置是否改变匿名用户上传文件的属
chown_username=Tom				# 设置匿名用户上传文件的属主名

配置文件修改保存后退出并重启VSFTP服务

创建匿名上传目录

使用匿名用户登录时,所登入的目录默认为/var/ftp(主配置文件中anon_root选项指定)。匿名用户属于其他人,若想进行文件上传,需要拥有登入目录的写权限,而登入目录默认权限为755,因为登入目录写权限不能与chroot限制并存,所以不能直接不全登入目录的权限。

综上,在登入目录下创建一个目录,并更改其所属组和所有者,设置权限为777:

mkdir /var/ftp/userdir
chown ftp:ftp /var/ftp/userdir
chmod 777 /var/ftp/userdir

配置防火墙和SELinux服务

防火墙配置

systemctl stop firewalld.service	# 关闭防火墙
或者
firewall-cmd --add-port=21/tcp --permanent	# 开放21号端口(确保防火墙处于开启状态)

关闭SELinux

  • setenforce命令
  • 修改配置文件:更改/etc/selinux/config文件中的SELINUX=enforcingSELINUX=disabled,并重启计算机

测试

ftp VSFTP服务器IP		# 连接
ls -l		# 查看登入目录中文件列表
get 文件名		# 下载文件
put 文件名		# 文件上传
cd 文件夹名		# 切换目录
mkdir 文件夹名		# 创建目录

禁止指定用户登录

FTP服务器中的本地用户一般都拥有登录、上传文件的权限,若要限制某些用户登录FTP服务器,可将用户名添加到配置文件ftpusers中。