一、FTP服务器简介

FTP(File Transfer Protocol):文件传输协议,是一个客户机/服务器系统。使用FTP的用户需要经过验证后才能登录

FTP:文件传输协议,工作模式[客户端/服务器],FTP服务的端口号:tcp/21、tcp/20

  • 主动模式:从服务器方主动发送连接,tcp/21
  • 被动模式:从客户端发送连接请求,tcp/20 (默认情况 )

FTP服务器的用户可分成3类。

系统用户

​ 即系统本机的用户。Linux一般不会针对实体用户进行限制,因此实体用户可以针对整个文件系统进行工作。但通常不希望他们通过FTP方式远程访问系统。

虚拟用户

​ 只能采用FTP方式使用系统的用户,不能直接使用Shell登录系统,即虚拟用户,访问服务器时需要验证。大多数FTP用户是这类用户。登录身份是/sbin/nologin

匿名用户

​ 对于公共性质的服务器可以提供匿名用户访问,用户名:anonymous/ ftp。但在使用匿名用户时,应对其进行尽可能多的限制,权限较低,如:同时连接的用户数量受限,访问的文件数目受限,不能上传文件,允许操作的指令较少,设置匿用户同时登入的最大联机数量等。

二、FTP服务器的安装–yum

软件的安装:使用yum安装

yum安装的原理介绍:自动到软件仓库云下载相应软件包进行自动安装

软件存放的位置(软件仓库):

  • 网络源:http:// 或 https://
  • FTP源:ftp://
  • 本地:file://

yum源文件存放位置(必须在这个位置): cd /etc/yum.repos.d/

  • 系统默认yum源文件:
  • 可以制作本地yum源文件:
  • 可制作阿里云网络免费源文件:

yum安装的命令:

查看软件是否已经安装:rpm -qa | grep 软件名称  
检查yum源文件:yum list | grep vsftpd  //如果找不到则yum源有问题
安装软件:yum install 软件包名称
卸载软件:yum remove 软件包名称
清除yum缓存:yum clean all
生成缓存:yum makecache
1、使用默认yum源安装vsftpd软件包

服务端软件vsftpd 客户端软件ftp

yum install vsftpd ftp
2、启动服务并设置开机自启

vsftpd的服务名称:vsftpd.service

systemctl start vsftpd.service   //启动服务
netstat -l lanp [|grep vsftpd]//查看服务器端口是否开启
systemctl enable vsftpd.service  //开机自启
3、设置防火墙与selinux机制
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
systemctl stop firewalld
setenforce 0
4、访问ftp服务器-访问的默认目录是:/var/ftp
  • Linux系统中使用ftp命令进行访问:

    ftp 192.168.220.130
    
  • 在windows客户端访问ftp服务器:

    ftp://192.168.220.130
    

三、设置匿名用户访问ftp

匿名用户登录时登录用户名为anonymous或者ftp

1、匿名用户访问FTP相关知识点
(1)默认允许匿名用户与系统用户访问ftp,访问的默认目录是:/var/ftp

注:根目录下的/var/ftp目录权限不能有写的权限,要想在文件里有写的权限就要在根目录下再新建一个目录;更改默认目录同理

只有进入var/ftp/ pub才能执行操作 即:ftp>cd pub/

访问测试(用户名:anonymous 密码为空)

(2)ftp的配置文件是:/etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf 做如下配置

设置匿名用户访问ftp:

anonymous_enable=YES
(3)设置匿名用户登录ftp时不输入密码和提示内容:
no_anon_password=YES   //设置匿名用户登录时不输入密码
ftpd_banner= welcome to our home!  //设置提示内容
(4)设置匿名用户上传、新建、删除文件:
anon_upload_enable=YES  //匿名用户上传权限
anon_mkdir_write_enable=YES //匿名用户写权限
anon_other_write_enable=YES  //匿名用户删除权限
(5)设置文件权限
chmod 777 pub  //不推荐使用
chown ftp pub  //更改匿名用户为pub的组用户

setfacl -m u:ftp:rwx pub  推荐使用
(6)设置匿名用户上传或新建后的文件权限–local/anon_umask
umask值:决定了新建文件或文件夹时的默认权限
umask值的表示方法:0022
查看umask:[root@localhost pub]#umask
更改umask:[root@localhost pub]#umask 0022
配置local_umask: vim /etc/vsftpd/vsftpd.conf   local_umask=0022
  • 如果使用vsftp的是本地用户,则要修改配置文件中的 local_umask 的值;
  • 如果使用vsftp的是虚拟用户,则要修改配置文件中的 anon_umask 的值。
  • umask = 022 时,新建的目录 权限是755(777-022),文件的权限是 644(666-022);
  • umask = 077 时,新建的目录 权限是700(777-077),文件的权限是 600(666-077)。
(7)设置不允许系统用户登录,只能匿名用户登录:
anonymous_enable=YES
local_enable=NO
(8)设置匿名用户访问ftp的默认目录
anon_root=/var/ftp
anon_root=/var/public

注意:要修改vsftp服务器匿名用户默认目录时,不可以将anon_root设置为一个其他账号已有的家目录,否则不能实现匿名用户访问ftp服务器。

2、完成项目要求
anonymous_enable=YES  允许匿名用户登录 
no_anon_password=YES  匿名用户登录时不输入密码

注销匿名用户上传、新建、删除等权限,修改文件权限。

三、配置系统用户访问FTP服务器

1、系统用户访问FTP相关知识
(1)系统用户默认访问主目录,具有上传、下载、新建、删除的权限,还可以切换到的系统其他目录。

关闭匿名用户访问,只允许系统用户访问

anonymous_enable=no   //关闭匿名用户访问
local_enable=yes     ///允许系统用户访问
local_umask=0022
(2)设置系统用户只能访问自己的主目录并具有所有权限,不允许切换到系统的其他目录。
chroot_local_user=YES  ///控制用户访问路径访问自己的主目录,不能切换到其他目录(根目录 /)
allow_writeable_chroot=YES  //允许写入;要设置不能切换其他目录必须加这一行

ftpd_banner= welcome to our home!   //提示语
max_clients=30  //设置最大连接数
idle_session_timeout=600  //设置超时时间,单位为秒
(3)设置系统用户访问指定目录,不允许切换到系统的其他目录,并具上传、下载、新建、删除的权限。
local_root=/mnt/public/         //设置系统用户访问ftp的默认目录
write_enable=YES      		   //允许写入

chroot_local_user=YES         //控制用户访问路径访问指定目录,不能切换到其他目录
allow_writeable_chroot=YES   //允许写入

修改/mnt/public/目录下的文件权限

2、基于本地用户的访问控制

默认情况下,ftp服务器中所有系统用户都可以访问ftp,如何来限定只有指定的系统用户可以访问呢?vsftp中提供了两个与系统用户相关的配置文件:

  • /etc/vsftpd/ftpusers 提供了一份用于禁止登录的ftp用户列表**(黑名单)**。 此文件中包含的用户将被禁止登录vsftpd服务器,不管该用户是否在/etc/vfsftpd/user_list中出现。

  • /etc/vsftpd/user_list 提供了一份用于允许登录的ftp用户列表**(白名单)**,此文件中包含的用户可能被禁止登录,可能被允许登录。

  • 具体在主配置文件vsftpd.conf中决定:

当存在userlist_enable=YES时,user_list文件生效。
当存在userlist_deny=YES时,则仅禁止列表中的帐户登录。
当存在userlist_deny=NO时,则允许列表中用户登录。 
  • 其中:ftpusers文件的优先级要高于user_list文件,即如果一个用户同时存在于两个文件中,则被拒绝访问ftp。

​ 举例:只让ftpuser用户访问ftp,那么可以进行如下设置

#vim /etc/vsftpd/vsftpd.conf
    userlist_enable=YES    启用userlist用户列表(系统默认设置)
    userlist_deny=NO     只允许列表中的用户登录   
#vim/etc/vsftpd/user_list

将服务重启后,在客户端测试,此时只有ftpuser用户可以访问ftp

五、Vsftpd日志管理 --/var/log/xferlog

1、Vsftp软件搭建的FTP服务器的日志文件的配置,在/etc/vsftpd.conf中找到:
xferlog_enable=YES  //开启FTP服务器记录上传下载的情况

xferlog_std_format=YES  //日志格式

xferlog_file=路径    //指定日志文件  默认在/var/log/xferlog
2、日志文件输出字段含义(左->右):

Tue Jun 9 10:45:35 2020 1 ::ffff:192.168.220.1 636 /pub/Linux.lnk b _ i a <no_password> ftp 0 * c

(1)当前时间(为本地时间),格式为:DDD MMM dd hh:mm:ss YYYY
(2)传输时间:传送文件所用时间,单位为秒
(3)远程主机名称/IP:
(4)文件大小:传输文件的大小,单位为byte
(5)文件名:传输文件名,包括路径
(6)传输类型:
a--以ASCII传输;
b--以二进制文件传输
(7)特殊处理标志:
_:不做任何特殊处理
c:文件是压缩格式
u:文件是非压缩格式
t:文件时tar格式
(8)传输方向:o 从FTP服务器向客户端传输;i 从客户端向FTP服务器传输
(9)访问模式:a 匿名用户;g 来宾用户;r 系统中的用户
(10)用户名
(11)服务名:一般为FTP
(12)认证方式:0 无; 1 RFC931认证
(13)认证用户id:如果使用*,测表示无法获得该id
(14)完成状态:i 传输未完成;c表示传输已完成。

六、配置虚拟用户访问FTP

1、安装Vsftpd虚拟用户需要用到的软件及认证模块

pam*为虚拟用户模块,libdb为数据库的模块

yum install pam* libdb-utils libdb* --skip-broken -y
2、创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt,用户名密码格式如下:
Techftp
123456
netftp
123456
admftp
123456
markftp
123456
3、 导入虚拟用户列表,生成虚拟用户的数据库,设置权限为600

-T -t 用哈希算法进行加密

db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftp_login.db
chmod 600 /etc/vsftpd/vsftp_login.db  

配置好了数据库ftpusers.txt就没用了

4、配置PAM认证文件:vim /etc/pam.d/vsftpd.vu(vsftpd.conf里默认的认证文件是vsftpd)
auth  required  pam_userdb.so  db=/etc/vsftpd/vsftp_login
account  required  pam_userdb.so  db=/etc/vsftpd/vsftp_login
5、创建一个系统用户,用于虚拟用户映射
useradd -s /sbin/nologin ftpuser
6、修改配置文件:vim /etc/vsftpd/vsftpd.conf
#pam_service_name=vsftpd   //把这条注释 ,把认证文件改成vsftpd.vu

pam_service_name=vsftpd.vu
guest_enable=YES   //开启系统虚拟用户访问
guest_username=ftpuser  //指定系统虚拟用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf  //指定虚拟用户的配置文件目录
virtual_use_local_privs=YES  //允许虚拟用户访问
7、分别为虚拟用户创建私有的虚拟目录与独立的配置文件
mkdir /home/ftpuser/techftp  //创建默认访问的目录文件
mkdir /etc/vsftpd/vsftpd_user_conf  //创建虚拟用户的配置文件目录
cd /etc/vsftpd/vsftpd_user_conf

vim techftp
   local_root=/home/ftpuser/techftp  //默认访问的目录
   write_enable=YES  //允许写入
   anon_world_readable_only=YES  //允许浏览
   anon_upload_enable=YES  //允许上传
   anon_mkdir_write_enable=YES  //允许创建
   anon_other_write_enable=YES  //允许其他用户写入
   
mkdir /home/ftpuser/netftp
cd /etc/vsftpd/vsftpd_user_conf
vim netftp
	local_root=/home/ftpuser/netftp
	write_enable=YES
	virtual_use_local_privs=NO    #不具有可登录用户的权限   
	anon_world_readable_only=YES       #可浏览目录
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES


在根文件夹下新建文件netftps,改为ftpuser的权限
cd /home/ftpusers/netftp;mkdir netftps
chown ftpuser:ftpuser netftps
systemctl restart vsftpd
ftp 127.0.0.1

例: 系统中有stu1,stu2,stu3,stu4等用户,通过黑白名单的配置只允许系统用户stu1和stu2用户可以访问FTP服务器的/mnt/ftp目录,并且具有上传、下载、新建、删除的权限,并不能切换到其他目录。

1、新建用户
useradd stu1
useradd stu2
useradd stu3
useradd stu4
2、配置文件使黑白名单生效:vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO  //不允许匿名用户登录
local_enable=YES    //允许系统用户登录
local_root=/mnt/ftp  //设置系统默认访问目录
chroot_local_user=YES  //控制用户访问路径访问自己的主目录,不能切换到其他目录(根目录 /)
allow_writeable_chroot=YES //和上一条同设置;允许写入
write_enable=YES     //允许写入
user_list_enable=YES  //设置白名单
list_deny=NO   //使白名单生效

//3、配置黑名单:
vim /etc/vsftpd/ftpusers
stu3
stu4
//配置白名单:
vim /etc/user_list
stu1
stu2
4、根目录下新建可修改文件夹: 
cd /mnt/ftp;mkdir pub
5、验证stu3  拒绝登录,因为stu3在黑名单内

验证黑名单stu3

6、验证stu1,成功

在这里插入图片描述

Logo

更多推荐