前言
系统管理员经常面临一个问题,如何将用户的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启动命令等。