title: sftp部署 #标题tags: sftp #标签
categories: linux大杂烩 # 分类
date: 2020-08-03
查看 openssh 版本
版本必须大于4.8p1,低于这个版本需要升级。
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
创建sftp组及相关用户
$ groupadd sftp # 创建组
# 用户的登录shell一定要设置为 /sbin/nologin,切记!!!
$ useradd -g sftp -s /sbin/nologin test_sftp # 创建用户,-g: 指定用户所属组 -s: 指定用户登录shell
$ 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
连接测试
输入 test_sftp的密码:
登录成功,齐活。
附加: 后续新增用户步骤
# 创建用户并配置密码及家目录
$ 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
至此即可。