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的方法。