Linux CentOS 8(FTP的配置与管理)



一、FTP 相关知识

1.1 介绍 FTP

FTP (File transfer protocol) 是TCP/IP 协议组中的协议之一。他最主要的功能是在服务器与客户端之间进行文件的传输。FTP 就是实现两台计算机之间文件的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”。将文件从自己计算机中拷贝至远程计算机上,则称之为“上传(upload)”文件。FTP 是一个 C/S 类型的软件,FTP监听TCP端口号为21,数据端口为20。这个古老的协议使用的是明码传输方式,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协议,本章我们将应用功能较少但安全的 vsftpd(very secure File transfer protocol ) 这个 FTP 软件。

1.2 FTP 的工作模式

FTP 支持两种模式,一种方式叫做Standard (也就是 PORT方式,为主动方式),一种是 Passive (也就是PASV,为被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到 FTP 服务器。Passive 模式 FTP 的客户端发送 PASV 命令到 FTP Server。

两种方式的工作原理:

  • Port模式
    FTP 客户端首先和 FTP 服务器的 TCP 21 端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送 PORT 命令。在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。FTP server 必须和客户端建立一个新的连接用来传送数据。

  • Passive模式
    在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

1.3 FTP 安装部署

[root@localhost ~]# yum install vsftpd -y  \\ftp软件安装

[root@localhost ~]# systemctl start --now vsftpd  \\启动ftp服务并设置开机自启
[root@localhost ~]# lsof -i :21  \\启动验证
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vsftpd  36866 root    3u  IPv6 113594      0t0  TCP *:ftp (LISTEN)

二、FTP 配置文件

2.1 相关文件

主配文件:/etc/vsftpd/vsftpd.conf
下载目录:/var/ftp/ 针对匿名用户
FTP日志:/var/log/xferlog

2.2 主配文件详解

打开/etc/vsftpd/vsftpd.conf如下:

anonymous_enable=NO  \\匿名用户访问,YES是允许,NO是拒绝local_enable=YES  \\本地用户登录,YES是允许,NO是拒绝.默认访问的是本地用户家目录,如果开启了selinux请设置开启布尔值ftp_home_dir为ON
write_enable=YES  \\允许本地用户上传
local_umask=022  \\上传的权限是022,使用的是umask权限。对应的目录是755,文件是644
#anon_upload_enable=YES  \\开启匿名用户上传功能,默认是拒绝的
#anon_mkdir_write_enable=YES  \\开启匿名用户创建文件或文件夹权限
dirmessage_enable=YES  \\开启目录欢迎消息,一般对命令行登陆有效
xferlog_enable=YES  \\开启上传和下载日志记录功能
connect_from_port_20=YES  \\使用标准模式
#chown_uploads=YES  \\允许更改匿名用户上传文件的所有者
#chown_username=whoever  \\所有者为whoever
#xferlog_file=/var/log/xferlog  \\#日志文件路径
xferlog_std_format=YES  \\日志文件采用标准格式
#idle_session_timeout=600  \\会话超时时间
#data_connection_timeout=120  \\数据传输超时时间
#nopriv_user=ftpsecure  \\ FTP子进程管理用户
#async_abor_enable=YES  \\是否允许客户端发起“async ABOR”请求,该操作是不安全的默认禁止。
#ascii_upload_enable=YES  \\指定是否允许上传时以ASCII模式传输数据
#ascii_download_enable=YES  \\指定是否允许下载时以ASCII模式传输数据
#ftpd_banner=Welcome to blah FTP service.  \\FTP文本界面登陆欢迎词
#deny_email_enable=YES  \\是否开启拒绝的Email功能
#banned_email_file=/etc/vsftpd/banned_emails  \\指定保存被拒接的Email地址的文件
#chroot_local_user=YES  \\是否开启对本地用户chroot的限制,YES为默认所有用户都不能切出家目录,NO代表默认用户都可以切出家目录
#chroot_list_enable=YES  \\开启特例列表, 设置方法类似于:YES拒绝所有,允许个别;NO允许所有拒绝个别
#chroot_list_file=/etc/vsftpd/chroot_list  \\特例列表,一行一个用户。
#ls_recurse_enable=YES  \\是否开启ls 递归查询功能 ls -R
listen=NO  \\是否开启ftp独立模式在IPV4
listen_ipv6=YES  \\是否开启ftp独立模式在ipv6
pam_service_name=vsftpd  \\启用pam模块验证
userlist_enable=YES  \\是否启用用户列表功能

通过配置文件的分析,VSFTP默认是不允许匿名访问的,本地用户可以下载和上传。如果需要使用匿名用户登录的话需要将anonymous_enable=NO更改为anonymous_enable=YES,然后重新启动服务。可以通过修改配置文件的内容即可配置FTP的相关登陆情况。

三、项目实施

3.1 FTP 客户端访问

FTP 是一个 C/S 类型的软件,连接服务端需要 FTP 客户端才能完成,常见的FTP 客户端有以下几种:
浏览器:可以通过浏览器中输入 ftp://ip 或者 ftp://域名 的方式来访问FTP
自带客户端:命令行下可以使用ftp命令去连接
第三方客户端:FileZilla 等图形软件

FTP 匿名用户访问:

[root@localhost ~]# ftp 192.168.159.138  \\登录ftp服务器
Connected to 192.168.159.138 (192.168.159.138).
220 (vsFTPd 3.0.3)
Name (192.168.159.138:root): ftp  \\用户名可以是ftp也可以是anonymous
331 Please specify the password.
Password:  \\密码为空
230 Login successful.  \\显示登录成功
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,159,138,239,164).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Nov 16  2020 pub
226 Directory send OK.
ftp> bye  \\退出

FTP 本地用户访问:

[root@localhost ~]# ftp 192.168.159.138
Connected to 192.168.159.138 (192.168.159.138).
220 (vsFTPd 3.0.3)
Name (192.168.159.138:root): jan16  \\ftp服务器本地用户
331 Please specify the password.
Password:
230 Login successful.  \\显示登录成功
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,159,138,103,81).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd  \\显示ftp服务器本地用户的家目录
257 "/home/jan16" is the current directory
  ftp>bye  \\退出

FTP 客户端常用命令:

ftp> help  \\查看所有可使用的命令
Commands may be abbreviated.  Commands are:
!		debug		mdir		sendport	site
$		dir		mget		put		size
account		disconnect	mkdir		pwd		status
append		exit		mls		quit		struct
ascii		form		mode		quote		system
bell		get		modtime		recv		sunique
binary		glob		mput		reget		tenex
bye		hash		newer		rstatus		tick
case		help		nmap		rhelp		trace
cd		idle		nlist		rename		type
cdup		image		ntrans		reset		user
chmod		lcd		open		restart		umask
close		ls		prompt		rmdir		verbose
cr		macdef		passive		runique		?
delete		mdelete		proxy		send
!pwd  \\执行系统命令;!+linux命令
lcd /root  \\切换到linux系统中的目录;lcd+linux系统中的目录
put  \\上传命令,mput批量上传命令
get  \\下载命令,mget批量下载
delete  \\命令可以删除属于自己的文件

3.2 使用本地账户登录 FTP

FTP 服务器配置:

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf  \\修改主配置文件
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
[root@localhost ~]# useradd jan16
[root@localhost ~]# passwd jan16 
Changing password for user jan16.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# touch /home/jan16/jan16.txt  \\创建测试文件
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart vsftpd

客户端配置:

[root@localhost ~]# ftp 192.168.159.138  \\登录ftp服务器
Connected to 192.168.159.138 (192.168.159.138).
220 (vsFTPd 3.0.3)
Name (192.168.159.138:root): jan16  \\ftp服务器本地用户用户名
331 Please specify the password.
Password:
230 Login successful.  \\显示登录成功
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls  \\测试验证
227 Entering Passive Mode (192,168,159,138,106,116).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 08 14:53 jan16.txt
226 Directory send OK.
ftp> get jan16.txt  \\下载测试文件
local: jan16.txt remote: jan16.txt
227 Entering Passive Mode (192,168,159,138,130,235).
150 Opening BINARY mode data connection for jan16.txt (0 bytes).
226 Transfer complete.
ftp> !ls  \\下载验证
anaconda-ks.cfg  initial-setup-ks.cfg  jan16.txt
ftp> bye  \\退出

3.3 使用虚拟账户登录 FTP

FTP服务器配置:

[root@localhost ~]# useradd hello  \\创建本地账户
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf	  
pam_service_name=vsftpd  \\ pam登陆验证
guest_enable=YES  \\允许虚拟用户功能
guest_username=hello  \\虚拟用户映射到本地用户hello
allow_writeable_chroot=YES  \\通过指令改变了默认设置,允许虚拟用户写
local_root=/home/hello  \\本地用户的根目录,定义虚拟用户主目录,用户和组必须指定为宿主用户hello
virtual_use_local_privs=YES  \\ virtual_use_local_privs=YES
#user_config_dir=/etc/vsftpd/vconf.d/  \\虚拟用户和本地用户权限不同,可以通过以下的指令来设置指令,配置文件和登陆名同步即可。

[root@localhost ~]# vim /etc/vsftpd/vuser  \\生成虚拟用户账号密码文件, 奇数行数账户,偶数行是密码
vuser1  \\账户
Chinaskills20  \\密码
vuser2
Chinaskills20

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db  \\使用db_load转成db格式
[root@localhost ~]# chmod 600 /etc/vsftpd/vuser.db
[root@localhost ~]# vim /etc/pam.d/vsftpd  \\配置pam认证,注意一定放在开头
auth       sufficient     /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account    sufficient     /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
[root@localhost ~]# touch /home/hello/jan16  \\创建测试文件
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

客户端配置:

[root@localhost ~]# ftp 192.168.159.138
Connected to 192.168.159.138 (192.168.159.138).
220 (vsFTPd 3.0.3)
Name (192.168.159.138:root): vuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,159,138,22,24).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 09 11:20 jan16
226 Directory send OK.
ftp> mkdir hello
257 "/home/hello/hello" created
ftp> ls
227 Entering Passive Mode (192,168,159,138,183,89).
150 Here comes the directory listing.
drwxr-xr-x    2 1001     1001            6 Jun 09 11:24 hello
-rw-r--r--    1 0        0               0 Jun 09 11:20 jan16
226 Directory send OK.

制作成员: 泽明
排版: 裕新
初审: 杨佳佳
复审: 二月二

11-02 09:52