vsftpd部署文档(centos7.9)

该部署文档用于生产环境

说明:
- vsftpd的版本:vsftpd-3.0.2-29.el7_9.x86_64
- ftp根目录:/var/www
- ftp 配置文件目录:/etc/vsftpd
- ftp 虚拟用户权限配置文件目录:/etc/vsftpd/user_conf

实现目标:
- 匿名用户可以登录,但是不能访问虚拟用户的宿主目录,只能访问共享目录
- 虚拟用户对自己的宿主目录有任何权限,且只能在自己宿主目录中操作

搭建过程

  1. 安装vsftpd,ftp和libdb-utils(需要安装db包,用来加密虚拟用户的账号信息,centos7已经安装好了)
#阿里云服务器默认安装,此处可忽略
[root@CentOS ~]# yum install -y vsftpd ftp
  1. 创建本地用户(用于映射虚拟用户)
# 建立ftp用户目录
[root@CentOS ~]# mkdir -p /var/www/test.com
# 创建用户
[root@CentOS ~]# useradd -d /var/www/ vsftp -s /sbin/nologin
# 更改权限和主组权限
[root@CentOS ~]# chmod 755 /var/www/
[root@CentOS ~]# chown vsftp.vsftp /var/www/  -R
  1. 修改配置文件
[root@CentOS ~]# cd /etc/vsftpd
[root@CentOS ~]# mv vsftpd.conf vsftpd.conf.bak
[root@CentOS ~]# vim /etc/vsftpd/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_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
#修改ftp默认端口(涉及等保和网络安全检查会扫描默认的21端口,所以修改端口号)
listen_port=1802
# 限制pasv的打开端口范围(不开这个ftp客户端连不上)
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10010
# 修改ftp默认目录
chroot_local_user=YES
local_root=/var/www/test.com
anon_root=/var/www/test.com
anon_umask=022
# pam认证文件,注意下列值要跟第5步文件名一致
pam_service_name=vsftpd
#虚拟用户权限配置目录
user_config_dir=/etc/vsftpd/user_conf
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
one_process_model=NO
#开启虚拟用户
guest_enable=YES
guest_username=vsftp
  1. 创建存储虚拟用户的文件
[root@CentOS ~]# mkdir /etc/vsftpd/user_conf/
[root@CentOS ~]# cd /etc/vsftpd/user_conf
[root@CentOS ~]# vim lyh
# 设置登录后禁锢的目录
local_root=/var/www/test.com
# 开放写权限
write_enable=yes
# 开放下载权限
anon_world_readable_only=no
# 开放上传权限
anon_upload_enable=yes
# 开放创建目录的权限
anon_mkdir_write_enable=yes
# 开放删除和重命名的权限
anon_other_write_enable=yes
  1. 生成数据库文件并创建PAM认证文件
[root@CentOS ~]# cd /etc/vsftpd/
[root@CentOS ~]# vim virtusers
lyh
gF9|rH1%hO7;jE8~
[root@CentOS ~]# db_load -T -t hash -f virtusers virtusers.db
[root@CentOS ~]# chmod 600 virtusers.db
[root@CentOS ~]# cd /etc/pam.d/
[root@CentOS ~]# mv vsftpd vsftpd.bak
[root@CentOS ~]# vim /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
  1. 启动vsftpd服务
[root@CentOS ~]# systemctl start vsftpd
[root@CentOS ~]# systemctl enable vsftpd
  1. 更改虚拟用户目录权限
[root@CentOS ~]# mkdir /var/ftp/admin && chmod 700 /var/ftp/admin
[root@CentOS ~]# mkdir /var/ftp/user && chmod 700 /var/ftp/user
[root@CentOS ~]# chown -R vsftp.root  /var/ftp
  1. 测试访问
[root@CentOS ~]# ftp 127.0.0.1
 Connected to 127.0.0.1 (127.0.0.1).
 220 (vsFTPd 3.0.2)
 Name (127.0.0.1:root): lyh
 331 Please specify the password.
 Password:
 230 Login successful.
 Remote system type is UNIX.
 Using binary mode to transfer files.
 ftp> exit
 221 Goodbye.
  1. 添加新用户(不需要重启vsftpd服务)
[root@CentOS ~]# vim /etc/vsftpd/vuser_list
admin
123456
user
123456
test
123456
#创建test用户对应的目录并授权
[root@CentOS ~]# mkdir /var/ftp/test && chown vsftp:root /var/www/test
#重新生成加密的db文件
[root@CentOS ~]# cd /etc/vsftpd
[root@CentOS ~]# db_load -T -t hash -f vuser_list vuser_list.db
# 删除用户就是把添加用户的操作撤销,然后删除加密的db文件重新生成即可。
# 测试访问,此时添加的test用户的/var/ftp/test目录的权限是755,匿名用户可以登录。若要屏蔽,修改权限为700即可。
  1. 问题处理
- 报错1:226 Transfer done (but failed to open directory)
	解决:关闭selinux和防火墙
- 报错2:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
	解决:配置文件中加入 allow_writeable_chroot=YES 针对标准vsftpd(standonly)模式,然后重启ftp。
  1. vsftp上传文件权限问题
默认情况下vsftp上传之后文件的权限是600,目录权限是700
* local_umask=xxx这是指定本地用户上传后的文件权限设置
* anon_umask=xxx这是指定虚拟用户上传后的文件权限设置
* umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
* umask = 022时,新建的目录 权限是755,文件的权限是 644
* umask = 077时,新建的目录 权限是700,文件的权限时 600
  1. 部署云服务器上,安全组放开1802还是连接失败
按照配置文件中设置被动端口范围,放开安全组
  1. 使用FileZilla连接报超时
[![](https://www.maomaonu.fun/wp-content/uploads/2024/06/wp_editor_md_61b62dbca252483efe2156e06778d5c5.jpg)](https://www.maomaonu.fun/wp-content/uploads/2024/06/wp_editor_md_61b62dbca252483efe2156e06778d5c5.jpg)
posted @ 2025-04-07 14:18  没有猫的猫奴  阅读(68)  评论(0)    收藏  举报