Loading

Linux配置SFTP

需求:配置多个SFTP用户,对应不同的SFTP路径

1. 创建sftp根目录

比如我配置 /data/sftp_datasftp根目录,之后每个用户都对应,该目录下的子目录

mkdir /data/sftp_data

2. 创建组

因为有多个 sftp 用户,所以需要建立一个组为sftp,专门管理 sftp 用户

groupadd sftp

3. 创建用户

3.1 创建用户

useradd -m -d /data/sftp_data/user1 -s /usr/sbin/nologin -g sftp user1
  • -m:自动创建 home 目录

  • -d:指定 home 目录为 /data/sftp_data/user1

  • -s:shell 为 /usr/sbin/nologin 禁止用户使用SSH登录,仅用于 SFTP

  • -g:指定组为 sftp


3.2 配置用户密码

passwd user1

4. 配置SSH

4.1 修改/etc/ssh/sshd_config

vim /etc/ssh/sshd_config

注释Subsystem sftp /usr/lib/openssh/sftp-server

新增Subsystem sftp internal-sftp,表示sftp服务使用系统自带的internal-sftp

文件最后面新增内容:

Match Group sftp  			# 匹配组,多个组用逗号分隔
ChrootDirectory %h			# 指定用户根目录。%h表示用户home目录,%u表示用户名
X11Forwarding no			# 禁止X11转发
AllowTcpForwarding no		# 禁止TCP转发
ForceCommand internal-sftp	# 强制使用系统internal-sftp

也可以Match User 用户名,这样就可以单独为指定用户做配置


4.2 重启SSH

service ssh restart

5. 配置目录权限

在第4步,指定了ChrootDirectory,而ChrootDirectory权限要求有以下两点:

  • ChrootDirectory指定的目录及该目录到系统根目录为止,目录拥有者都只能是root
  • ChrootDirectory指定的目录及该目录到系统根目录为止,群组用户不能有写入权限

因此/data/data/sftp_data/data/sftp_data/user1的拥有者必须为root,且权限为755

因为我的/data目录下有别的数据,所以我分别改权限

chown root:root /data
chown -R root:root /data/sftp_data

chmod 755 /data
chmod -R 755 /data/sftp_data

如果没有按照以上规则配置权限,则用户连接sftp会失败,且有类似以下错误:

user1@127.0.0.1's password:
packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
Connection closed

6. 测试sftp连接

sftp user1@127.0.0.1

7. sftp上传

这个时候用户访问的是配置好的,仅对于该用户的sftp根目录,但这个目录是没有写入权限的

比如user1连接sftp后,用户看到的是/,对应实际机器上的 /data/sftp_data/user1,因此如果用户需要上传文件的话,需要在用户sftp根目录下建立一个所有者为该用户的目录,比如:

mkdir /data/sftp_data/user1/upload
chown user1:sftp /data/sftp_data/user1/upload

此时用户登录sftp后,就可以将文件上传到upload目录下了


8. 配置多个用户

由于/etc/ssh/sshd_config已经配置为Match Group sftp,所以之后新增用户,仅需要将新增用户归属组为sftp即可,而不需要每次都配置/etc/ssh/sshd_config,也不需要每次都重启ssh


posted @ 2022-06-25 15:09  Convict  阅读(3676)  评论(0编辑  收藏  举报