Linux 限制SFTP用户只能访问某个目录
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
Subsystem
sftp
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节点