0
点赞
收藏
分享

微信扫一扫

Linux进阶(4)--Vsftpd服务

Separes 2022-03-14 阅读 74
linux

一.FTP介绍

FTP(file transfer protocol):互联网中最老牌的文件传输协议。

FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

  • 主要用于互联网中文件的双向传输(上传/下载)、文件共享
  • 跨平台 Linux、Windows
  • FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
  • FTP的默认端口 21号(命令端口) 20号(数据端口,主动模式下) 默认被动模式
  • FTP程序(软件)vsftpd

二.FTP实现

0.环境准备

配置两台主机IP:
client:172.25.254.10
server: 172.25.254.20

# 关闭selinux
# 临时关闭
setenforce 0
# 修改配置文件  永久关闭
vim /etc/selinux/config
SELINUX=disabled

1.vsftpd基本信息

基本信息

服务名称:vsftpd.service
配置目录:/etc/vsftpd/
主配置文件:/etc/vsftpd/vsftpd.conf
默认发布目录:/var/ftp

报错信息

550 程序本身拒绝
553 文件系统权限限制
500 权限过大
530 认证失败

FTP服务的客户端工具

  • Linux:ftp、lftp(客户端程序)
  • Windows:FlashFXP(虚拟主机)、FileZilla、IE、Chrome、Firefox
  • lftp和ftp工具区别:
    • lftp:默认是以匿名用户访问
    • ftp:默认是以用户名/密码方式访问
    • lftp可以批量并且下载目录

2.vsftpd安装及启用

安装及启用:

# 在server端:
yum install vsftpd					#安装vsftpd
systemctl enable --now firewalld	#假设防火墙开启
systemctl enable --now vsftpd

firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-source=172.25.254.10 --zone=trusted 
systemctl restart firewalld 

测试:

# 方法一:在client端浏览器中输入"ftp://172.25.254.20"

# 方法二:使用lftp工具(没有的话要安装)。
# 使用lftp前必须在server端打开匿名访问!
vim /etc/vsftpd/vsftpd.conf 
12 anonymous_enable=YES				#启动匿名用户的访问功能 
systemctl restart vsftpd

lftp 172.25.254.20
# 如果可以列出资源,表示成功,成功后输入"exit"退出

3.FTP匿名用户访问控制

匿名用户访问(client端)

vim /etc/vsftpd/vsftpd.conf

#匿名用户可以登陆
anonymous_enable=YES

#匿名用户家目录控制 
anon_root=/test

#匿名用户可以上传
#该设置未打开时上传文件(put /testfile),权限被拒绝,报错550
anon_upload_enable=YES

#匿名用户可以下载不能读的文件
anon_world_readable_only=NO 

#匿名用户可以新建目录
anon_mkdir_write_enable=YES

#匿名用户可以删除或重命名
anon_other_write_enable=YES

#用户登陆数量控制 
max_clients=2 

#匿名用户上传速率控制 
anon_max_rate=102400 

#匿名用户权限 
anon_umask=022

#匿名用户上传文件的用户身份设定
chown_upload=YES 
chown_username=student				#以student用户身份上传文件
chown_upload_mode=0644

##################################################################
修改配置文件后需要重启服务
systemctl restart vsftpd
##################################################################

4.FTP本地用户访问控制

本地用户(server端):在ftp服务器里是有用户身份的。

vim /etc/vsftpd/vsftpd.conf

#本地用户可以访问
local_enable=YES

#本地用户家目录控制,默认为该用户的家目录
local_root=/test

#本地用户写权限控制 
write_enable=YES

#本地用户权限设置,默认为022
local_umask=077

#本地用户上传速率控制 
local_max_rate=102400 

##################################################################
修改配置文件后需要重启服务
systemctl restart vsftpd
##################################################################

☆ FTP访问对象控制

/etc/vsftpd/ftpusers为FTP黑名单,在这个文件中的用户永远不能登陆FTP,例如root用户。

/etc/vsftpd/user_list 默认是黑名单(可以成为白名单),在此文件中的用户默认也是不能登陆FTP服务的。那么如何将/etc/vsftpd/user_list变成白名单呢:

vim /etc/vsftpd/vsftpd.conf
# 将此配置设置为NO时,只有user_list中的用户可以登陆FTP服务!
userlist_deny=NO			

systemctl restart vsftpd

如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先

5.虚拟用户访问

虚拟用户:在当前的服务器主机系统当中,是没有这个用户存在的身份,只有在ftp程序里才承认这个用户身份的存在。
服务器不可能无数量地新建本地用户,这样既浪费服务器资源,又造成登录用户权限过大而造成系统安全性的问题。所以ftp就不适用系统的认证方式,而是重新为ftp服务来构建认证体系。

☆虚拟用户建立

第一步: 创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。

vim /etc/vsftpd/ftp_auth_file
user1
123
user2
123

# ftp_auth_file文件不能直接使用,因为添加的认证关系是明文形式 不安全。
db_load -T -t hash -f ftp_auth_file ftp_auth_file.db
# 加密认证文件 -T表示的是transform转换,-t hash :指定hash加密的形式

第二步: 建立用于支持虚拟用户的PAM文件。

vim /etc/pam.d/ftp_auth
account	required	pam_userdb.so	db=/etc/vsftpd/ftp_auth_file
auth	required	pam_userdb.so	db=/etc/vsftpd/ftp_auth_file

vim /etc/vsftpd/vsftpd.conf 
pam_service_name=ftp_auth		#指定认证策略文件
guest_enable=YES 				#指定虚拟用户功能开启 
guest_username=ftp 				#指定虚拟用户在ftp服务器上的用户身份

systemctl restart vsftpd

虚拟用户创建好之后,登陆测试发现user1 user2登录进去访问的全部都是同一个目录/var/ftp。

☆虚拟用户家目录的独立设定

# 测试文件:
mkdir -p /virtuserdir/user{1..2}
mkdir /virtuserdir/user{1..2}/pub
touch /virtuserdir/user1/user1file
touch /virtuserdir/user2/user2file

vim /etc/vsftpd/vsftpd.conf
local_root=/virtuserdir/$USER
user_sub_token=$USER

systemctl restart vsftpd

☆虚拟用户配置独立

需求:只有user1可以上传,其他用户不能上传

# 首先关闭用户上传功能
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=NO

chmod 775 /virtuserdir/user{1..3}/pub
chgrp ftp /virtuserdir/user{1..3}/pub

# 建立用户配置目录
mkdir /etc/vsftpd/user_conf

# 写user1用户的配置文件
vim /etc/vsftpd/user_conf/user1
anon_upload_enable=YES

# 指定用户配置目录
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/user_conf

systemctl restart vsftpd
# 重启服务后,只有用户user1可以上传文件。
举报

相关推荐

0 条评论