使用sshdo限制incoming ssh只能执行指定命令

news2024/12/24 11:05:39

前言

系统管理员经常面临一个问题,如何将用户的incoming ssh限制在一个命令白名单里,达到安全的目的。本文介绍sshdo工具,来实现该功能。

仓库地址

https://github.com/wanlinwang/sshdo

安装

tar xzf sshdo-1.1.tar.gz #如果是直接clone仓库则无需解压。
cd sshdo-1.1
make check
sudo make install

阅读手册

sshdo手册

sshdoers手册

本质上,是sshdo拦截了ssh请求,并通过读取sshdo配置文件来判断待运行命令是否在白名单里。

总的来说,管理员需在两处设置

  • 在ssh配置文件,设置incoming ssh只能运行 `/usr/bin/sshdo [label]` 命令;

  • 在sshdo配置文件设置,设置具体谁可以执行什么命令。

实验

实验一

说明:本方式适用于key-pair认证

ssh配置文件

[root@centos7-9-vm-120 ~]# cat /root/.ssh/authorized_keys 
command="/usr/bin/sshdo" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDxXoyal7McujoUIeQe8uellc/iaET9WU0cubaYn4RKSX8oxrNhK81HPHpAdVe37Rnv2wd3AHChcJ88IdgFo6KRUEJimIskQLkTll57uAq+cNu3hxPqcgfRMzosDU1VWFwNqpcEjqDosn0ule6oK+DP2sobND7w4KsUDaTAb+1vPMFgpO0UJ49hu+4LUeNxL4e1N57CQ6rOwRmYbzMcEz3PHC3h1gKlvVZfzcCH5waaRFfFCXtxnVTAyzdpStbTQcUokvef+r+RDiNl9UGtf6SpII1K6pgG8iai7xC1Uplup0tqM7cPerUdU7gSQTDWkFfFfH6DE3b3Tj1HkM7A2HOBjh6iSMY2fMktwf4iz/LIW1NnXkpXGGplvu8FG5otirOcU6OeAJGRSbdkHruo6ZiryeYfos5gQHkOU9HV4F3KHWdRrveEWVYCJAop4DZX/fUuMTDP4nXIIrlTqxcJj9dSk+L6Ff56h3vxqKE/QawZ385v1A2iXkdIKva33IAhK+U= ben@Bens-MBP

sshdo配置文件

[root@centos7-9-vm-120 ~]# cat /etc/sshdoers| grep -v '^#' | grep -v '^$'
root: hostname

效果

实验二

说明:本方式同时适用于密码、key-pair认证

ssh配置文件

注意:修改完请重启sshd,使得其生效。

[root@centos7-9-vm-120 ~]# tail -3 /etc/ssh/sshd_config
# added by wanlinwang for testing sshdo
Match User root
ForceCommand /usr/bin/sshdo

sshdo配置文件

[root@centos7-9-vm-120 ~]# cat /etc/sshdoers| grep -v '^#' | grep -v '^$'
root: hostname

效果

使用密码

使用key-pair

总结

本质上,利用了ssh内建的能力,限制incoming ssh只能执行sshdo。当ssh过来时,sshdo拦截了ssh请求,并通过读取sshdo配置文件来判断待运行命令是否在白名单里,来决定是否执行。

借助这个工具,我们可以做关于安全相关的事,比如login server只允许用户的incoming ssh执行vnc启动命令等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM学习笔记六:运行时数据区之堆

目录 概述 堆空间内部结构 JDK7版本 JDK8版本 堆空间的内存划分 堆空间大小设置参数 概述 Java堆是虚拟机所管理的内存中最大的一块,其在JVM启动时即被创建,并且空间大小也被确定(这里是不考虑Java8之后以本地内存来实现的元空间&…

连续时间信号与离散时间信号

前言 《信号与系统》是一门很难的课,也是许多学校考研要考的专业课,由于每周只有两节课,所以每次上完都要及时的去复习,这里参考的教材是奥本海姆著作,刘海棠译,北京:电子工业出版社&#xff0…

实践数据湖iceberg 第四十课 iceberg的sql运维方式(合并文件、合并元数据、清理历史快照)

系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql方式从kafka读数据到iceberg 实践数据湖iceberg 第四课 在sqlclient中,以sql方式从kafka读数据到…

只因小黑子:SVG

小黑子的SVG复习SFV画布1. 初始SVG2. SVG绘制矩形、圆形和椭圆形2.1 rect 矩形2.2 circle 圆形2.3 ellipse 椭圆4. SVG绘制线条、多边形和多线条4.1 line 线条4.2 polygon 多边形4.3 polyline 多线条5. SVG绘制文本 text6. SVG绘制路径 path7. SVG描边属性8. SVG 模糊和阴影效果…

MySQL安装配置教程(超级详细、保姆级)

一、 下载MySQL Mysql官网下载地址:https://downloads.mysql.com/archives/installer/ 选择想要安装的版本,点击Download下载 本篇文章选择的是5.7.31版本 二、 安装MySQL 选择设置类型 双击运行mysql-installer-community-5.7.31.0.msi,…

车载以太网 - 测试用例设计 - 时间参数 - 11

前面已经介绍过DoIP相关的时间参数信息,然而对于时间参数信息相关的测试用例该如何设计呢?个人认为这是用例中最好设计的一类,这类的用例只需要按照定义去设计写测试用例即可,难的是自动化脚本开发和手动测试执行。毕竟时间参数一般都是毫秒级的验证,就算是秒级的我们也很…

【项目管理】对管理的认识与思考

在进入职场一段时间后,我们不免会对管理有一些接触,可能会自己带团队、可能会到管理岗位等等;做管理重要的就是对于不同层级的管理。 管理是一门艺术,在谈到管理时,我们首先想到的应该是管人、带团队或者是一个部门或公…

matplotlib学习笔记(持续更新中…)

目录 1. 安装,导入 2. figure,axes(图形,坐标图形) 2.1 figure对象 2.2 axes对象 2.3 代码演示 2.3 subplot() 方法 3. 图表的导出 3.1 savefig() 方法 3.2 代码演示 1. 安装,导入 pip install m…

Python —— Windows10下配置Pytorch环境(完整流程)

最终效果 配置流程 一、下载安装显卡驱动 1、查看设备管理器显卡是否为NVIDIA,并确定显卡型号 2、根据显卡型号然后NVIDIA官网下载安装显卡驱动 下载完成后,双击一步一步执行即可。 3、安装完成驱动后,打开cmd终端输入"nvidia-smi"…

JVM学习笔记五:运行时数据区之本地方法栈

目录 概述 本地方法(Native Method) 使用本地方法的原因 本地方法栈 执行流程 概述 如果要了解本地方法栈的作用,首先需要了解本地方法库和本地方法接口。 本地方法接口是Java代码调用其他非Java代码的接口,本地方法库是其他…

观看课程领奖品!Imagination中国区技术总监全面解读 IMG DXT GPU

此前,我们发布了一系列关于 IMG DXT GPU 的介绍,为了让更多读者了解其背后的技术及应用方向,我们特别邀请 Imagination 中国区技术总监艾克录制全新在线课程,为大家全面解读IMG DXT GPU。 点击这里,马上注册观看&…

函数的栈帧的创建和销毁

文章目录本章主题:一.什么是函数栈帧1.什么是栈2.什么是函数栈帧二.理解函数栈帧能解决什么问题呢?三.函数栈帧的创建和销毁解析1.预备知识(1) 认识相关寄存器和汇编指令(2)栈帧空间的维护2.解析函数栈帧的…

uniapp 引入彩色symbol和 指令权限

uniapp 引入iconfont图标库彩色symbol 1,先去阿里巴巴矢量图标库登录 然后点击下载至本地 2.下载本地,然后解压文件夹 3.打开终端cmd命令窗口 npm安装全局包npm i -g iconfont-tools 4.终端切换到上面解压的文件夹里面,运行iconfont-too…

原理的学习

序参考的是这个书:Python神经网络编程 (豆瓣) (douban.com)小白,0基础,也看不懂其它更复杂的书……01.正向计算从左到右,根据输入值,得到输出值总览这就是神经元的数学形式:阈值函数sigmoid函数&#xff1a…

TIA博途_通过不定长数组实现冒泡排序的具体方法示例(封装FC全局库)

通过不定长数组实现冒泡排序的具体方法示例(封装FC全局库) 使用这种不定长数组时要注意,低版本的博途可能不支持这种方法(我自己尝试的V15版本时失败了,无法实现),本例中使用的是TIA博途V17版本。 具体步骤可参考如下: 如下图所示,打开博途后新建一个项目,添加一个12…

Java监听器的理解与实现

文章目录初识监听器Listener接口分类ServletContext监听器HttpSession监听器ServletRequest监听器Java代码实现ServletContextListenerServletContextAttributeListenerHttpSessionListenerHttpSessionAttributeListenerHttpSessionActivationListenerHttpSessionBindingListen…

在 4G 内存的机器上,申请 8G 内存会怎么样?

在 4GB 物理内存的机器上,申请 8G 内存会怎么样? 这个问题在没有前置条件下,就说出答案就是耍流氓。这个问题要考虑三个前置条件: 操作系统是 32 位的,还是 64 位的?申请完 8G 内存后会不会被使用&#x…

【机器学习】集成学习

1.什么是集成学习 集成学习的基本思想是结合多个学习器组合成一个性能更好的学习器。这类方法会训练多个弱学习器(基学习器)并将它们输出的结果以某种策略结合起来组成一个强学习器。 2.集成学习的几种方法 根据个体学习器的生成方式,集成学…

手把手教你用React Hook和TypeScript从零实现虚拟滚动列表组件

前言 k8s 全称 kubernetes,这个名字大家应该都不陌生,k8s是为容器服务而生的一个可移植容器的编排管理工具,集应用的部署和运维,负载均衡,服务发现和扩容,版本回滚于一身,越来越多的公司正在拥…

linux集群技术(二)--keepalived(高可用集群)(二)

案例1--keepalived案例2--keepalived Lvs集群1.案例1--keepalived 1.1 环境 初识keepalived,实现web服务器的高可用集群。 Server1: 192.168.26.144 Server2: 192.168.26.169 VIP: 192.168.26.190 1.2 server1 创建etc下的…