25 使用 vsftpd 服务传输文件

文件传输协议

        FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,其中端口20 用于进行数据传输,端口21 用于接受客户端发出的相关FTP 命令与参数。FTP 服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些 FTP 客户端工具还可以支持文件的多点下载以及断点续传技术,

        FTP 服务器是按照 FTP 协议在互联网上提供文件存储和访问服务的主机,FTP 客户端则
是向服务器发送连接请求,以建立数据传输链路的主机。FTP 协议有下面两种工作模式。
主动模式:FTP 服务器主动向客户端发起连接请求。
被动模式:FTP 服务器等待客户端发起连接请求(默认工作模式)。

防火墙一般是用于过滤从外网进入内网的流量,因此有些时候需要将 FTP 的工作模式设置为主动模式,才可以传输数据。

 vsftpd 服务程序

安装

 yum install vsftpd -y

iptables 防火墙管理工具默认禁止了 FTP 协议的端口号,需要清空 iptables 防火墙的默认策略,并把当前已经被清理的防火墙策略状态保存下来:

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables-save

FTP 协议添加到 firewalld 服务的允许列表中

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=ftp
success
[root@localhost ~]# firewall-cmd --reload
success

配置文档 

好习惯:配置前,先备份

grep 命令后面添加-v 参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉所有的注释信息),然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中(这样配置文档里面都是有效信息了)

 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

 grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

 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 为不限制

 3 种认证模式登录

  1. 匿名模式 :任何人都可以无须密码验证而直接登录到 FTP 服务器。
  2. 本地模式:是通过 Linux 系统本地的账户密码信息进行认证的模式。
  3. 虚拟用户:需要为 FTP 服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。

匿名模式

        默认关闭了匿名开放模式,需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。默认访问的是/var/ftp 目录

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

配置(关键前5行)

[root@localhost ~]# cat /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@localhost ~]#

重启vftpd服务,并加到开机自启

[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

使用Windows电脑访问FTP

C:\Users\ftp 192.168.2.100
连接到 192.168.2.100。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.2.100:(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.
ftp>

 发现创建目录失败,清空了 iptables 防火墙策略,而且也在 vsftpd服务程序的主配置文件中添加了允许匿名用户创建目录和写入文件的权限啊

查看目录权限,只有root用户有写入权限

[root@localhost ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 2 root root 6 Aug 13  2018 /var/ftp/pub
[root@localhost ~]#

通过设置权限的方法让其他用户获取到写入权限但是,由于 vsftpd 服务自身带有安全保护机制,因此不要直接修改/var/ftp 的权限,一定要记得是对里面的 pub 目录修改权限

chmod -R 777 /var/ftp/pub/

 查看与 FTP 相关的 SELinux 域策略

[root@localhost ~]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off

ftpd_full_access--> off 策略规则导致了操作失败 ,将其打开,并加上-P参数数让修改过的
策略永久生效

 setsebool -P ftpd_full_access=on

 设置成功,可以访问

C:\Users>ftp 192.168.2.100
连接到 192.168.2.100。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.2.100:(none)): anonymous
331 Please specify the password.
密码:
230 Login successful.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir trick
257 "/pub/trick" created
ftp> rename trick trickX
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir trickX
250 Remove directory operation successful.
ftp> quit
221 Goodbye.

本地模式

相关参数

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

umask

        unmask 一般被称为“权限掩码”或“权限补码”,能够直接影响到新建文件的权限值。例如在 Linux 系统中,新建的普通文件的权限是 644,新建的目录的权限是 755。
        普通文件的默认权限是 666,目录的默认权限是 777,这都是写在系统配置文件中
的。但默认值不等于最终权限值。umask 参数的默认值是 022,根据公式“默认权限−umask
=实际权限
”,所以普通文件的默认权限到手后就剩下 644,而目录文件就剩下 755 了

         umask 实际是权限的反掩码,通过它可以调整文件最终的权限大小。相信这样一来,这样大家应该明白了。

配置(关键前4行)

[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

重启服务,将配置好的服务添加到开机启动项中 

发现root用户登录不了

C:\Users>ftp 192.168.2.100
连接到 192.168.2.100。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.2.100:(none)): root
530 Permission denied.
登录失败。
ftp>

         vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers 和 user_list)。ftpuser相当于黑名单。里面有root用户。

[root@localhost ~]# 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

      如果将上面主配置文件中 userlist_deny 的参数值改成 NO,  user_list 列表就变成了强制白名单。它的功能与之前完全相反,只允许列表内的用户访问,拒绝其他人的访问。

        采用本地用户模式登录 FTP 服务器后,默认访问的是该用户的家目录,而且该
目录的默认所有者、所属组都是该用户自己 。(如果发现登录不了,将开启 SELinux 域中对 FTP 服务的允许策略)

C:\Users\ftp 192.168.2.100
连接到 192.168.2.100。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(192.168.2.100:(none)): trick
331 Please specify the password.
密码:
230 Login successful.
ftp> mkdir trick
257 "/home/trick/trick" created
ftp> rename trick trickX
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir trickX
250 Remove directory operation successful.
ftp> quit
221 Goodbye.

虚拟用户

最安全的一种认证模式,是专门创建出一个账号来登录 FTP 传输服务的,而且这个账号不能用于以 SSH 方式登录服务器。

创建用于进行 FTP 认证的用户,数据库文件奇数行为账户名,偶数行为密码

[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# vim vusers.list
xiaoming
123456
xiaohong
456789

 需要使用db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。

[root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@localhost vsftpd]# chmod 600 vusers.db
[root@localhost vsftpd]# rm -f vusers.list

创建 vsftpd 服务程序用于存储文件的根目录以及用于虚拟用户映射的系统本地用户。vsftpd 服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中。虚拟用户创建的文件的属性也都归属于这个系统本地用户 (virtual) "ftproot" 目录是 FTP 用户可以访问的根目录。

把这个系统本地用户的家目录设置为/var 目录(该目录用来存放经常发生改变的数据)。并且为了安全起见,将这个系统本地用户设置为不允许登 FTP 服务器

[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost ~]# ls -ld /var/ftproot
drwx------. 3 virtual virtual 78 Jan 31 14:46 /var/ftproot
[root@localhost ~]# chmod -Rf 755 /var/ftproot/

建立用于支持虚拟用户的 PAM 文件

[root@localhost ~]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

 配置参数

 anonymous_enable=NO         禁止匿名开放模式
local_enable=YES         允许本地用户模式
guest_enable=YES         开启虚拟用户模式
guest_username=virtual         指定虚拟用户账户
pam_service_name=vsftpd.vu         指定 PAM 文件
allow_writeable_chroot=YES        允许对禁锢的 FTP 根目录执行写入操作,而且不拒绝用户的登录请求

配置文档

关键配置(前7行)

[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
pam_service_name=vsftpd.vu
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES

 为虚拟用户设置不同的权限。

需新建一个目录,在里面分别创建两个以 虚拟用户名称命名的文件,其中在文件中写入允许的相关权限(使用匿名用户的参数)

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir/
[root@localhost ~]#  cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# touch xiaohong
[root@localhost vusers_dir]# vim xiaoming
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

修改 vsftpd 主配置文件,通过添加 user_config_dir 参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。

user_config_dir=/etc/vsftpd/vuser_dir

 重启服务,将配置好的服务添加到开机启动项中 

使用虚拟用户模式成功登录到 FTP 服务器,xiaoming可以登录,还可以创建、改名和删除文件 xiaohong只能登录,没有其他权限

总结

使用不同的方式登录文件传输服务器后,默认所在的位置

登录方式默认目录
 匿名公开
 
/var/ftp
本地用户
 
该用户的家目录
虚拟用户对应映射用户的家目录

TFTP(简单文件传输协议)

由于 TFTP 在传输文件时采用的是 UDP 协议,占用的端口号为 69,因为 TFTP 不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎不大的文件时,效率更高。

tftp-server 是服务程序,tftp 是用于连接测试的客户端工具,xinetd 是管理服务

 yum install tftp-server tftp xinetd

在安装TFTP 软件包后,还需要在 xinetd 服务程序中将其开启。在RHEL 8 系统中,
tftp 所对应的配置文件默认不存在,需要用户根据示例文件(/usr/share/doc/xinetd/sample.conf)自行使用 vsftpd 服务传输文件创建。就可以使用:

[root@localhost vsftpd]# 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 服务并将它添加到系统的开机启动项中,以确保 TFTP 服务在系统重启后依然处于运行状态。考虑到有些系统的防火墙默认没有允许 UDP 协议的 69 端口,因此需要手动将该端口号加入到防火墙的允许策略中:

[root@localhost vsftpd]# systemctl restart tftp
[root@localhost vsftpd]# systemctl enable tftp
Created symlink /etc/systemd/system/sockets.target.wants/tftp.socket → /usr/lib/systemd/system/tftp.socket.
[root@localhost vsftpd]# systemctl restart xinetd
[root@localhost vsftpd]# systemctl enable xinetd
[root@localhost vsftpd]# firewall-cmd --zone=public --permanent --add-port=69/udp
success
[root@localhost vsftpd]# firewall-cmd --reload
success

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

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

[root@localhost ~]# echo "trick" > /var/lib/tftpboot/trick.txt
[root@localhost ~]# tftp 192.168.2.100
tftp> get trick.txt
tftp> quit
[root@localhost ~]# ls
111              backup     initial-setup-ks.cfg
123              BB.conf    linux.txt
2                b.txt      Music
20Z_file         CC.conf    Pictures
3                ceshi      Public
4                c.txt      temp1
456              Desktop    Templates
5                Documents  tmp.tar.gz
AA.conf          Downloads  trick.txt
anaconda-ks.cfg  haha       Videos
A.txt            hoho
[root@localhost ~]#

  • 34
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trick♂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值