sftp 服务常用配置说明
sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH 的一部分,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多,如果您对网络安全性要求更高时,可以使用 SFTP 代替 FTP。默认ssh启用了sftp,只要可登陆系统的用户(/bin/bash)就可登陆,登陆后目录无限制,可任意切换其他目录。为了安全起见,可以配置sshd以限制sftp登录用户的权限。最好将登陆后用户限制在指定目录,无法切换到外部目录
基本配置
ChrootDirectory
配置前提:ChrootDirectory
设置的目录权限及其所有的上级文件夹权限,属主和属组必须是 root;ChrootDirectory
设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是 755。
如果权限配置不对,会导致无法登录
如果上级目录无法设置为root权限,可以通过ln
链接的方式实现
限制后的用户无法ssh
登录系统
创建相关用户和组
groupadd sftp |
修改 sshd_config
配置
Subsystem sftp /usr/libexec/openssh/sftp-server |
修改配置后,重启
sshd
服务生效systemctl restart sshd
常见错误
Unable to open .: permission denied
解决方法: 如果启动了 selinux
, 关闭 selinux
Couldn’t read packet: Connection reset by peer
问题原因: ChrootDirectory (/data/sftp/sftpuser1)
目录及所有上级目录的用户和组必须为 root
,权限最多为 755, 参考说明
remote readdir(“/“): Permission denied
问题原因: sftp 用户对 ChrootDirectory (/data/sftp/sftpuser1)
目录要有读取权限,参考说明
禁用 sftp 功能
修改 sshd
配置文件 /etc/ssh/sshd_config
,注释以下内容
Subsystem sftp /usr/libexec/openssh/sftp-server |
修改配置文件后重启 sshd
服务
systemctl restart sshd |
使用sftp
登录时会报错 : Error: Could not connect to server