环境:ubuntu server 14.04
目的:用户只能通过 sftp 访问指定目录,并且不能登录 shell

网上有很多这方面的介绍,最有价值的是这里。但是按照这篇文档还是遇到了两个坑:

  1. 配置没有加载
  2. sshd 无法正常启动

这并不能说是参考文章,只是它没有提到而已。解决方法在下面会以斜体的字体表明。

下面是需要的步骤;

创建用户组
1
sudo addgroup sftponly

之后将通过用户组来控制权限,所以创建一个新的用户组是有必要的。

创建用户
1
sudo useradd -d /home/bob -s /usr/lib/sftp-server -M -N -g sftponly bob

把新用户 bob 加入到 sftponly 这个用户组。

1
sudo passwd bob

为新用户 bob 设置密码。

1
echo "/usr/lib/sftp-server" >> /etc/shells

把 sftp-server 作为一个 shell 加入到 shell 列表。

创建用户目录
1
2
sudo mkdir -p /home/bob/uploads
sudo chown bob:sftponly /home/bob/uploads

为新用户创建 home 目录和 sftp 目录,并设置所有权。
需要注意的一点是,/home/bob 目录的 owner 需要是 root,权限最好是755

修改配置
1
sudo vim /etc/ssh/sshd_config

打开 sshd_config 配置文件,把 Subsystem sftp /usr/lib/openssh/sftp-server 注释掉,在下面加上 Subsystem sftp internal-sftp

最后一行添加上:

1
2
3
4
5
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

注意:上面的代码一定要加在最有一行,否则 sshd 会无法启动

重启 sshd
1
sudo service ssh restart

注意:参考中使用sudo /etc/init.d/ssh restart来重启 sshd,没有任何的效果。

当使用 service 来重新启动的时候,如果正常会显示:

1
2
ssh stop/waiting
ssh start/running, process 12760

如果出错,则只会显示

1
2
ssh stop/waiting
ssh start/running

`

Comments

2015-04-29