freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

运维安全 | 如何限制指定账户不能SSH只能SFTP在指定目录
FreeBuf_282280 2018-09-20 09:00:50 647294

*本文作者:ForrestX386,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

前言

最近,我司线上搞了一台文件中转服务器,用于sftp上传下载一些文件(包括测试日志之类),但是领导希望用的人只能在特定目录上传下载,不能获取Linux shell之类。运维安全部研究了一番之后,搞了一个方案,可以限制特定组内的用户只能sftp 连接上去至指定目录,ssh 连接就提示只接受sftp 连接,总算是满足了领导的要求。现在总结一下,和大家分享一下, 测试与分析如下。

0x01 测试环境配置

比如以限制sftpgroup 组的用户都只能在自己的家目录sftp 上传下载,不能ssh 连接获取shell为例进行说明,假设zhangsan 是被限制的账户之一

1、新建一个sftpgroup,以组为单位进行限制

groupadd sftpgroup

新建一个sftpgroup

2、 新建一个账户zhangsan,加入sftpgroup

useradd -d /home/zhangsan -s /usr/sbin/nologin -M -N -gsftpgroup zhangsan

新建一个账户zhangsan

这里shell 设置为/usr/sbin/nologin, 使其无法获取交互式shell,其实这里设置成啥都无所谓,关键点在4节中的ForceCommand internal-sftp 配置,稍后会解释。

3、zhangsan账户以公钥方式认证,额外配置如下

mkdir -p /home/zhangsan/.ssh

chown zhangsan:sftpgroup /home/zhangsan/.ssh

chmod 700 /home/zhangsan/.ssh

cat xxx.pub >/home/zhangsan/.ssh/authorized_keys

chown zhangsan:sftpgroup /home/zhangsan/.ssh/authorized_keys

chmod 700 /home/zhangsan/.ssh/authorized_keys

zhangsan账户以公钥方式认证

4、 配置sshd_config

配置如下:

配置sshd_config

这里有3点需要解释:

Subsystem sftp /usr/lib/openssh/sftp-server 更为 internal-sftp,这两者有什么区别呢?

简单的说默认sftp 进程由单独的二进制文件:/usr/lib/openssh/sftp-server启动,而internal-sftp 则无需外部二进制文件额外启动一个进程,整合在sshd进程内了。

整合在sshd进程内

internal-sftp相较于 /usr/lib/openssh/sftp-server 优点在于:

性能好,无需额外进程了嘛;

安全性好,无需用户登录shell,且可使用ChrootDirectory 限制sftp行为活动的目录;

sftp-server 的存在主要是向后兼容。

internal-sftp

综上,考虑internal-sftp的安全性,故更改为internal-sftp。

Match指令是用来干什么的?

Match指令主要用于条件匹配,比如上图:

Match group sftpgroup

这告诉sshd 进程,sftpgroup 用户组中的用户适用下面的限制:

ChrootDirectory %h # 限制sftp的活动目录在其Home 目录;

X11Forwarding no # 禁止X11转发;

AllowTcpForwarding no # 禁止tcp转发。

ForceCommand internal-sftp

Match指令

ForceCommand internal-sftp 是什么意思?

防止用户执行他们自己自定义的命令,限制用户命令执行上下文为sftp(可以理解为用户的'shell'就是sftp 那个上下文环境), 即:用户除了能执行sftp中允许的命令外,其他命令啥也执行不了

0x02 测试验证

1、ssh 连接失败

ssh 连接失败

ssh 连接提示只接受sftp connection,这就是0x02提到的ForceCommand internal-sftp 配置的效果,如果配置了这个,不管zhangsan这个用户的登录shell是啥都不好使。 如果去掉0x02提到的ForceCommand internal-sftp 配置,则ssh连接时候提示如下:

ssh 连接失败

2、sftp连接被接受,但活动目录受限

sftp连接被接受,但活动目录受限

只能sftp连接,且限制在了/home/zhangsan这个目录下。

参考

https://serverfault.com/questions/660160/openssh-difference-between-internal-sftp-and-sftp-server

https://man.openbsd.org/sshd_config

*本文作者:ForrestX386,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

# linux # 运维安全
本文为 FreeBuf_282280 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
FreeBuf_282280 LV.5
I am a robot,do not talk to me
  • 9 文章数
  • 3 关注者
安全应急响应 | 如何从内核中直接获取隐藏的进程信息
2018-10-23
运维安全 | 等保视角下的SSH加固之旅
2018-10-18
安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样
2018-10-12
文章目录