一般托管在我服务器上的网站我都不提供任何管理方式,因为这样比较安全,同时也一直懒得去研究怎么把sftp限制在家目录里,而且不想搭ftp……
所以说该来的总是要来的,因为各种各样的原因,今天就设法来搞定这个问题。
事实再一次证明,网上的教程一般都是坑爹的,可能不久以后有别人按我这篇东西操作以后也会这么想……
言归正传,我首先尝试了rssh,叉这东西各种不靠谱,反正我配置完了能连却不给看目录
接下来在各种Google时发现CentOS6以后自带的OpenSSH版本就已经支持Chroot了(版本4.8以上),然后开始研究自带的。
我所使用的系统为CentOS 6.2
下面开始配置Chroot
1.检查OpenSSH版本
ssh -v
高于4.8就行了,老版本系统OpenSSH版本过低的话就先升级下,升级方法自己Google
2.创建用户
useradd woodragon
3.配置sshd_config
vim /etc/ssh/sshd_config
找到下面这行在前面加个#将其注释掉
Subsystem sftp /usr/libexec/openssh/sftp-server
在最后添加如下内容
Subsystem sftp internal-sftp
Match User woodragon
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
注:
Match User woodragon
最后面的就是希望匹配的用户名,多个用户名用逗号分隔,将User换成Group来匹配用户组,同样逗号分隔
ChrootDirectory
后面的路径,%u代表用户名,如果整个换成%h就代表用户的home路径
ForceCommand
据说一定要加,我没试不加会怎么样
AllowTcpForwarding no
如果不希望该用户能使用端口转发的话就加上,否则删掉
X11Forwarding no
同上
4.设定Chroot目录权限
chown root:woodragon /home/woodragon
chown 755 /home/woodragon
这一步非常非常重要,我就是因为权限没设对卡了一下午= =
需要被限制的目录所属者必须是root,所属组必须是希望被限制的用户所在的组如果所属者没有设成root,那么你会发现压根不让你登录,查看secure日志会有权限错误的记录,比如 fatal: bad ownership or modes for chroot directory XXXXXX如果所属组设成了root,那么你会发现虽然能登录,但是任何文件夹都无法被列出来,不过我没试设成除了root以外非目标用户组会有什么事情最后还有一点非常关键的是,如果你的目录在比较深的地方,那么从目标文件夹到根目录中间所有路过的文件夹所属组都必须是root,否则会发生和上面一样的事情
5.重启sshd
service sshd restart
本文转自:http://iamwd.com/posts/sftp-home-only-under-centos6.html
转载于:https://blog.51cto.com/chenwenming/1613292