Linux进阶(4)--FTP服务

一.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软件名称 => vsftpd => vs(very secure ftp daemon)

二.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端)

lftp 172.25.254.20

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服务器里是有用户身份的。

lftp 172.25.254.20 -u student

vim /etc/vsftpd/vsftpd.conf

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

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

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

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

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

#锁定用户到自己的家目录中
chroot_local_user=YES
#如果出现500报错
#去除写权限(治标不治本)
chmod a-w /home/student
#核心解决方案,添加一个选项
vim /etc/vsftpd/vsftpd.conf
allow_writeable_chroot=YES

##################################################################
修改配置文件后需要重启服务
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可以上传文件。

所有配置参数可以通过"man 5 vsftpd.conf"查询

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值