vsftpd 安全漏洞(CVE-2021-30047)修复过程

  经过核实, vsftpd 安全漏洞(CVE-2021-30047)是由于VSFTPD 3.0.3版本存在拒绝服务漏洞,该漏洞源于程序未正确限制允许连接的设备数量,攻击者可利用该漏洞导致拒绝服务。如果不及时修复,可能会面临服务异常,被攻击的难题。解决方法就是升级到新版3.0.5版本(RPM resource vsftpd (rpmfind.net)),我获取的是二进制包,人家的网盘获取的,这个只有靠你自己去找了。

  下面是下载 地址,看看能否拿到吧

        安装之前需要先卸载旧版的vsftp

[root@test pkg]# rpm -qa|grep vsftpd
vsftpd-3.0.3-32.el8.x86_64
[root@test pkg]# rpm -e vsftpd-3.0.3-32.el8.x86_64
旧的vsftpd.conf会改名为 vsftpd.conf.rpmsave

 

vsftpd-3.0.5 源码下载
http://vsftpd.beasts.org/
链接:https://pan.baidu.com/s/1raN4EMANfFxAjS8zjIu3Mw?pwd=p86x

  安装之前需要补充libcap-dev开发包和gcc编译器

     yum -y  install libcap-devel gcc

  接下来解压

tar -zcvf vsftpd-3.0.5.tar.gz

  进入解压后的目录执行更改和编译操作

cd vsftpd-3.0.5
#sed -i 's#lib/#lib64/#g' vsf_findlibs.sh
sed -i 's#/etc/vsftpd.#/etc/vsftpd/#g' tunables.c
sed -i 's#/etc/vsftpd.conf#/etc/vsftpd/vsftpd.conf#g' defs.h
make
make install
# vsftpd 会复制到 /usr/local/sbin/

   编译完成之后,在当前目录下会有几个关键文件,比如

[root@test vsftpd-3.0.5]# ls RedHat/ vsftpd xinetd.d/ vsftpd.conf
vsftpd  vsftpd.conf

RedHat/:
README.spec  vsftpd.log  vsftpd.pam

xinetd.d/:
vsftpd

     需要执行如下操作:

cp vsftpd.conf /etc/vsftpd
cp xinetd.d/vsftpd  /etc/xinetd.d/
cp RedHat/vsftpd.pam  /etc/pam.d/vsftpd
sed -i -e 's/lib/lib64/g'  /etc/pam.d/vsftpd

     准备好了配置文件和环境,接下来需要配置vsftpd.conf

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
sed -i 's/#local_enable=YES/local_enable=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's/#write_enable=YES/write_enable=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's!#chroot_list_file=/etc/vsftpd.chroot_list!chroot_list_file=/etc/vsftpd/chroot_list!' /etc/vsftpd/vsftpd.conf
echo allow_writeable_chroot=YES >> /etc/vsftpd/vsftpd.conf

   最后vsftpd.conf的重要配置内容如下

复制代码
## 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
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
复制代码

    需要在创建文件/etc/vsftpd/chroot_list,并把需要开放的ftp用户名称放进去,配置好用户

useradd test -d /home/test/FTP -s /sbin/nologgin
passwd test

echo test >> /etc/vsftpd/chroot_list

   新增systemd配置文件

复制代码
# vim /usr/lib/systemd/system/vsftpd.service 
[Unit]
Description=Vsftpd ftp daemon
After=network.target
 
[Service]
Type=forking
ExecStart=/bin/bash -c "/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &"
 
[Install]
WantedBy=multi-user.target
复制代码

  允许vsftpd在服务器启动后自行启动

systemctl daemon-reload 
systemctl enable vsftpd.service systemctl start vsftpd.service

# 如果无法使用systemctl start vsftpd.service 启动vsftpd,采用下面的方法可以启动
# nohup /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &

最后查看当前版本,已经是最新版了
[root@test~]# vsftpd -version
vsftpd: version 3.0.5

 

如果出现登录验证失败,可以从下面几个方面入手:
1. setenforce 0
2. 看看是否增加了chroot_list文件以及文件位置是否正确
3. 是否增加了vsftpd启动文件
4. 查看/etc/pam.d/vsftpd文件里的so文件是否存在
5. 重启试试


 

 

 

    

  

  

posted @   netma  阅读(1147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示