1 部署环境

OpenEuler-24.03-LTS-SP1

2 安装软件

dnf install vsftpd
#使用虚拟用户认证时,需安装gdbm数据库
dnf install gdbm

3 配置文件

备份配置文件:

cd /etc/vsftpd
cp vsftpd.conf vsftpd.conf~
vi vsftpd.conf

3.1 基础配置

编辑配置文件:

# 使用IPV4连接

listen=YES 

# 禁用IPV6连接
listen_ipv6=NO

# 指定数据传输端口为20
connect_from_port_20=YES

# 不显示目录说明和欢迎信息,选择YES时需在目录内创建“.message”文件,设置权限644
dirmessage_enable=NO

# 显示欢迎信息            
ftpd_banner="欢迎到东哥的FTP做客!"

#
# 启用xferlog日志功能
xferlog_enable=YES
# 不启用xferlog格式记录传输日志
xferlog_std_format=NO
# 指定xferlog日志存储位置
xferlog_file=/var/log/vsftpd.log

#开启传输日志,详细记录登录信息

log_ftp_protocol=YES
#不隐藏访问IP

hide_ids=NO

#

#允许写入

write_enable=YES

#本地用户创建文件默认掩码

local_umask=022

#匿名用户创建文件默认掩码

anon_umask=022

#允许用户修改文件属性

chmod_enable=YES

#关闭仅可访问全局可读文件功能

anon_world_readable_only=NO

#

#不允许用户递归访问目录

ls_recurse_enable=NO

#关闭兼容旧版本客户端模式以提高安全性

async_abor_enable=NO

#关闭ascii编码传输,可以有效解决文件名乱码问题

ascii_upload_enable=NO

ascii_download_enable=NO

#
# 禁锢用户在家目录    
chroot_local_user=YES
# 允许家目录写入
allow_writeable_chroot=YES
# 指定家目录写入权限白名单位置
chroot_list_file=/etc/vsftpd/chroot_list
#

# 启用用户名单
userlist_enable=YES

# 设置白名单模式
userlist_deny=NO
# 用户名单路径
userlist_file=/etc/vsftpd/user_list
#

#最大登录失败次数

max_login_fails=5

# 最大并发终端数
max_clients=20
# 每IP最大连接数5
max_per_ip=5
# 建立FTP连接的超时时间,单位为秒
accept_timeout=60
# PORT 方式下建立数据连接的超时时间,单位为秒
connect_timeout=60
# 建立FTP数据连接的超时时间,单位为秒
data_connection_timeout=120
# 无操作时,断开连接时间,单位为秒
idle_session_timeout=600

#

# 启用被动响应模式
pasv_enable=YES
# 起始端口号
pasv_min_port=50001
# 结束端口号
pasv_max_port=51000
# 自动解析服务器公网地址

pasv_addr_resolve=YES

创建相关配置文件和目录(属主为root),如文件已存在可以忽略:

mkdir /etc/vsftpd/user_config
chmod 700  /etc/vsftpd/user_config
touch /etc/vsftpd/chroot_list
chmod 600  /etc/vsftpd/chroot_list
touch /etc/vsftpd/user_list
chmod 600 /etc/vsftpd/chroot_list
touch /etc/vsftpd/vuser.pag
chmod 600 /etc/vsftpd/vuser.pag

3.2 虚拟用户配置

FTP用户配置分为三种情况:匿名用户、本地用户、虚拟用户。

建议选择虚拟用户配置,虽然配置相对复杂一些,但是安全性和灵活性方面都是最好的,以下为虚拟用户配置过程。

3.2.1 编辑配置文件

在基础配置中,添加以下内容

#启用本地用户登录

local_enable=YES

#禁用匿名用户登录,提高安全性

anonymous_enable=NO

#

# 启用虚拟用户登录
guest_enable=YES
# 映射到系统用户,系统自动创建ftp用户
guest_username=ftp

# 虚拟用户独立配置目录
user_config_dir=/etc/vsftpd/user_config

# 创建安全隔离环境,不建议修改默认目录
secure_chroot_dir=/usr/share/empty

# 指定PAM认证文件
pam_service_name=vsftpd

3.2.2 创建虚拟用户

gdbm数据库新增和删除用户的基本操作如下:

#进入gdbmtool
gdbmtool          
#打开数据库        
open /etc/vsftpd/vuser.pag
#列出记录
list
#新增用户名和密码
store 【用户名】 【密码】  
#删除已有用户和密码
delete 【用户名】
#退出
quit

添加用户admin/dong1234、upload/123456、download/123456

3.2.3 配置PAM认证

vi /etc/pam.d/vsftpd

注释以下配置:

#auth       required    pam_shells.so
#auth       include     password-auth
#account    include     password-auth
#session    required     pam_loginuid.so
#session    include     password-auth

添加以下配置:

auth       required     pam_userdb.so     db=/etc/vsftpd/vuser
account    required     pam_userdb.so     db=/etc/vsftpd/vuser

3.2.4 创建用户配置文件

touch /etc/vsftpd/user_configs/admin
chmod 600 /etc/vsftpd/user_configs/admin
vi /etc/vsftpd/user_configs/admin
3.2.4.1 上传+下载(admin)

local_root=/home/ftp
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

3.2.4.2 仅上传(upload)

local_root=/home/ftp/upload
download_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

3.2.4.3 仅下载(download)

local_root=/home/ftp/download
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

3.2.5 创建用户家目录

mkdir /home/ftp
mkdir /home/ftp/download
mkdir /home/ftp/upload
chown -R ftp:ftp /home/ftp
chown -R ftp:ftp /home/ftp/download
chown -R ftp:ftp /home/ftp/upload

将所有用户家目录属主调整为ftp:ftp,所有目录均应对ftp用户开放写权限。

 3.2.6 添加白名单用户

将admin、upload用户添加到家目录可写白名单,将所有用户添加到用户白名单。

echo "admin" >> /etc/vsftpd/chroot_list
echo "upload" >> /etc/vsftpd/chroot_list
echo "admin" >> /etc/vsftpd/user_list
echo "upload" >> /etc/vsftpd/user_list
echo "download" >> /etc/vsftpd/user_list

3.3 匿名用户配置

3.3.1 编辑配置文件

#启用匿名用户登录

anonymous_enable=YES

# 允许匿名用户免密登录
no_anon_password=YES
# 指定匿名用户家目录
anon_root=/var/ftp
# 禁止匿名上传
anon_upload_enable=NO
# 禁止创建目录
anon_mkdir_write_enable=NO
# 禁止删除/重命名
anon_other_write_enable=NO

3.3.2 创建匿名用户白名单

echo "anonymous" >> /etc/vsftpd/user_list
echo "ftp" >> /etc/vsftpd/user_list

匿名用户访问FTP时,可以使用anonymous作为用户名,密码可以为空也可以输入任意字符。

3.4 本地用户配置

3.4.1 编辑配置文件

#启用本地用户登录

local_enable=YES

# 启用本地用户家目录文件
user_config_dir=/etc/vsftpd/user_config
# 禁锢用户在家目录    
chroot_local_user=YES
# 允许家目录写入
allow_writeable_chroot=YES
# 指定家目录写入权限白名单位置
chroot_list_file=/etc/vsftpd/chroot_list
# PAM认证配置
pam_service_name=vsftpd

# PAM认证配置
pam_service_name=vsftpd

3.4.2 创建本地用户

创建本地用户组:ftp_local

创建本地用户:dong,指定用户组:ftp_local,指定家目录:/home/dong,禁止shell登录。

groupadd ftp_local
useradd -N -g ftp_local -d /home/dong -s /usr/sbin/nologin dong

3.4.3 创建用户配置文件

touch /etc/vsftpd/user_config/dong
chmod 600 /etc/vsftpd/user_config/dong
vi /etc/vsftpd/user_config/dong

根据需要编辑配置:

# 指定用户家目录

local_root=/home/dong

#允许下载

download_enable=YES

#允许上传

write_enable=YES

#允许删除
delete_enable=YES

#允许重命名

rename_enable=YES

#允许创建目录

mkdir_enable=YES

3.4.4 添加用户白名单

添加本地用户到白名单:

echo "dong" >> /etc/vsftpd/chroot_list
echo "dong" >> /etc/vsftpd/user_list

4 防火墙配置

防火墙开放ftp服务和被动模式端口:

firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=50001-51000/tcp
firewall-cmd --reload

查看SELinux配置:

getsebool -a | grep ftp

根据需要进行配置:

setsebool -P ftpd_use_passive_mode=1

必要时可临时关闭SELinux进行调试。

setenforce 0

5 重启服务

systemctl restart vsftpd
systemctl status vsftpd
#设置开机自启
systemctl enable vsftpd

不足之处,敬请指正。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐