SFTP+OpenSSH+ChrootDirectory设置

帐户设置

SFTP的帐户直接使用Linux操做系统帐户,咱们能够用useradd命令来建立帐户。web

首先创建3个要管理的目录:apache

 
1
2
3
mkdir /home/sftp/homepage
mkdir /home/sftp/blog
mkdir /home/sftp/pay

建立sftp组和www、blog、pay帐号,这3个帐号都属于sftp组:vim

 
1
2
3
4
5
6
7
8
9
10
11
12
groupadd sftp 
useradd -M -d /home/sftp -G sftp www
useradd -M -d /home/sftp/blog -G sftp blog
useradd -M -d /home/sftp/pay -G sftp pay
 
# 将blog帐户也加到apache组
useradd -M -d /home/sftp/blog -G apache blog
 
#设置3个帐户的密码密码
passwd www
passwd blog
passwd pay

至此帐户设置完毕。bash

SSH设置

首先要升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。服务器

 

设置sshd_config。经过Chroot限制用户的根目录。ssh

 
1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/ssh/sshd_config
#注释原来的Subsystem设置
Subsystem   sftp    /usr/libexec/openssh/sftp-server
#启用internal-sftp
Subsystem       sftp    internal-sftp
#限制www用户的根目录
Match User www
    ChrootDirectory /home/sftp
    ForceCommand    internal-sftp
#限制blog和pay用户的根目录
Match Group sftp
    ChrootDirectory %h
    ForceCommand    internal-sftp

完成这一步以后,尝试登陆SFTP:spa

 
1
2
3
4
5
6
sftp www@abc.com
#或者
ssh www@abc.com
#若是出现下面的错误信息,则多是目录权限设置错误,继续看下一步
#Connection to abc.com closed by remote host.
#Connection closed

权限设置

要实现Chroot功能,目录权限的设置很是重要。不然没法登陆,给出的错误提示也让人摸不着头脑,无从查起。我在这上面浪费了不少时间。操作系统

目录权限设置上要遵循2点:code

  1. ChrootDirectory设置的目录权限及其全部的上级文件夹权限,属主和属组必须是root;
  2. ChrootDirectory设置的目录权限及其全部的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。

若是不能遵循以上2点,即便是该目录仅属于某个用户,也可能会影响到全部的SFTP用户。server

 
1
2
chown root.root /home/sftp /home/sftp/homepage /home/sftp/blog /home/sftp/pay
chmod 755 /home/sftp /home/sftp/homepage /home/sftp/blog /home/sftp/pay

因为上面设置了目录的权限是755,所以全部非root用户都没法在目录中写入文件。咱们须要在ChrootDirectory指定的目录下创建子目录,从新设置属主和权限。以homepage目录为例:

 
1
2
3
mkdir /home/sftp/homepage/web
chown www.sftp /home/sftp/homepage/web
chmod 775 /home/sftp/homepage/web

要实现web服务器与blog帐户互删文件的权限需求,须要设置umask,让默认建立的文件和目录权限为775便可。将下面的内容写入.bashrc中:

 
1
umask 0002

至此,咱们已经实现了全部须要的功能。

相关文章
相关标签/搜索