Debian SFTP虚拟用户管理指南
首先确保系统安装了openssh-server(提供SFTP服务)和libpam-pwquality(增强密码安全性,可选但推荐):
sudo apt update
sudo apt install openssh-server libpam-pwquality
虚拟用户需通过专用数据库认证,步骤如下:
用户名:密码,每行一个用户):sudo mkdir -p /etc/vsftpd
sudo nano /etc/vsftpd/virtual_users.txt
# 示例内容(替换为实际用户名和密码):
user1:password1
user2:password2
db_load工具会自动加密密码):sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
sudo chmod 600 /etc/vsftpd/virtual_users.db
编辑PAM配置文件,让系统使用虚拟用户数据库进行认证:
sudo nano /etc/pam.d/vsftpd
添加以下两行(替换virtual_users为你的数据库文件名,无需.db后缀):
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
编辑SSH配置文件,将虚拟用户限制在各自的Chroot目录中:
sudo nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match块,针对sftpusers组的用户进行限制:Match Group sftpusers
ChrootDirectory %h # 限制用户只能访问其主目录
ForceCommand internal-sftp # 强制使用SFTP协议
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
sudo groupadd sftpusers
-m创建家目录,-s /sbin/nologin禁止shell登录,-G sftpusers加入用户组):sudo useradd -m -s /sbin/nologin -G sftpusers user1
sudo useradd -m -s /sbin/nologin -G sftpusers user2
sudo passwd user1
sudo passwd user2
Chroot目录的所有权必须为root,且用户无法写入,避免安全风险:
# 创建用户家目录
sudo mkdir -p /home/user1
# 设置所有权(root:root)
sudo chown root:root /home/user1
# 设置权限(755,允许用户进入但无法修改)
sudo chmod 755 /home/user1
# (可选)创建用户可写入的子目录(如uploads)
sudo mkdir -p /home/user1/uploads
sudo chown user1:sftpusers /home/user1/uploads # 所有权为用户及其组
sudo chmod 755 /home/user1/uploads # 权限设置
完成所有配置后,重启SSH服务使更改生效:
sudo systemctl restart sshd
使用SFTP客户端(如命令行工具或FileZilla)测试虚拟用户是否能正常登录:
sftp user1@your_server_ip
输入虚拟用户的密码,若成功登录并进入/home/user1目录,则配置正确。
若需使用密钥认证(替代密码),步骤如下:
ssh-keygen -t rsa -b 4096
~/.ssh/authorized_keys文件中:sudo mkdir -p /home/user1/.ssh
sudo touch /home/user1/.ssh/authorized_keys
sudo chmod 700 /home/user1/.ssh
sudo chmod 600 /home/user1/.ssh/authorized_keys
sudo nano /home/user1/.ssh/authorized_keys # 粘贴公钥内容
/etc/ssh/sshd_config):PubkeyAuthentication yes
sudo systemctl restart sshd
root:root且权限为755,否则用户无法登录。/var/log/auth.log文件获取详细错误信息。ufw:sudo ufw allow ssh
sudo ufw enable