用ChrootDirectory限制SFTP登录的用户只能访问指定目录且不能进行ssh登录

创建不能ssh登录的用户sftpuser1,密码用于sftp登录: 
sudo adduser sftpuser1 --home /sftp/sftpuser1 --shell /bin/false 
sudo nano /etc/ssh/sshd_config (执行man sshd_config查看配置说明) 
Ubuntu/Debian上把Subsystem sftp /usr/lib/openssh/sftp-server 
Redhat/CentOS上把Subsystem sftp /usr/libexec/openssh/sftp-server 
修改为 Subsystem sftp internal-sftp 
并加入: 
Match User sftpuser1 
    ChrootDirectory /sftp/sftpuser1 
    ForceCommand internal-sftp 
    AllowTcpForwarding no 
    X11Forwarding no 
注意ChrootDirectory设置的目录/sftp/sftpuser1的所有者必须是root,并且该目录的上级目录/sftp的所有者也必须是root. 
而且只有所有者拥有写权限,/sftp/sftpuser1和/sftp的权限最大设置只能是755. 
sudo chown root:root /sftp/sftpuser1 
sudo service ssh reload 

由于上面设置了目录的权限是755, 
因此所有非root用户都无法在目录中写入文件. 
我们需要在ChrootDirectory指定的目录下建立子目录比如data,重新设置属主和权限. 
mkdir /sftp/sftpuser1/data 
chown sftpuser1:sftpuser1 /sftp/sftpuser1/data 
chmod 755 /sftp/sftpuser1/data 
这样就可以在读写data目录了. 

配置好后,用户sftpuser1只能通过sftp访问指定目录,而且不能进行ssh登录: 
sftp sftpuser1 @127.0.0.1 登录成功,执行 ls -lha / 可见根目录为 /sftp/sftpuser1, 执行cd ..可见无法进入上一层目录. 
ssh sftpuser1 @127.0.0.1 提示: 
Could not chdir to home directory /sftp/sftpuser1: No such file or directory 
This service allows sftp connections only. 
Connection to 127.0.0.1 closed. 

把 AllowTcpForwarding no 改为 AllowTcpForwarding yes 表示允许用户进行端口转发, X11Forwarding 含义类似. 
上面已经实现了端口转发和禁止登录,如果要禁止读写,执行 chmod 000 /sftp/sftpuser1 

原文地址:https://www.cnblogs.com/lpfuture/p/5602644.html