概述
本文主要讲述如何搭建VSFTP及配置虚拟用户。
详细信息
阿里云提醒您:
如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改
VSFTP服务支持三种用户模式。
匿名用户:默认VSFTP是支持匿名用户的,该用户登录FTP服务使用
anonymous
用户直接登录,不需要输入密码。系统用户:可以使用Linux系统本身存在的用户,作为FTP用户,具体哪些用户可以登录FTP,可以通过配置文件指定。
虚拟用户:虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。
说明:虚拟用户在登录过程中会被隐射成匿名用户,因为匿名用户的权限是统一配置的,那么如果想区分匿名用户的权限,默认情况是无法实现的。
环境及目标
阿里云公共镜像,Centos 7.6 64位, Linux Version 3.10.0-957.21.3.el7.x86_64
vsftpd-3.0.2-25.el7.x86_64
目标是搭建一个FTP,可以使用虚拟用户vuser1登录ftp,支持主动和被动模式。
搭建过程
说明:CentOS 6与CentOS 8操作系统版本结束了生命周期(EOL),按照社区规则,CentOS 6/8的源地址内容已移除。当您在CentOS 6/8系统内继续使用默认配置的源地址时会发生报错。建议您先切换CentOS 6/8的源地址,然后再进行操作。具体操作,请参见CentOS 6 EOL如何切换源?和CentOS 8 EOL如何切换源?。
执行以下命令安装
vsftpd
服务。yum install vsftpd -y
执行以下命令确认
pam_userdb.so
模块的位置。说明说明:cenos7.6 64位系统的位置一般是/lib64/security/pam_userdb.so。
ls -l /lib64/security/pam_userdb.so
建立虚拟宿主用户。 虚拟用户并不是系统用户,也就是说这些FTP的用户在系统中是不存在的。他们的总体权限其实是集中映射在一个系统用户身上,所谓
vsftpd
的[虚拟宿主用户],就是这样一个支持着所有虚拟用户的宿主用户。执行以下命令将虚拟用户映射在virtusers这个用户上。useradd -d /data/ftproot virtusers -s /sbin/nologin
说明说明:-d指定家目录,这里指定之前的ftp根目录
/data/ftproot
。 -s指定系统用户登录的shell,nologin即不允许系统login登录。建立FTP相关工作目录,以及权限管理。 最新版
vsftpd
不允许用户主目录有w
权限,因此在主目录下新建一个子目录。所有上传、下载、删除、重命名等操作只能在子目录中进行,虚拟用户vuser1的ftp目录是/data/ftproot/vuser1/
,没有w
权限,设置权限为500,以下是相关目录权限设置参考。/data #数据目录,便于后期数据备份 └── [drwxr-xr-x] ftproot #FTP服务目录 └── [dr-x------] vuser1 #虚拟用户主目录,后期可以增加vuser2、vuser3... └── [drwxr-xr-x] rootdir #虚拟用户FTP工作目录,可以在此目录读写操作
说明说明:此处采用目录结构树的形式展现个子目录权限。
执行以下命令创建目录。
mkdir -p /data/ftproot/vuser1/rootdir
执行以下命令进行权限设置。
chown -R virtusers.virtusers /data/ftproot chmod 500 /data/ftproot/vuser1
配置虚拟用户
执行以下命令生成虚拟用户列表。
vi /etc/vsftpd/vuserlist
虚拟用户列表的内容
vuser1 123456
说明说明:奇数行为用户名,偶数行为用户密码。
用系统的
db_load
工具来生成db文件,出于安全角度修改vuserlist.db
为600权限。db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuserlist.db chmod 600 /etc/vsftpd/vuserlist.db
修改PAM验证。 修改
/etc/pam.d/vsftpd
,这个文件名与/etc/vsftpd.conf
中的pam_service_name=vsftpd
相对应。注释掉所有参数,在最后面加入以下两行内容。auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist
创建及配置虚拟用户的配置文件。
创建虚拟用户的配置文件
mkdir /etc/vsftpd/vuser_conf/
配置虚拟用户的配置文件
vi /etc/vsftpd/vuser_conf/vuser1
添加以下配置信息
local_root=/data/ftproot/vuser1 anon_upload_enable=YES anon_world_readable_only=NO anon_mkdir_write_enable=YES anon_other_write_enable=YES
配置VSFTP的
/etc/vsftpd/vsftpd.conf
主配置文件。配置配置项
listen=YES #开启IPv4监听 listen_ipv6=NO #关闭IPV6监听 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list pam_service_name=vsftpd #如果前面/etc/pam.d/vsftpd没有改文件名,就不修改 virtual_use_local_privs=YES #虚拟用户使用本地用户的权限 guest_enable=YES #开启虚拟用户 guest_username=virtusers #指定虚拟用户的宿主用户 user_config_dir=/etc/vsftpd/vuser_conf #指定虚拟用户配置文件 pasv_enable=YES #开启被动模式 pasv_min_port=30100 #被动模式最小端口,本示例设置为30100 pasv_max_port=30200 #被动模式最大端口,本示例设置为30200 pasv_address=X.X.X.X #被动模式的IP地址,VPC环境下需要设置为服务器公网地址
记得创建文件
/etc/vsftpd/chroot_list
,并且在文件中添加ftp用户,否则连接ftp会报错。touch /etc/vsftpd/chroot_list
修改文件,文件中添加ftp用户,本文档示例中的ftp用户是vuser1
vim /etc/vsftpd/chroot_list
添加的用户列表内容
vuser1
结果测试
使用Filezilla等FTP客户端测试,虚拟用户vuser1可以选择主动或被动模式正常访问FTP,并且在工作目录rootdir
下可以正常读写文件,创建删除修改目录。
说明:如果被动模式无法访问,请检查安全组是否放行被动模式的端口。
适用于
云服务器ECS