那些年的记忆

习惯改变行为,行为决定命运。

Linux 限制SFTP用户只能访问某个目录

需要注意OpenSSH的版本,需要4.8p1以上

> ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013


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


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节点


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。