介绍
vsftpd是一个在Linux系统上广泛使用的FTP服务器软件,支持多种配置选项和安全特性。在vsftpd中,虚拟用户是指那些使用FTP服务进行文件传输的用户,但不直接对应于服务器上的本地系统用户。这种机制可以增强系统的安全性,因为虚拟用户与本地用户是分离的。
使用虚拟用户的vsftpd配置通常涉及以下几个步骤:
- 创建虚拟用户列表:首先,需要创建一个文本文件,其中列出所有虚拟用户的名字和对应的密码。这个文件通常是虚拟用户的密码文件,格式通常是用户名和密码的明文或者加密后的字符串。
- 创建虚拟用户数据库:vsftpd可以使用不同的数据库后端来存储虚拟用户的信息,比如dbm、plaintext或mysql等。根据所选的 后端,需要创建相应的数据库文件。
- 配置vsftpd以使用虚拟用户:在vsftpd的配置文件中(通常是/etc/vsftpd/vsftpd.conf),需要指定使用虚拟用户的参数。这包括告诉vsftpd使用哪个虚拟用户数据库文件,以及在用户登录时如何处理这些用户。
- 限制虚拟用户的权限:可以配置vsftpd,使得虚拟用户只能访问特定的目录或者文件。这样可以进一步减少安全风险,并确保用户只能访问其被授权的资源。
- 配置vsftpd监听端口和模式:根据需要,可以配置vsftpd监听不同的端口,以及运行在主动模式还是被动模式。主动模式(PORT)通常用于直接客户端与服务器之间的数据连接,而被动模式(PASV)则适用于防火墙后的服务器。
- 启动和测试vsftpd服务:配置完成后,启动vsftpd服务并进行测试,以确保虚拟用户能够正常登录并访问其指定的资源。
虚拟用户的优点
- 安全性增强:因为虚拟用户与本地系统用户分离,即使某个虚拟用户的账户被破解,攻击者也不会获得系统上的其他权限。
- 易于管理:可以集中管理所有的FTP用户,而不是为每个需要访问文件的用户在系统上创建一个本地账号。
- 灵活性:可以轻松地更改用户权限,而不需要更改系统用户。
在使用vsftpd虚拟用户时,应当注意遵守相关的安全准则和法规要求,确保用户数据的安全和隐私保护。
环境
系统 | 版本 |
---|---|
CentOS | 7.6.1810 (Core) |
CPU/内存 | 4核、8G |
vsftp |
vsftp安装
yum -y install vsftpd
备份配置文件
cd /etc/vsftpd/
mv vsftpd.conf vsftpd.conf.bak
vsftpd.conf
# 禁用匿名FTP登录
anonymous_enable=NO
# 允许本地用户通过FTP登录到服务器
local_enable=YES
# 允许用户上传文件到服务器
write_enable=YES
# 设置本地用户上传文件的权限掩码
local_umask=022
# 启用目录信息消息,允许服务器在用户进入目录时显示消息
dirmessage_enable=YES
# 启用传输日志,用于记录FTP传输的详细信息
xferlog_enable=YES
# 控制数据连接的端口,使用端口20进行数据连接
connect_from_port_20=YES
# 指定传输日志的文件路径
xferlog_file=/var/log/vsftpd.log
# 使用标准的传输日志格式记录传输日志
xferlog_std_format=YES
# 允许ASCII模式上传文件
ascii_upload_enable=YES
# 允许ASCII模式下载文件
ascii_download_enable=YES
# 启用chroot列表,可以配置哪些用户被限制在其主目录下
chroot_list_enable=YES
# 启用FTP服务器监听
listen=YES
# 启用虚拟用户登录
guest_enable=YES
# 指定虚拟用户的用户名,通常是一个特殊的FTP用户
guest_username=ftp
# 指定FTP服务器监听的端口号,这里是50021
listen_port=50021
# 指定PAM服务的名称,用于身份验证
pam_service_name=vsftpd
# 启用用户列表功能,允许定义哪些用户可以访问FTP服务器
userlist_enable=YES
# 启用TCP包过滤器,允许使用TCP Wrapper配置限制访问
tcp_wrappers=YES
# 指定用户特定的配置文件目录,可以用于为不同用户定义不同的FTP设置
user_config_dir=/etc/vsftpd/vuser_conf
# 允许虚拟用户使用本地用户的权限
virtual_use_local_privs=YES
# 启用被动模式,允许客户端与服务器建立数据连接
pasv_enable=YES
# 指定被动模式数据连接的最小端口号
pasv_min_port=61001
# 指定被动模式数据连接的最大端口号
pasv_max_port=62000
# 允许在chroot环境中创建可写文件,通常在虚拟用户的情况下使用
allow_writeable_chroot=YES
64位pam认证
cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_ftp
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_ftp
虚拟用户名和密码
cat /etc/vsftpd/vuser_ftp.txt
test
111222
digitlink
111222
gitlink
123456789
生成db文件
- 注意没添加一个虚拟用户,都需要重新生成db文件
cd /etc/vsftpd/
db_load -T -t hash -f vuser_ftp.txt vuser_ftp.db
虚拟用户配置目录
cd /etc/vsftpd/
mkdir vuser_conf
cd vuser_conf
# digitlink是用户,也是文件名字
cat digitlink
#----------------------------------------------------------------
# 指定本地用户的根目录,本地用户将被限制在此目录下
local_root=/data/ftp/digitlink
# 启用chroot列表,允许配置哪些用户被限制在其主目录下
chroot_list_enable=YES
# 允许匿名用户上传文件
anon_upload_enable=YES
# 允许匿名用户创建目录
anon_mkdir_write_enable=YES
# 允许匿名用户进行其他写操作
anon_other_write_enable=YES
# 设置匿名用户上传的文件权限掩码
anon_umask=022
# 不限制匿名用户的文件只能被它们自己读取
anon_world_readable_only=NO
# 允许匿名用户上传文件
anon_upload_enable=YES
# 允许匿名用户创建目录
anon_mkdir_write_enable=YES
# 允许匿名用户进行其他写操作
anon_other_write_enable=YES
# -----------------------------------------------------------------------------
cat gitlink
chroot_list_enable=YES
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
cat chroot_list
digitlink
gitlink
授权
cd /data/ftp/
chmod 777 ./* -R
chown ftp.root ./* -R
启动
*两种启动方式,任选其一
# 命令启动
/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
# yum安装启动
systemctl start vsftpd.service
# 开机自启
systemctl enable vsftpd.service
连接
ftp 192.168.1.100 50021
总结
以上是centos上边部署vsftpd 虚拟用户的方法