SFTP 限制用户活动目录

SFTP 是 Secure File Transfer Protocol 的缩写,即安全文件传送协议。本文介绍如何限制 SFTP 用户在指定的目录下活动。测试环境:CentOS 6.6

步骤一

创建新的用户,在终端中执行

1
[root@localhost ~]# useradd -m -d /home/broly -s /sbin/nologin broly

然后给这个用户一个密码

1
[root@localhost ~]# passwd broly

步骤二

编辑 /etc/ssh/sshd_config 文件

1
[root@localhost ~]# vim /etc/ssh/sshd_config

找到这行:

1
Subsystem sftp /usr/libexec/openssh/sftp-server

并更改为:

1
2
3
4
5
6
7
8
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Match User broly
ChrootDirectory /home/broly
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

其中,Match User broly 意思是匹配用户名为 broly 的用户;ChrootDirectory /home/broly 指定的目录地址为 /home/broly 重启 ssh 服务

1
[root@localhost ~]# service sshd restart

尝试登录 SFTP,如果登录成功,可以忽略下面几步;如果登录失败了,请继续往下看。

步骤三

往往登录失败,原因一般就是:目录权限问题。其目录是有做权限要求的,

  1. ChrootDirectory 设置的目录权限及其每一级父目录权限,属主和属组必须是 root;
  2. ChrootDirectory 设置的目录权限及其每一级父目录权限,权限最大设置只能是 755。实际上我要 SFTP 管理的目录并非 /home/broly,而且另外一个目录,我的解决方法就是在 /home/broly 目录下建立软链接,这样就能符合上述的条件了。这里建立软链接直接 ln -s 是不行的,SFTP 不支持这种软链接访问,可以用 mount 来建立:
1
[root@localhost ~]# mount --bind /path/to/your/directory  /home/broly