1. 新建用户并设置密码
>useradd suser
>passwd suser// 输入密码
2. 设置sshd配置文件
>cd /etc/ssh/
>cp sshd_config sshd_config.back// 备份
>vi sshd_config
// 注释该行 不注释的话会报错
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystemsftp internal-sftp
Match User suser
ChrootDirectory/var/opt/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
3. 重启sshd服务
> service sshd restart
其实我到这一步,已经成功实现了Linux 限制SFTP用户只能访问某个目录,我的需求是只允许test用户访问mnt这个目录。
4. 创建目录并设置权限
>mkdir /var/opt/sftp
>chown -R root:suser/var/opt/sftp
>chmod -R 750/var/opt/sftp
至关重要的是:
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
注意:由于权限是755,导致非root用户都无法在目录中写入文件,所以需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。
如:
>
chown
suser:suser/var/opt/sftp/testdir
>
chmod
-R 755/var/opt/sftp/testdir
5. 测试一下
>
sftp
-oPort=22 sftpuser@192.168.11.180
常见问题:
1. 登陆时报错:Write failed: Broken pipe, Couldn't read packet: Connection reset by peer
原因:权限的问题,必须设置目录为属root用户,属sftp用户组。权限为750
2. 重启sshd时报错:Starting sshd: /etc/ssh/sshd_config line 141: Subsystem 'sftp' already defined.
原因:忘记把Subsystem注释,导致/etc/ssh/sshd_config同时存在有两个Subsystem节点