最近在准备论文的间隙中,为新服务器的安全问题大伤脑筋,头疼的问题之一是不知道为什么无法实现FTP用户的chroot(当然,匿名用户除外)。尽管新服务器上的用户都是可信赖的,但还是应该尽量留足意外情况。可是系统的chroot似乎又非常繁琐,让我望而却步。今天在Lau兄的帮助下,总算找到了一个简单的方法来实现这个问题。

  原文的链接地址是 http://blog.adahsu.net/2010/01/sftp-chrooted.html ,内地要挂代理才能访问,不过好像也有类似的解决方法。

  1. 在 /etc/ssh/sshd_config 中,将Subsystem改为 Subsystem sftp internal-sftp;
  2. 在下面设定如下:
    Match User user #将user替换为需要chroot的用户
    ChrootDirectory /chroot #chroot的目录
    ForceCommand internal-sftp #强制使用sftp

  注意openssh的版本一定要5.1+。似乎RHEL和CentOS提供的yum包最高只支持到4.3,只能去下载源代码来编译。而且openssh的config目录的设定似乎有个bug,要注意。至此,SFTP可以成功chroot了。

  之后我又想用openssh或用其他方法实现对SSH登陆的chroot,似乎有以下几种方法:

  1. 水木有一篇很好的chroot的教程,但太长太繁琐了,仔细扫了几眼,貌似很复杂;
  2. http://liuyuansu.blog.sohu.com/39538859.html 有一篇很好的在openssh上实现chroot的文章,不过给了一长串代码,没有研究;
  3. 用PAM实现:http://www.linuxdiyf.com/viewarticle.php?id=90273 好像不成功,不过也可能是我没做对。

  自己改了一下sshd的config,chroot是成功了,但SSH也登陆不上了,说找不到bash。把bash挪了几个位置,还是找不到,放弃了。只好关闭了几乎所有用户的SSH(但影响也不大)。自己太菜,但现在实在是没那个时间慢慢去折腾这个chroot了。