linux vsftpd配置用户

在 Linux 中配置 vsftpd(Very Secure FTP Daemon)用户,核心是 创建系统用户 / 虚拟用户、限制访问目录、设置权限,以下是详细步骤(适用于 CentOS/RHEL、Ubuntu/Debian 系统):

一、前提:安装并启动 vsftpd

若未安装 vsftpd,先执行安装命令:
# CentOS/RHEL
yum install vsftpd -y
systemctl start vsftpd
systemctl enable vsftpd

# Ubuntu/Debian
apt install vsftpd -y
systemctl start vsftpd
systemctl enable vsftpd

 

二、核心配置:vsftpd 主配置文件

vsftpd 主配置文件为 /etc/vsftpd/vsftpd.conf(CentOS/RHEL)或 /etc/vsftpd.conf(Ubuntu/Debian),先备份默认配置:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak  # CentOS/RHEL
# 或
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak  # Ubuntu/Debian

关键配置项(编辑配置文件 vim /etc/vsftpd/vsftpd.conf

# 1. 允许本地用户登录(系统用户)
local_enable=YES

# 2. 允许本地用户上传文件
write_enable=YES

# 3. 本地用户上传文件的权限掩码(默认 022,文件权限 644,目录 755)
local_umask=022

# 4. 限制用户只能访问自己的家目录(核心!防止越权访问系统目录)
chroot_local_user=YES  # 所有本地用户默认被限制在自家目录
chroot_list_enable=YES  # 启用“例外列表”(列表内用户不受限制)
chroot_list_file=/etc/vsftpd/chroot_list  # 例外列表文件路径

# 5. 被动模式配置(解决客户端连接失败问题)
pasv_enable=YES
pasv_min_port=40000  # 被动模式最小端口
pasv_max_port=40010  # 被动模式最大端口
pasv_address=你的服务器IP  # (可选)公网服务器需指定公网IP

# 6. 禁止匿名登录(增强安全性)
anonymous_enable=NO

# 7. 日志配置(便于排查问题)
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

保存配置后,重启 vsftpd 生效:

systemctl restart vsftpd

 

三、配置用户(两种方式:系统用户 / 虚拟用户)

 方式 1:创建系统用户(推荐,简单易用)
vsftpd 默认支持使用 Linux 系统用户登录,适合少量用户场景。
 

步骤 1:创建系统用户(指定家目录,禁止 SSH 登录) 

# 创建用户 ftpuser,家目录为 /home/ftpuser(FTP 访问目录)
useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
# 说明:
# -m:自动创建家目录
# -d:指定家目录路径
# -s /sbin/nologin:禁止该用户通过 SSH 登录(仅允许 FTP 访问,增强安全)

步骤 2:设置用户密码 

passwd ftpuser  # 输入密码(如 123456,生产环境用强密码)

步骤 3:授权家目录权限(关键!避免 chroot 失败)

 当 chroot_local_user=YES 时,vsftpd 要求用户家目录 不能有写权限(否则会报错 “500 OOPS: chroot”),需修改权限: 
# 1. 移除家目录的写权限(仅保留读/执行)
chmod 755 /home/ftpuser

# 2. 若需让用户上传文件,创建子目录并授权写权限
mkdir /home/ftpuser/upload
chown ftpuser:ftpuser /home/ftpuser/upload  # 归属用户
chmod 775 /home/ftpuser/upload  # 允许用户写入

步骤 4:测试登录

# 本地测试
ftp 127.0.0.1
# 输入用户名 ftpuser + 密码,登录成功后尝试上传/下载文件
 

方式 2:创建虚拟用户(更安全,适合多用户场景)

 
虚拟用户与系统用户隔离,仅用于 FTP 访问,安全性更高。

步骤 1:创建虚拟用户密码文件

# 1. 创建临时密码文件(格式:用户名 密码,一行一个用户)
vim /etc/vsftpd/vuser_passwd.txt
# 内容示例:
ftpuser1
123456abc
ftpuser2
7890def

# 2. 生成 vsftpd 识别的加密密码文件(需安装 db_load 工具)
# CentOS/RHEL:yum install db4-utils -y
# Ubuntu/Debian:apt install db-util -y
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

# 3. 设置文件权限(仅 root 可读,防止密码泄露)
chmod 600 /etc/vsftpd/vuser_passwd.*

步骤 2:创建 PAM 认证配置文件

vsftpd 通过 PAM 验证虚拟用户,创建 PAM 配置:
vi /etc/pam.d/vsftpd.vu

添加以下内容(根据系统选择对应库文件):

 
# CentOS/RHEL(64位系统)
auth    required    /lib64/security/pam_userdb.so    db=/etc/vsftpd/vuser_passwd
account required    /lib64/security/pam_userdb.so    db=/etc/vsftpd/vuser_passwd

# Ubuntu/Debian(64位系统)
auth    required    /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/vuser_passwd
account required    /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/vuser_passwd

步骤 3:修改 vsftpd 配置,启用虚拟用户

编辑 /etc/vsftpd/vsftpd.conf,添加 / 修改以下配置:
# 禁用匿名登录
anonymous_enable=NO

# 启用虚拟用户
guest_enable=YES
guest_username=ftp  # 虚拟用户映射到系统用户 ftp(默认存在,无需创建)

# 指定 PAM 认证文件
pam_service_name=vsftpd.vu

# 虚拟用户配置文件目录(不同用户可单独设置权限)
user_config_dir=/etc/vsftpd/vuser_conf

# 其他基础配置(同方式1)
write_enable=YES
local_umask=022
chroot_local_user=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40010

步骤 4:为虚拟用户创建独立配置(可选)

若需为不同虚拟用户设置不同权限(如部分用户只读、部分可写),创建配置目录:
# 1. 创建虚拟用户配置目录
mkdir /etc/vsftpd/vuser_conf

# 2. 为 ftpuser1 创建配置文件(允许上传/下载)
vim /etc/vsftpd/vuser_conf/ftpuser1
# 内容:
local_root=/home/ftp/ftpuser1  # ftpuser1 的 FTP 根目录
write_enable=YES  # 允许上传

# 3. 为 ftpuser2 创建配置文件(只读)
vim /etc/vsftpd/vuser_conf/ftpuser2
# 内容:
local_root=/home/ftp/ftpuser2
write_enable=NO  # 禁止上传

步骤 5:创建虚拟用户的 FTP 目录并授权

# 创建根目录(归属系统用户 ftp)
mkdir -p /home/ftp/{ftpuser1,ftpuser2}
chown -R ftp:ftp /home/ftp/
chmod -R 755 /home/ftp/

# 为可写用户创建上传目录
mkdir /home/ftp/ftpuser1/upload
chown ftp:ftp /home/ftp/ftpuser1/upload
chmod 775 /home/ftp/ftpuser1/upload

步骤 6:重启 vsftpd 并测试

systemctl restart vsftpd
# 测试登录:ftp 服务器IP,输入虚拟用户名(ftpuser1)和密码(123456abc)

 

四、常见问题排查

1、登录报错 “500 OOPS: chroot”:用户家目录有写权限,执行 chmod 755 /home/用户名 移除写权限。

2、无法上传文件:检查 write_enable=YES,且上传目录权限为 775 且归属该用户。

3、被动模式连接失败:防火墙开放 21 端口和被动模式端口段(40000-40010),命令:

# CentOS/RHEL
firewall-cmd --add-port=21/tcp --permanent
firewall-cmd --add-port=40000-40010/tcp --permanent
firewall-cmd --reload

# Ubuntu/Debian
ufw allow 21/tcp
ufw allow 40000:40010/tcp
ufw reload

4、虚拟用户登录失败:检查 PAM 配置文件的库文件路径是否正确(可通过 find / -name pam_userdb.so 查找路径)。

五、安全优化(可选)

  1. 禁用无用用户登录:在 chroot_list_file=/etc/vsftpd/chroot_list 中添加不限制的用户(如 root,不推荐),其余用户默认被限制。
  2. 限制密码复杂度:使用 passwd -l 用户名 锁定用户,passwd -u 用户名 解锁。
  3. 定期清理日志:echo "" > /var/log/vsftpd.log 清空日志(或配置日志轮转)。
通过以上步骤,即可完成 vsftpd 的用户配置,根据实际需求选择「系统用户」或「虚拟用户」方案~

 

 

posted @ 2025-12-03 16:18  程序猿网友666  阅读(131)  评论(0)    收藏  举报