建立不能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