title: sftp部署 #标题tags: sftp #标签
categories: linux大杂烩 # 分类
date: 2020-08-03

记录下sftp配置过程。

查看 openssh 版本

版本必须大于4.8p1,低于这个版本需要升级。

  1. $ ssh -V
  2. OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

创建sftp组及相关用户

  1. $ groupadd sftp # 创建组
  2. # 用户的登录shell一定要设置为 /sbin/nologin,切记!!!
  3. $ useradd -g sftp -s /sbin/nologin test_sftp # 创建用户,-g: 指定用户所属组 -s: 指定用户登录shell
  4. $ echo 123.com | passwd --stdin test_sftp # 设置密码

设置test_sftp用户家目录

$ mkdir -p /data/sftp/test_sftp
$ usermod -d /data/sftp/test_sftp test_sftp

修改sshd_config文件

$ vim /etc/ssh/sshd_config

# 找到下面这行
Subsystem       sftp    /usr/libexec/openssh/sftp-server

# 改为如下:
#Subsystem      sftp    /usr/libexec/openssh/sftp-server   # 将原有内容注释掉
Subsystem       sftp    internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand    internal-sftp
AllowTcpForwarding no
X11Forwarding no

上述部分配置解释如下:

  • Match Group sftp : 限定只有sftp组的才能访问
  • ChrootDirectory /data/sftp/%u : 设定属于用户组sftp的用户访问的根文件夹,%u 表示每个用户登录后的根目录为 /data/sftp目录下,和用户名一致的目录下。
  • ForceCommand internal-sftp : 强制执行这里指定的命令而忽略客户端提供的任何命令。
  • AllowTcpForwarding no: 是否允许TCP转发,默认值为”yes”,修改为no,增加安全性

设置chroot目录权限

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

建立sftp用户登录后可写入的目录

照上面设置后,在重启sshd服务后,用户test_sftp已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供test_sftp上传文件。这个目录所有者为test_sftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:

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

重启sshd服务

$ systemctl restart sshd

连接测试

sftp部署 - 图1

输入 test_sftp的密码:

sftp部署 - 图2

登录成功,齐活。

附加: 后续新增用户步骤

# 创建用户并配置密码及家目录
$ mkdir /data/sftp/lisi
$ chown root.sftp /data/sftp/lisi
$ useradd -g sftp -s /sbin/nologin -d /data/sftp/lisi lisi
$ echo 123.abc | passwd --stdin lisi

# 配置可写入目录
$ mkdir /data/sftp/lisi/upload
$ chown lisi.sftp /data/sftp/lisi/upload/
$ chmod 755 /data/sftp/lisi/upload

至此即可。