Secure File Transfer Protocol(SFTP)是一种使用SSH(Secure Shell)通过加密通信通道安全收发文件的协议。

介绍在Rocky Linux9.3上设置SFTP的方法。

  • 创建SFTP专用用户,该用户只能使用SFTP连接,不允许SSH连接。
  • SFTP用户只能访问指定的目录。

SFTP的设置内容如下。

项目 内容
用户名 sftpuser
组名 sftponly
主目录 /sftp/interface

创建SFTP用户

创建SFTP用户 sftpuser 并设定密码,也可以使用秘钥认证的方式。

# useradd sftpuser
# passwd sftpuser
Changing password for user sftpuser.
New password:PaSsW0rD!
Retype new password:PaSsW0rD!
passwd: all authentication tokens updated successfully.

创建SFTP用户的目录 /sftp/interface ,在配置文件里使用 ChrootDirectory 将 /sftp/interface 目录配置为SFTP用户的主目录。

# mkdir -p /sftp/interface
# chown root:root /sftp/interface
# chmod 755 /sftp/interface

确认sftpuser当前的组。

# id sftpuser
uid=1001(sftpuser) gid=1001(sftpuser) groups=1001(sftpuser)

创建SFTP用户的组sftponly。

# groupadd sftponly

将sftpuser添加至sftponly组。

# usermod -G sftponly sftpuser

再次确认sftpuser所属的组。

# id sftpuser
uid=1001(sftpuser) gid=1001(sftpuser) groups=1001(sftpuser),1002(sftponly)

设置SFTP

在 /etc/ssh/sshd_config 文件上添加下面的行。

Match group sftponly
ForceCommand internal-sftp -f LOCAL3 -l VERBOSE -d interce
ChrootDirectory /sftp/interface/
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
AuthenticationMethods password publickey
参数 内容
Match 指定匹配条件,当组为sftponly时。也可使用user指定用户。
ForceCommand internal-sftp是指定内置在sshd中的sftp,
ChrootDirectory 对于ChrootDirectory指定的目录,sshd会检查上层目录所有者是否为root,以及是否只有 root才有写入权限。
X11Forwarding 禁止X11的Forwarding。
AllowTcpForwarding 禁止TcpForwarding。
PasswordAuthentication 允许使用密码的认证,既可用密码登录。
AuthenticationMethods 认证方式有密码和秘钥。

sshd内置sftp的选项说明查看OpenBSD manual page server

修改配置文件之后,执行如下命令使配置生效。

# systemctl reload sshd

测试SFTP连接

在 /sftp/interface 目录下创建 test 目录,并修改该目录的用户和组。

# mkdir -p /sftp/interface/test
# chown sftpuser:sftponly /sftp/interface/test

使用sftpuser用户连接至服务器,确认test目录是否存在。

# sftp sftpuser@localhost
sftpuser@localhost's password:
Connected to localhost.
sftp> ls
test
sftp> exit

在这里介绍了在Rocky Linux上设置SFPT的方法。