这篇文章给大家分享的是有关Linux怎么限制指定账户不能SSH只能SFTP在指定目录的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
概述
由于某台服务器需要对指定用户进行限制,只允许访问指定目录,这个需求在很多场景应该是比较常见的,下面介绍一种解决方案。
以下限制了sftp用户组只能sftp 连接上去至指定目录(/projects/tms_prod),ssh 连接就提示只接受sftp 连接。
方案具体流程如下:
1. 创建用户及目录:
mkdir -p /projects/ groupadd sftp # 新建组 useradd -g sftp -s /bin/false tms -d /projects/tms_prod # 新建用户 passwd tms chown root:sftp /projects/ # 修改主目录所属用户和组 chmod 755 /projects/ # 主目录授权 mkdir -p /projects/tms_prod # 为用户建立子目录 chown tms:sftp /projects/tms_prod # 修改子目录所属用户和组 chmod 755 /projects/tms_prod # 子目录授权
2. 配置sshd_config
Subsystem sftp internal-sftp #指定使用sftp服务使用系统自带的internal-sftp #Match User tms Match Group sftp ChrootDirectory /projects/ X11Forwarding no #禁止X11转发 AllowTcpForwarding no # 禁止tcp转发 ForceCommand internal-sftp #指定sftp命令,不能ssh连接
注意:
由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
3. 重启ssh服务:
service sshd restart
4. 测试验证
补充:
1. Subsystem sftp /usr/lib/openssh/sftp-server 更为 internal-sftp,这两者有什么区别呢?
简单的说默认sftp 进程由单独的二进制文件:/usr/lib/openssh/sftp-server启动,而internal-sftp 则无需外部二进制文件额外启动一个进程,整合在sshd进程内了。
internal-sftp相较于 /usr/lib/openssh/sftp-server 优点在于:
2. ChrootDirectory directory
一般出现问题会在ChrootDirectory directory上,这个地方的目录不能直接配置到目标目录,需要配置到他的上一级;即给 /A/B/C的C目录做chroot,要对C能读写,所以C目录不能做ROOT目录,对B做chroot。
感谢各位的阅读!关于“Linux怎么限制指定账户不能SSH只能SFTP在指定目录”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!