vsftpd学习笔记

vsftpd

一.vsftpd的原理

1.FTP的工作原理

一个基于TCP协议的服务,使用客户端+服务器模式基本工作模式,FTP客户端在与FTP服务器端进行连接时,会建立两条通道:控制通道,数据通道。控制通道主要用于连接的建立,以及命令的传送,而数据通道主要用于数据的传输。

2.FTP的两种工作模式

  • 主动模式:是服务器端主动与客户端建立数据通道,而且,服务器端建立数据通道用的是20号端口
  • 被动模式:是客户端主动与服务器端建立数据通道,而且,服务器建立数据通道用的是随机端口

二.vsftpd的介绍

sftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等

三.vsftpd服务的安装与配置

1.服务的安装

查询系统中是否安装vsftpd

[root@computer ~]# rpm -qa|grep vsftpd

安装vsfpd

[root@computer ~]# yum install -y vsftpd

启动vsftpd并设为自启

[root@computer ~]# systemctl start vsftpd &&systemctl enable vsftpd

查看vsftpd状态

[root@computer ~]# systemctl status vsftpd

注意:默认情况下,vsftpd安装完成后,服务器可以使用默认配置文件正常启动,但是系统有firewalld防火墙,会拒绝FTP服务的端口;因此,这时客户端是不能正常访问FTP服务器的。

2. 环境配置

关闭防火墙并关闭开机自启

[root@computer ~]# systemctl stop firewalld &&systemctl disable firewalld

临时关闭selinux

[root@computer ~]# setenforce 0

修改/etc/selinux/config 文件,将SELINUX=enforcing改为disabled

3. vsftpd服务的配置

1.vsftpd的几个配置文件

  • /etc/vsftpd/vsftpd.conf vsftpd的主配置文件
  • /etc/vsftpd/ftpusers 用户控制文件,默认情况下,此文件的用户禁止登陆FTP服务器
  • /etc/vsftpd/user_list 用户控制文件,默认情况下,此文件的用户禁止登陆FTP
  • /etc/vsftpd/vsftpd 用户身份验证的策略文件

2.匿名用户的配置

所有的客户都使用anonymous登录,不需要提供密码,针对不同的用户,不能做个性化配置,默认情况下匿名用户登录时,只能读工作目录的数据,不能上传亦不能修改工作目录的数据

进入vsftpd的服务目录

root@computer:/var/ftp/pub# cd /etc/vsftpd/

将主配置文件备份

root@computer:/etc/vsftpd# cp vsftpd.conf vsftpd.conf.bak 

编辑主配置文件

root@computer:/etc/vsftpd# grep -v "^#" vsftpd.conf.bak | grep -v "^$" > vsftpd.conf
root@computer:/etc/vsftpd# vi vsftpd.conf   
anonymous_enable=YES
#启用匿名用户登录
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
#使用20号端口建立数据通道,设置主动模式的数据通道端口
#pasv_enable=NO
#关闭被动模式(开启主动模式)
xferlog_std_format=YES
#设置日志为标准格式
listen=YES
#开启IPv4的服务侦听
pam_service_name=/etc/pam.d/vsftpd
#指定用户登录身份验证策略文件
userlist_enable=YES
#启用用户控制列表ACL
tcp_wrappers=YES

注意:匿名用户登录,是要使用用户名(anonymous)登录的,但系统中,没有anonymous这个实体帐号,真实的情况是:匿名用户登录时,都被映射到“ftp”系统默认帐号上登录。vsftpd服务给匿名用户开启写权限时,工作目录的根目录/var/ftp/pub,是不允许有写权限的,只能给工作目录下的子目录有写权限

root@centos:/var/ftp# chown root:ftp /var/ftp/pub
root@centos:/var/ftp/pub# mkdir test
root@centos:/var/ftp/pub# chown ftp:ftp test

3.本地用户的配置

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
idle_session_timeout=600 
#控制通道,在600秒之内没有通信流量,FTP服务器会认为连接超时,会主动断开
data_connection_timeout=120    
#数据通道,在120秒之内没有通信流量,FTP服务器会认为连接超时,会主动断开
ftpd_banner=Welcome to blah FTP service.          
#登录的消息标语
chroot_list_enable=YES                                          
#开启限制用户(列表)在家目录中,它与下面一行参数是配套使用
chroot_list_file=/etc/vsftpd/chroot_list                 
#与上一行配套使用,说明列表文件的路径,在这个文件中的用户就会被限制在自己的家目录
listen=YES                                                             
#开启vsftpd服务的独立运行模式
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES

4.虚拟用户

匿名用户:虽然不用输入密码,但大家都统一使用同一个帐号,不便于个性化的配置
本地用户:虽然可以个性化配置,但是它使用的是系统实体帐号,它的安全风险极大
虚拟用户:兼有前两者的优点,既能个性化配置,又不使用系统实体帐号

1.将本地用户加入黑名单,禁止本地用户登录

root@centos:/etc/vsftpd# vi ftpusers 

在这个文件最后,增加本地用户,禁止他们登录 FTP

2.建立ftp虚拟用户账号,并生成虚拟用户的数据库

root@centos:/etc/vsftpd# vi vuser 

增加如下的用户和密码,然后保存退出

susan
123456
lily
654321

将上面的文本格式用户文件转成数据库文件

root@centos:/etc/vsftpd/vuser#db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db

3.创建用于映射虚拟用户的真实用户

root@centos:/etc/vsftpd# useradd ftpuser -s /sbin/nologin

4.创建虚拟账号的家目录,并设置相应的权限

root@centos:/etc/vsftpd# cd /home/ftpuser/
root@centos:/home/ftpuser# mkdir susan
root@centos:/home/ftpuser# mkdir lily
root@centos:/home/ftpuser# chown ftpuser:ftpuser * -R   //给予ftpuser实体帐号,在虚拟帐号子目录上的写权限

5.使用虚拟用户数据库文件配置pam的认证模块

root@centos:/home/ftpuser# cd /etc/pam.d/
root@centos:/etc/pam.d# vi vsftpd     //编辑vsftpd身份验证的PAM策略文件,把原内容全部注释,再追加如下两行内容
auth        required    pam_userdb.so  db=/etc/vsftpd/vuser
account     required    pam_userdb.so  db=/etc/vsftpd/vuser

6.配置vsftpd的主配置文件,开启虚拟用户,并将虚拟用户映射到真实用户上

root@centos:/etc/pam.d# cd ../vsftpd/
root@centos:/etc/vsftpd# vi vsftpd.conf                //配置主配置文件,追加如下三行
guest_enable=YES                                                  //启用虚拟用户登录
guest_username=ftpuser                                        //将虚拟用户映射到实体用户上
user_config_dir=/etc/vsftpd/vuser_conf/               //指定虚拟用户的子配置文件目录路径

7.虚拟用户配置文件user_config_dir

root@centos:/etc/vsftpd# mkdir vuser_conf         //创建虚拟用户子配置文件的存放目录
root@centos:/etc/vsftpd# cd vuser_conf/
root@centos:/etc/vsftpd/vuser_conf# vi susan      //新建同名的虚拟用户子配置文件,增加如下内容并保存
local_root=/home/ftpuser/susan
write_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
root@centos:/etc/vsftpd/vuser_conf# vi lily      //新建同名的虚拟用户子配置文件,增加如下内容并保存
local_root=/home/ftpuser/lily
write_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO

8.重启vsftpd服务,进行测试

root@centos:/etc/vsftpd/vuser_conf# systemctl restart vsftpd
root@centos:/etc/vsftpd/vuser_conf# systemctl status vsftpd
posted on 2022-06-10 14:36  阿金_阿金  阅读(109)  评论(0编辑  收藏  举报