说明:简明扼要的记录在Linux环境上配置SFTP的注意事项,主要是自己在该问题的小细节上犯过几次同样的错误,我必须要动手把它记录、写下来,自己还要时不时的翻看一下,避免在同样的问题上连续跌倒(*^__^*)
一 配置步骤
1.创建SFTP用户组
groupadd sftp
2.添加用户并设置为sftp组
useradd -g sftp -s /sbin/nologin -M sftpUser
其中:(/sbin/nologin为禁止登录shell的用户,即该用户sftpUser无法获取shell,也就限制其登录主机)
3.设置用户密码
passwd sftpUser
4.创建用户目录,并设置权限
cd /home
mkdir sftpUserDir
chown root:sftp sftpUserDir
chmod 755 sftpUserDir
这里:设置sftp用户sftpUser将来通过SFTP来上传、下载的目录为/home/sftpUserDir。同时,设置该目录目录/home/sftpUserDir的所属用户和组为root:sftp,且其权限务必为755,否则SFTP会报错!
5.修改SSH配置
修改/etc/ssh/sshd_config配置文件
修改Subsystem为:
Subsystem sftp internal-sftp
6.在sshd_config添加用户配置
Match User sftpUser #配置允许SFTP操作的用户名为sftpUser
Match Group sftp #配置允许SFTP操作的用户组为sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /home/sftpUserDir #配置用户的根目录
说明:Match User sftpUser和Match Group sftp的配置,可以有选择性的配置,也可以组合配置。中间3行为允许SFTP转发的配置。
7.最后重启SSH
/etc/init.d/ssh restart
二 验证测试
在其它的机器上执行:
sftp sftpUser@SFTP_server_IP
三 小结
1 ChrootDirectory 的所有父目录的权限最高只能是755 ,否则会抛出下述错误!
Read from remote host 172.16.xx.xxx: Connection reset by peer
Couldn’t read packet: Connection reset by peer
2 SFTP Permission denied处理
com.jcraft.jsch.SftpException: Permission denied
问题的原因是,SFTP服务器的SELINUX没关闭。
解决办法:
查看SELINUX的配置:getenforce
关闭SELINUX:setenforce 0
勿以善小而不为,不要以为不起眼的小问题就不够引起你对它的重视。
评论 (2)
qqss84| 2018年1月18日
很好的文章!
但这里我也有一个问题,如果最高设置为755 的话,也设置了’chroot jail’,但是用户不能在chroot directory 下创建/上传 文件夹
ex: drwxr-xr-x /home/user (/home/user 为chroot directory),如果用客户端连接,无法在/home/user 下创建新的文件夹,不知道有没有什么解决办法。
admin| 2018年2月1日
@qqss84 如果/home/user 为chroot directory ,那么/home/user的权限要配置为owner为root,group为你的SFTP用户所属的用户组。