需求
新建一个新的用户,并且为了保证系统的安全性,指定该用户在指定的目录内进行访问
- 新建用户组
1 | groupadd sftpusers |
- 新建用户并将用户添加到分组中
1)使用root权限建立新用户的主目录,注意这里必须是root权限,否则后续的sftp不能连接
1 | adduser sftpuser1 -d /sftp/sftpuser1 --shell /bin/false -g sftpusers |
如果上面已经用root建立了一个主目录。所以会有一个warning,不用管他。
2)设置密码
1 | passwd sftpuser1 |
3)查看group情况
1 | groups sftpuser1 |
- 修改sshd_config,使用 chroot 监狱限制 SSH 用户访问指定目录
1 | vim /etc/ssh/sshd_config |
1)
注释
1 | Subsystem sftp /usr/libexec/openssh/sftp-server |
新加
1 | Subsystem sftp internal-sftp |
2)
在文件的最后加入:
1 2 3 4 5 | Match User sftpuser1 #也可设置为用户组 Match group sftpusers ChrootDirectory /sftp/sftpuser1 X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp |
这一段的意思是对visitors分组里的所有用户,我们只给他们通过sftp访问/home/fangke的权限,不能直接通过ssh登录服务器
3)重启sshd
1 2 3 | # service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ] |
或
1 | systemctl restart sshd |
- 目录和权限设置
1)/sftp/sftpuser1
ChrootDirectory设置的目录/sftp/sftpuser1的所有者必须是root,并且该目录的上级目录/sftp的所有者也必须是root.
而且只有所有者拥有写权限,/sftp/sftpuser1和/sftp的权限最大设置只能是755.
1 2 | chown root:root /sftp/sftpuser1 chmod -R 755 /sftp |
2)/sftp/sftpuser1/download
由于上一层目录的权限是755,
因此所有非root用户都无法在目录中写入文件.
我们需要在ChrootDirectory指定的目录下建立子目录比如download,重新设置属主和权限.
1 2 3 | mkdir /sftp/sftpuser1/download chown sftpuser1:sftpusers /sftp/sftpuser1/download chmod 755 /sftp/sftpuser1/download |
这样就可以在读写download目录了.
- 测试
sftp -oPort=22 [email protected]
输入密码
1 2 3 4 5 6 | # sftp -oPort=22 [email protected] Connecting to 127.0.0.1... [email protected]'s password: sftp> ls download sftp> |

6. 问题和经验教训
按照网上的教程设置后,出现过几种情况
1)Write failed: Broken pipe
错误: Received unexpected end-of-file from SFTP server
错误: 无法连接到服务器
解决:
这个问题是由于ChrootDirectory指定的目录的权限问题。
注意归属和权限
drwxr-xr-x 3 root root 4096 Jun 17 16:12 sftp
drwxr-xr-x 3 root root 4096 Jun 17 15:21 sftpuser1
drwxr-xr-x 2 sftpuser1 sftpusers 4096 Jun 17 15:24 download
我最后的解决方案是: 单独建/sftp/sftpuser1 文件夹, 不要放在/home底下。
————————————————
参考资料:
Centos新建用户并且限制用户的访问权限在某个指定目录中
https://blog.csdn.net/xuelangqingkong/article/details/103327925
centos6.6 创建sftp用户 只允许访问指定目录_mshaiting的博客-CSDN博客 https://blog.csdn.net/mshaiting/article/details/80269091
linux新建用户指定目录权限 - 的回答 - SegmentFault 思否 https://segmentfault.com/q/1010000004142147/a-1020000004143211