温馨提示×

如何配置linux sftp账号

小樊
42
2026-08-27 02:46:50
栏目: 智能运维

在 Linux 上配置 SFTP 账号,常见且安全的做法是 使用系统用户 + OpenSSH 的 SFTP Chroot(内部 SFTP),而不是给账号 SSH Shell 权限。下面按生产环境常用方案一步一步说明。


一、推荐方案:SFTP 专用账号(不能 SSH 登录)

1️⃣ 创建 SFTP 用户

# 创建用户
sudo useradd -m -s /sbin/nologin sftpuser

# 设置密码
sudo passwd sftpuser

-s /sbin/nologin:禁止 SSH 登录
-m:自动创建 home 目录


2️⃣ 创建 SFTP 根目录(Chroot 目录)

⚠️ Chroot 目录必须归 root 所有,且不能被用户写入

sudo mkdir -p /data/sftp/sftpuser
sudo chown root:root /data/sftp/sftpuser
sudo chmod 755 /data/sftp/sftpuser

3️⃣ 创建实际可写目录

sudo mkdir /data/sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /data/sftp/sftpuser/upload
sudo chmod 755 /data/sftp/sftpuser/upload

用户登录后只能操作 upload 目录。


4️⃣ 配置 OpenSSH(关键)

编辑:

sudo vi /etc/ssh/sshd_config

确认以下配置存在(不要重复)

Subsystem sftp internal-sftp

添加 SFTP 用户限制

Match User sftpuser
    ChrootDirectory /data/sftp/sftpuser
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

如果使用多个用户,可用 Match Group sftpusers


5️⃣ 重启 SSH 服务

sudo systemctl restart sshd

二、使用 SFTP 登录测试

本地测试

sftp sftpuser@服务器IP

目录结构

/data/sftp/sftpuser
├── upload   ← 可写

三、使用用户组方式(推荐管理多个账号)

1️⃣ 创建 SFTP 用户组

sudo groupadd sftpusers

2️⃣ 用户加入组

sudo usermod -aG sftpusers sftpuser

3️⃣ sshd_config 改为

Match Group sftpusers
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

目录结构:

/data/sftp/user1
/data/sftp/user2

四、常见问题排查

❌ 登录失败(常见)

bad ownership or modes for chroot directory

✅ 解决:

chown root:root /data/sftp/user
chmod 755 /data/sftp/user

❌ 无法上传文件

✅ 确保:

  • 上传目录不是 Chroot 根目录
  • 属主是用户

五、安全建议(生产必做)

✅ 禁止 SFTP 用户 SSH
✅ 使用非 22 端口
✅ 使用密钥登录(可选)
✅ 配合 fail2ban 防暴力破解
✅ 不同用户隔离目录


六、如果你想更简单(不推荐生产)

  • vsftpd(传统 FTP,不安全)
  • proftpd

如果你愿意,可以告诉我:

  • ✅ 是 单用户还是多用户
  • ✅ 是否需要 只读 / 只写
  • ✅ 是否允许 密钥登录
  • ✅ 使用的 Linux 发行版(CentOS / Ubuntu / Debian)

我可以给你一份 完全可直接执行的一键配置脚本

0