文章目录
- 第九章 使用Vsftpd服务传输文件
- 一、文件传输协议
- 1、FTP介绍
- 2、FTP工作模式
- 二、Vsftpd服务程序
- 1、安装Vsftpd服务程序
- 2、防火墙配置
- 3、过滤注释信息并通过重定向符写回原始的主配置文件
- 4、Vsftpd服务程序常用的参数以及作用
- 5、匿名访问模式
- (1)、匿名访问模式介绍
- (2)、匿名用户模式使用的权限参数以及作用
- (3)、配置文件并重启服务设置开机自启动
- (4)、递归目录权限
- (5)、访问服务器并尝试创建目录
- (5)、修改策略规则
- (6)、访问服务器并尝试创建目录
- 6、本地用户模式
- (1)、本地用户模式介绍
- (2)、本地用户模式使用的权限参数以及作用
- (3)、配置文件并重启服务
- (4)、访问服务器
- (5)查看用户名单
- (6)、删除root用户
- (7)、访问服务器
- 7、虚拟用户模式
- (1)、虚拟用户模式介绍
- (2)、创建两个用户
- (3)、创建数据库文件并降低权限,删除原文件
- (4)、创建目录并映射用户
- (5)、建立用于支持虚拟用户的PAM文件
- (6)、利用PAM文件进行认证时使用的参数以及作用
- (7)、配置文件
- (8)、创建目录并创建两个以kali和debain命名的文件
- (9)、配置文件并重启服务
- (10)访问服务器
- 三、TFTP简单文件传输协议
- 1、TFTP介绍
- 2、安装软件
- 3、配置文件
- 4、防火墙配置
- 5、重启服务并设置开机自启动
- 6、tftp命令中可用的参数以及作用
第九章 使用Vsftpd服务传输文件
一、文件传输协议
1、FTP介绍
FTP是一种互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接收客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点,而有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。
2、FTP工作模式
主动模式:FTP服务器主动向客户端发起连接请求。
被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)。
二、Vsftpd服务程序
1、安装Vsftpd服务程序
[root@centos ~]# yum install vsftpd
CentOS-8.5.2111 - Base - mirrors.aliyun.com 18 kB/s | 3.9 kB 00:00
CentOS-8.5.2111 - Extras - mirrors.aliyun.com 12 kB/s | 1.5 kB 00:00
CentOS-8.5.2111 - AppStream - mirrors.aliyun.co 29 kB/s | 4.3 kB 00:00
软件包 vsftpd-3.0.3-34.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
2、防火墙配置
//清空防火墙默认策略
[root@centos ~]# iptables -F
//保存已被清理的防火墙策略
[root@centos ~]# iptables-save
# Generated by iptables-save v1.8.4 on Tue May 9 11:03:18 2023
*filter
:INPUT ACCEPT [112:10766]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [139:13257]
:LIBVIRT_INP - [0:0]
:LIBVIRT_OUT - [0:0]
:LIBVIRT_FWO - [0:0]
:LIBVIRT_FWI - [0:0]
:LIBVIRT_FWX - [0:0]
COMMIT
# Completed on Tue May 9 11:03:18 2023
# Generated by iptables-save v1.8.4 on Tue May 9 11:03:18 2023
*security
:INPUT ACCEPT [70:5717]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [140:13597]
COMMIT
# Completed on Tue May 9 11:03:18 2023
# Generated by iptables-save v1.8.4 on Tue May 9 11:03:18 2023
*raw
:PREROUTING ACCEPT [117:11838]
:OUTPUT ACCEPT [142:13949]
COMMIT
# Completed on Tue May 9 11:03:18 2023
# Generated by iptables-save v1.8.4 on Tue May 9 11:03:18 2023
*mangle
:PREROUTING ACCEPT [118:11878]
:INPUT ACCEPT [114:10846]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [144:14285]
:POSTROUTING ACCEPT [170:17293]
:LIBVIRT_PRT - [0:0]
-A POSTROUTING -j LIBVIRT_PRT
-A LIBVIRT_PRT -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Tue May 9 11:03:18 2023
# Generated by iptables-save v1.8.4 on Tue May 9 11:03:18 2023
*nat
:PREROUTING ACCEPT [23:3213]
:INPUT ACCEPT [2:100]
:POSTROUTING ACCEPT [20:1556]
:OUTPUT ACCEPT [20:1556]
:LIBVIRT_PRT - [0:0]
-A POSTROUTING -j LIBVIRT_PRT
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT
# Completed on Tue May 9 11:03:18 2023
//将FTP协议添加到firewalld服务的允许列表中
[root@centos ~]# firewall-cmd --zone=public --add-service=ftp --permanent
success
//重启服务
[root@centos ~]# firewall-cmd --reload
success
3、过滤注释信息并通过重定向符写回原始的主配置文件
//复制并重命名为备份文件
[root@centos ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
//过滤注释信息并通过重定向符写回原始的主配置文件
[root@centos ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
//查看配置文件
[root@centos ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_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
4、Vsftpd服务程序常用的参数以及作用
参数 | 作用 |
---|---|
listen=[YES|NO] | 是否以独立运行的方式监听服务 |
listen_address=IP地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=[YES|NO] | 是否允许下载文件 |
userlist_enable=[YES|NO] userlist_deny=[YES|NO] | 设置用户列表为“允许”还是“禁止”操作 |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=[YES|NO] | 是否允许匿名用户访问 |
anon_upload_enable=[YES|NO] | 是否允许匿名用户上传文件 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_root=/var/ftp | 匿名用户的FTP根目录 |
anon_mkdir_write_enable=[YES|NO] | 是否允许匿名用户创建目录 |
anon_other_write_enable=[YES|NO] | 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) |
anon_max_rate=0 | 匿名用户的最大传输速率,0为不限制 |
local_enable=[YES|NO] | 是否允许本地用户登录FTP |
local_umask=022 | 本地用户上传文件的umask值 |
local_root=/var/ftp | 本地用户的FTP根目录 |
chroot_local_user=[YES|NO] | 是否将用户权限禁锢在FTP目录,以确保安全 |
local_max_rate=0 | 本地用户最大传输速率,0为不限制 |
5、匿名访问模式
(1)、匿名访问模式介绍
匿名访问模式是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
(2)、匿名用户模式使用的权限参数以及作用
参数 | 作用 |
---|---|
anonymous_enable=YES | 允许匿名访问模式 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_upload_enable=YES | 允许匿名用户上传文件 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录 |
anon_other_write_enable=YES | 允许匿名用户修改目录名称或删除目录 |
(3)、配置文件并重启服务设置开机自启动
//配置文件
[root@centos ~]# 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
//重启服务设置开机自启动
[root@centos ~]# systemctl restart vsftpd.service
[root@centos ~]# systemctl enable vsftpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
(4)、递归目录权限
//设置递归权限
[root@centos ~]# chown -R ftp /var/ftp/pub/
(5)、访问服务器并尝试创建目录
//访问服务器
PS C:\Users\Administrator> ftp 192.168.100.129
连接到 192.168.100.129。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.100.129:(none)): anonymous
331 Please specify the password.
密码: //直接按回车即可
230 Login successful.
//切换目录
ftp> cd pub
250 Directory successfully changed.
//创建文件夹
ftp> mkdir files
550 Create directory operation failed.
(5)、修改策略规则
[root@centos ~]# setsebool -P ftpd_full_access on
(6)、访问服务器并尝试创建目录
//访问服务器
PS C:\Users\Administrator> ftp 192.168.100.129
连接到 192.168.100.129。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.100.129:(none)): anonymous
331 Please specify the password.
密码: //直接按回车即可
230 Login successful.
//切换目录
ftp> cd pub
250 Directory successfully changed.
//创建文件夹
ftp> mkdir files
257 "/pub/files" created
//重命名文件夹
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
//删除文件夹
ftp> rmdir database
250 Remove directory operation successful.
6、本地用户模式
(1)、本地用户模式介绍
本地用户模式是通过Linux系统本地账户密码信息进行认证的模式,相较于匿名访问模式更安全,而且配置起来也很简单,但是如果被破解账户的信息,则可以完全控制整台服务器。
(2)、本地用户模式使用的权限参数以及作用
参数 | 作用 |
---|---|
anonymous_enable=NO | 禁止匿名访问模式 |
local_enable=YES | 允许本地用户模式 |
write_enable=YES | 设置可写权限 |
local_umask=022 | 本地用户模式创建的umask值 |
userlist_deny=YES | 启用“禁止用户名单”,名单文件为ftpusers和user_list |
userlist_enable=YES | 开启用户作用名单文件功能 |
(3)、配置文件并重启服务
//配置文件
[root@centos ~]# 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@centos ~]# systemctl restart vsftpd.service
(4)、访问服务器
PS C:\Users\Administrator> ftp 192.168.100.129
连接到 192.168.100.129。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.100.129:(none)): root
530 Permission denied.
登录失败。
(5)查看用户名单
[root@centos ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@centos ~]# cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
(6)、删除root用户
[root@centos ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@centos ~]# cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
(7)、访问服务器
PS C:\Users\Administrator> ftp 192.168.100.129
连接到 192.168.100.129。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.100.129:(none)): root
331 Please specify the password.
密码:123456
230 Login successful.
7、虚拟用户模式
(1)、虚拟用户模式介绍
虚拟用户模式更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。即使被破解用户的信息也无法登录到服务器。
(2)、创建两个用户
//用户名kali、debain,密码均为123456
[root@centos ~]# cat /etc/vsftpd/vuser.list
kali
123456
debain
123456
(3)、创建数据库文件并降低权限,删除原文件
//创建数据库文件并使用hash算法进行加密
[root@centos ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db
//降低权限
[root@centos ~]# chmod 600 /etc/vsftpd/vuser.db
//删除是原始明文信息文件
[root@centos ~]# rm -f /etc/vsftpd/vuser.list
(4)、创建目录并映射用户
//创建目录以及虚拟用户映射的系统本地用户,设置为不允许登录FTP服务器
[root@centos ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
//递归更改权限
[root@centos ~]# chmod -Rf 755 /var/ftproot/
(5)、建立用于支持虚拟用户的PAM文件
PAM可插拔认证模块是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。
通俗来讲,PAM是一组安全机制的模块,系统管理员可以轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。PAM采取了分层设计的思想,包含应用程序层、应用接口层、鉴别模块层,其结构如图所示。
[root@centos ~]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
(6)、利用PAM文件进行认证时使用的参数以及作用
参数 | 作用 |
---|---|
anonymous_enable=NO | 禁止匿名访问模式 |
local_enable=YES | 允许本地用户模式 |
guest_enable=YES | 开启虚拟用户账户 |
pam_service_name=vsftpd.vu | 指定PAM文件 |
allow_writeable_chroot=YES | 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求 |
(7)、配置文件
[root@centos ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=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.vu
userlist_enable=YES
(8)、创建目录并创建两个以kali和debain命名的文件
//创建目录
[root@centos ~]# mkdir /etc/vsftpd/vusers_dir
//创建kali文件,只允许kali查看文件
[root@centos ~]# touch /etc/vsftpd/vusers_dir/kali
//创建debain文件,允许debain上传、创建、修改、查看、删除文件
[root@centos ~]# vim /etc/vsftpd/vusers_dir/debain
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
(9)、配置文件并重启服务
//定义虚拟用户不同权的配置文件所存放的路径
[root@centos ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=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.vu
userlist_enable=YES
user_config_dir=/etc/vsftpd/vusers_dir
//重启服务
[root@centos ~]# systemctl restart vsftpd.service
(10)访问服务器
//使用kali用户访问服务器
PS C:\Users\Administrator> ftp 192.168.100.129
连接到 192.168.100.129。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.100.129:(none)): kali
331 Please specify the password.
密码:123456
230 Login successful.
//创建文件夹
ftp> mkdir files
550 Permission denied.
ftp> quit
221 Goodbye.
//使用debain用户访问服务器
PS C:\Users\Administrator> ftp 192.168.100.129
连接到 192.168.100.129。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.100.129:(none)): debain
331 Please specify the password.
密码:123456
230 Login successful.
//创建文件夹
ftp> mkdir files
257 "/files" created
//重命名文件夹
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
//删除文件夹
ftp> rmdir database
250 Remove directory operation successful.
三、TFTP简单文件传输协议
1、TFTP介绍
简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器端之间进行简单文件传输的协议。
2、安装软件
[root@centos ~]# yum install tftp-server tftp xinetd
3、配置文件
[root@centos ~]# 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
}
4、防火墙配置
//防火墙策略中允许UDP协议的69端口
[root@centos ~]# firewall-cmd --zone=public --add-port=69/udp --permanent
success
//重启服务
[root@centos ~]# firewall-cmd --reload
success
5、重启服务并设置开机自启动
//重启服务
[root@centos ~]# systemctl restart xinetd.service
//设置开机自启动
[root@centos ~]# systemctl enable xinetd.service
6、tftp命令中可用的参数以及作用
参数 | 作用 |
---|---|
? | 帮助信息 |
put | 上传文件 |
get | 下载文件 |
verbose | 显示详细的处理信息 |
status | 显示当前的状态信息 |
binary | 使用二进制进行传输 |
ascii | 使用ASCII码进行传输 |
timeout | 设置重传的超时时间 |
quit | 退出 |