一般托管在我服务器上的网站我都不提供任何管理方式,因为这样比较安全,同时也一直懒得去研究怎么把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