(1)创建组和用户

$ groupadd sftp
$ useradd -g sftp -s /bin/false aswsftp
$ passwd aswsftp
$ mkdir -p /data/sftp/aswsftp -pv
$ usermod -d /data/sftp/aswsftp aswsftp

(2)配置 ssh

$ vim /etc/ssh/sshd_config
# 修改 ssh 端口为 8022
Port 8022
# 这一行注释掉,默认是没有注释的
# Subsystem      sftp    /usr/libexec/openssh/sftp-server

# 添加以下内容到末尾
# 定义了一个子系统,名称为 sftp,它使用 internal-sftp 模式。这意味着当用户通过 SFTP 连接到服务器时,将使用 OpenSSH 自带的一个简化版本的 SFTP 服务程序。
Subsystem       sftp    internal-sftp
# 指定了接下来的配置项只对属于 sftp 组的用户生效
Match Group sftp
# 当 SFTP 用户登录后,他们的工作目录会被限制到 /data/sftp/ 目录加上用户的主目录(%u 是一个占位符,代表用户名)
ChrootDirectory /data/sftp/%u
# 强制所有匹配该规则的用户在登录时执行 internal-sftp 命令。即使用户尝试执行其他命令,也会被忽略,而只会启动 SFTP 会话。
ForceCommand    internal-sftp
# 这两行配置禁止了 TCP 端口转发和 X11 转发功能。TCP 端口转发允许用户通过 SSH 隧道来转发本地端口到远程主机的服务;X11 转发则允许远程显示图形界面的应用程序。关闭这些功能有助于提高安全性,防止滥用。
AllowTcpForwarding no
X11Forwarding no

(3)创建用户使用的目录

// 修改用户家目录权限

$ chown root:sftp /data/sftp/aswsftp
$ chmod 755 /data/sftp/aswsftp

// 创建上传目录

$ mkdir /data/sftp/aswsftp/upload
$ chown aswsftp:sftp /data/sftp/aswsftp/upload
$ chmod 755 /data/sftp/aswsftp/upload

(4)重启 sshd 服务

systemctl restart sshd.service

(5)测试

$ sftp -P 8022 aswsftp@172.31.149.1
sftp> ls
upload
sftp> cd upload/
sftp> mkdir test
sftp> rmdir test
sftp> quit

(6)注意

使用阿里云 ECS:

  • sshd_config 配置中,开启用户名密码登录
  • ECS 安全组中放行 8022 端口
  • 有可能您需要公网IP
作者:jackzang  创建时间:2024-10-31 10:30
最后编辑:jackzang  更新时间:2024-10-31 11:08