Debian SFTP虚拟用户如何设置
导读:Debian SFTP虚拟用户设置指南 一 方案选择 使用 OpenSSH 内置 SFTP(internal-sftp)+ PAM + 系统用户映射:不依赖 FTP 服务,安全性高,配置简单,适合大多数场景。 使用 vsftpd 的虚拟用...
Debian SFTP虚拟用户设置指南
一 方案选择
- 使用 OpenSSH 内置 SFTP(internal-sftp)+ PAM + 系统用户映射:不依赖 FTP 服务,安全性高,配置简单,适合大多数场景。
- 使用 vsftpd 的虚拟用户:通过 PAM 的 pam_userdb 使用数据库文件或外部数据库进行认证,适合已有 vsftpd 体系或需要 FTP/SFTP 统一管理的场景。
二 方案一 OpenSSH internal-sftp 与 PAM 映射(推荐)
- 安装与备份
- 安装软件包:sudo apt update & & sudo apt install -y openssh-server libpam-pwquality
- 备份配置:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- 创建系统用户与目录(每个虚拟用户对应一个系统账号)
- 示例:sudo adduser --system --group --home /srv/sftp/virtual1 --shell /usr/sbin/nologin vuser1
- 创建可写目录:sudo mkdir -p /srv/sftp/virtual1/upload & & sudo chown vuser1:sftpusers /srv/sftp/virtual1/upload & & sudo chmod 755 /srv/sftp/virtual1/upload
- 配置 SSH
- 启用 internal-sftp 并限制 SFTP 仅可用:
- Subsystem sftp internal-sftp
- Match Group sftpusers
- ChrootDirectory /srv/sftp/%u
- ForceCommand internal-sftp
- AllowTcpForwarding no
- X11Forwarding no
- 说明:Chroot 目录及其上级目录必须归 root 所有,否则会话会失败。
- 启用 internal-sftp 并限制 SFTP 仅可用:
- 配置 PAM 与密码
- 启用 PAM:在 /etc/ssh/sshd_config 确保 UsePAM yes
- 设置密码策略(可选):/etc/security/pwquality.conf 中设置 minlen、dcredit、ucredit 等
- 设置用户密码:echo “vuser1:YourStrongPass” | sudo chpasswd
- 权限与所有权
- 锁定根目录:sudo chown root:sftpusers /srv/sftp/virtual1 & & sudo chmod 755 /srv/sftp/virtual1
- 可写目录:sudo chown vuser1:sftpusers /srv/sftp/virtual1/upload & & sudo chmod 755 /srv/sftp/virtual1/upload
- 重启与测试
- 重启服务:sudo systemctl restart ssh
- 连接测试:sftp vuser1@your_server_ip
- 可选 公钥登录
- 在 /srv/sftp/virtual1/.ssh/authorized_keys 放置公钥,权限:.ssh 700,authorized_keys 600
- 确保目录属主为 vuser1,且父目录 /srv/sftp/virtual1 为 root 所有以满足 chroot 要求
三 方案二 vsftpd 虚拟用户(PAM + Berkeley DB)
- 安装与准备
- 安装:sudo apt update & & sudo apt install -y vsftpd libpam-pwquality db-util
- 创建用户与目录:sudo groupadd vsftpd;sudo useradd -g vsftpd -d /var/run/vsftpd -s /usr/sbin/nologin vsftpd
- 创建虚拟用户数据库
- 编辑 /etc/vsftpd/virtual_users.txt(两行一组:用户名、密码)
- user1
- Passw0rd!
- user2
- Str0ngPass!
- 生成数据库:sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
- 权限:sudo chmod 600 /etc/vsftpd/virtual_users.*
- 编辑 /etc/vsftpd/virtual_users.txt(两行一组:用户名、密码)
- 配置 PAM
- /etc/pam.d/vsftpd 中启用:
- auth required pam_userdb.so db=/etc/vsftpd/virtual_users
- account required pam_userdb.so db=/etc/vsftpd/virtual_users
- /etc/pam.d/vsftpd 中启用:
- 配置 vsftpd
- /etc/vsftpd.conf 关键项:
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- chroot_local_user=YES
- allow_writeable_chroot=YES
- pam_service_name=vsftpd
- user_sub_token=$USER
- local_root=/srv/ftp/$USER
- pasv_enable=YES
- pasv_min_port=10090
- pasv_max_port=10100
- /etc/vsftpd.conf 关键项:
- 创建用户目录与权限
- 示例:sudo mkdir -p /srv/ftp/user1 /srv/ftp/user2
- 目录属主:sudo chown vsftpd:vsftpd /srv/ftp/user1 /srv/ftp/user2
- 防火墙与端口
- 放行 21/TCP(控制)与 10090–10100/TCP(被动模式数据)
- 重启服务:sudo systemctl restart vsftpd
- 测试
- 使用 FTP 客户端连接(SFTP 不适用 vsftpd):ftp your_server_ip
四 常见问题与排查
- chroot 失败:Chroot 目录及其上级目录必须归 root,且不可对登录用户可写;如需上传,请在 chroot 内创建可写子目录并调整属主。
- 登录被拒绝:检查 /var/log/auth.log(SSH)或 /var/log/vsftpd.log(vsftpd),确认 PAM 模块、用户映射与目录权限是否正确。
- SELinux/AppArmor:若启用,需为 SFTP/Chroot 设置相应策略放行。
- 被动模式问题:vsftpd 需开放被动端口范围,并在防火墙/NAT 中做端口映射。
- 密钥登录失败:确认 .ssh 目录与 authorized_keys 权限与属主正确,且父目录为 root 所有以满足 chroot。
五 安全建议
- 禁用 root 登录与密码登录(如可行),优先使用 SSH 密钥;为 SFTP 用户设置强密码策略。
- 仅开放必要端口,限制 SFTP 用户的权限(禁用 TCP 转发 与 X11 转发),并定期更新系统与软件包。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian SFTP虚拟用户如何设置
本文地址: https://pptw.com/jishu/758709.html
