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 查找路径)。
五、安全优化(可选)
- 禁用无用用户登录:在
chroot_list_file=/etc/vsftpd/chroot_list中添加不限制的用户(如 root,不推荐),其余用户默认被限制。 - 限制密码复杂度:使用
passwd -l 用户名锁定用户,passwd -u 用户名解锁。 - 定期清理日志:
echo "" > /var/log/vsftpd.log清空日志(或配置日志轮转)。
通过以上步骤,即可完成 vsftpd 的用户配置,根据实际需求选择「系统用户」或「虚拟用户」方案~
本文来自博客园,作者:程序猿网友666,转载请注明原文链接:https://www.cnblogs.com/chenghu/p/19302812

浙公网安备 33010602011771号