linux配置SFTP

创建sftp用户 && 设置密码

sudo adduser sftpuser
passwd sftpuser

禁止用户SSH登录

usermod -s /bin/false sftpuser

修改用户登入目录

usermod -d /sftp sftpuser

设置sshd_config

设置后禁止用户跳出登入目录,访问其他目录

vi /etc/ssh/sshd_config

注释 Subsystem sftp 这一行,修改成:

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser
ForceCommand internal-sftp
ChrootDirectory /sftp

#多个用户请重复配置这三行:
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /sftp1

重新启动sshd服务

#测试sshd服务器配置是否有错误
sudo sshd -t
#重新启动sshd服务器
sudo systemctl restart sshd

其他问题

client_loop: send disconnect: Broken pipe

用户的登入目录开始一直往上到系统根目录为止的目录拥有者都只能是root
解决办法:

#设置正确的登入目录权限
sudo chown root:root /sftp
sudo chmod 755 /sftp
#正确的登入目录权限导致我们sftp没有在该目录下传输文件的操作权限
#创建子目录 设置子目录权限,在子目录中进行传输文件的操作
sudo mkdir /sftp/test
sudo chown sftpuser:sftp /sftp/test