限制 sftp 的方案

经常可以看到这样的需求:需要给用户开建 sftp 或 cvs 帐号,但不希望给其一个 shell。今天发现有一个工具叫 rssh,正好可以用来干这个。

rssh 还有另外一个很重要的功能,就是使 sftp 用户登录后被 chroot,不能进入到其它目录。这样也没有必要去安装什么经过 chroot 补丁的 sshd 了。

用 yum 或者 apt 安装 rssh,缺省的几个比较重要的文件应该是安装在

/usr/bin/rssh
/usr/lib/rssh/rssh_chroot_helper
/etc/rssh.conf

/etc/shells 文件里面也应该包含有 /usr/bin/rssh

或者您自己编译源码,然后手工修改 /etc/shells 去,强烈建议新手这么去 configure:

./configure --prefix=/usr --sysconfdir=/etc

修改用户的 shell 为 /usr/bin/rssh , 这样这个用户就不能 ssh 登录了

sudo usermod -s /usr/bin/rssh test

然后创建用户 sftp 的 chroot 目录。本来 rssh 自带一个脚本,不过在我的 ubuntu 工作有些问题,主要是 ldd 获得所依赖的库不准确。所以修改了一下,见附件。

给对应的 test 帐号设置一个 chroot 目录的命令:

sudo sh rssh_mkchroot.sh /home/rssh_chroot/test test 0755

最后修改 /etc/rssh.conf:

首先确认 allowsftp 被设置

再添加一行配置:user=test:077:00010:/home/rssh_chroot/test
077 是给 sftp 上来的用户分配缺省 umask
00010 是 access bits, 倒数第二个 '1' 表示给该用户 sftp 权限

Topic: 技术