Linux配置sftp

sftp创建用户

Posted by jarvis on Thu, Nov 2, 2023

创建sftp跟目录

假如我们用/data目录来作为数据目录,在此创建/data/sftp_data为sftp的跟目录。

1mkdir /data/sftp_data

创建组

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

1groupadd sftp

创建用户

创建用户

1useradd -g sftpgroup sftpuser
  • -m:自动创建 home 目录
  • -d:指定 home 目录
  • -s:shell为 /usr/sbin/nologin 禁止用户使用SSH登录,仅用于SFTP
  • -g 指定组为 sftpgroup

配置用户密码

1passwd sftpuser

配置SSH

 1#修改/etc/ssh/sshd_config
 2sudo vim /etc/ssh/sshd_config
 3
 4#注释 Subsystem sftp /usr/lib/openssh/sftp-server
 5#新增下面行,表示sftp服务使用系统自带的internal-sftp
 6Subsystem sftp internal-sftp
 7
 8#文件最后新增内容
 9Match Group sftpgroup  			# 匹配组,多个组用逗号分隔,也可以match User 用户名,为指定用户做配置
10ChrootDirectory /data/sftp_data			# 指定用户根目录。%h表示用户home目录,%u表示用户名
11X11Forwarding no			# 禁止X11转发
12AllowTcpForwarding no		# 禁止TCP转发
13ForceCommand internal-sftp	# 强制使用系统internal-sftp

重启SSH

1service sshd restart
2#系统不一样重启命令不同,也有systemctl restart sshd

配置目录权限

因为我们指定了ChrootDirectory,而ChrootDirectory权限要有一下两个要求:

  • ChrootDirectory指定的目录及该目录到系统根目录为止,目录拥有者都只能是root
  • ChrootDirectory指定的目录及该目录到系统根目录为止,群组用户不能有写入权限
1chown root:root /data
2chown -R root:root /data/sftp_data
3
4chmod 755 /data
5chmod -R 755 /data/sftp_data

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

1sftpuser@127.0.0.1's password:
2packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
3Connection closed

SFTP上传

上传文件需要再sftp的跟目录建立一个所有者为该用户的目录,比如:

1mkdir /data/sftp_data/upload
2chown sftpuser:sftpgroup /data/sftp_data/upload

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