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

2. 创建本地用户(用于映射虚拟用户)

# 建立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

3. 修改配置文件

[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

4. 创建存储虚拟用户的文件

[root@CentOS ~]# mkdir /etc/vsftpd/user_conf/
[root@CentOS ~]# cd /etc/vsftpd/user_conf
[root@CentOS ~]# vim xxx
# 设置登录后禁锢的目录
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

5. 生成数据库文件并创建PAM认证文件

[root@CentOS ~]# cd /etc/vsftpd/
[root@CentOS ~]# vim virtusers
xxx
gF9@@rH1%hxxyyyyyxxxxxxxxx22;8~
[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

6. 启动vsftpd服务

[root@CentOS ~]# systemctl start vsftpd
[root@CentOS ~]# systemctl enable vsftpd

7. 更改虚拟用户目录权限

[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

8. 测试访问

[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): xxx
 331 Please specify the password.
 Password:
 230 Login successful.
 Remote system type is UNIX.
 Using binary mode to transfer files.
 ftp> exit
 221 Goodbye.

9. 添加新用户(不需要重启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即可。

10. 问题处理

– 报错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。

11. vsftp上传文件权限问题
file_open_mode上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。
默认情况下vsftp上传之后文件的权限是600,目录权限是700

* local_umask=xxx这是指定本地用户上传后的文件权限设置
* anon_umask=xxx这是指定虚拟用户上传后的文件权限设置
* umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
* umask = 022时,新建的目录 权限是755,文件的权限是 644
* umask = 077时,新建的目录 权限是700,文件的权限时 600

12. 部署云服务器上,安全组放开1802还是连接失败
按照配置文件中设置被动端口范围,放开安全组

13.使用FileZilla连接报超时
修改配置

posted @ 2024-09-21 22:13  星星的小窝  阅读(17)  评论(0编辑  收藏  举报