Linux下开启SFTP的chroot jail


Chroot jail(根目录监狱),感觉这个名字不是一般的霸气,实际用途也是很厉害,它是用来限制登陆的用户只能访问指定的一个根目录,而不能往回退,也就是说CD ..无效。 在服务器端必须安装sshd服务,应该没有Linux不开启的吧(按我目前了解的,几乎没有),最好检查一下有没有nologin这个功能。


# 我的服务器是在/usr/sbin/nologin
whereis nologin

先修改服务器的sshd配置,一般地址在/etc/ssh/sshd_config,按以下的配置代码修改即可


# 原来的配置应该是这样子的,不同的Linux发行版可能有点不一样
# Subsystem sftp /usr/lib/openssh/sftp-server
# 改为以下的样子
Subsystem sftp internal-sftp
# 这个Match配置可以是接着Group,也可以是User,我这里的组名是group1,用户名是user1
# Match Group group1
# 以下是我现在用的配置
Match User user1
# 这里可以使用变量%u代表登陆的用户
#      ChrootDirectory /home/%u
# 以下是我现在用的配置
      ChrootDirectory /home/user1
      ForceCommand internal-sftp
      AllowTCPForwarding no
      X11Forwarding no

配置搞定了,重启sshd服务


# debin类型
service ssh restart
# fedora之类的
systemctl restart sshd

再创建一个用户,然后修改目录权限


# 创建用户
useradd -s /usr/sbin/nologin -d /home/user1 user1
# 修改目录权限,Chroot jail中的目录拥有着必须是root,并且组和其它是不能写入
chown root:root /home/user1
chmod 755 /home/user1
# 建立一个可读写的目录
mkdir /home/user1/writable
chown user1:group1 /home/user1/writable
chmod ug+rwx /home/user1/writable

另外还可以使用rssh和scponly来实现,它们也各自有有缺点,目前还没有一种觉得最好的方案。 全文完。

Share this post

Enjoyed reading? Share it with your friends or colleagues!