linux不用命令开启ssh,不用密码也能ssh登陆Linux?
Linux的一个后门引发对PAM的探究
1.1 起因
今天在搜索关于Linux下的后门姿势时,发现一条命令如下:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
经典后门。直接对sshd建立软连接,之后用任意密码登录即可。
ssh root@x.x.x.x -p 5555这个是大家也经常会用到的命令,但是在好奇心的驱使下,为什么任意密码就可以了?
于是搜索了相关的资料,发现都是执行了这条命令就可以免密码登录了,但是为什么却没有一篇详细的解答。
1.2调查
首先测试一下这个命令:在A的机器上执行了如下命令:
在A的机器上执行了如下命令:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
在B机器SSH登录A机器,输入任意密码,成功登录。先理解这条命令主要在做什么:
首先,做一个软链接,结果在/tmp/su 参数的意义: -o option -p port
这样就开启了一个端口为5555的服务:
测试过程中发现,只允许命名为su,命名其他尝试登录都不成功(/tmp/xxx)。
于是看了一下sshd相关的log,发现如下:
发现是基于pam认证的,使用了pam中的su,为了区分是否和/bin/中的su是否相关,做了测试如下:
把/bin/su 重新命名为其他文件,发现依然能够任意密码登录,又做了测试如下:
cp /etc/pam.d/su /etc/pam.d/xxx
在此执行:
ln -sf /usr/sbin/sshd /tmp/xxx; /tmp/xxx -oPort=5555;
成功登录,根据日志和实践现在确认调用的是/etc/pam.d/su
1.3疑问
现在确认了是pam中的su导致的,为什么就不需要密码就可以登录?
简单的diff了一下pam中的sshd和su的区别:
这里需要了解一下PAM中的控制标记:
sshd的pam认证使用了required和include,su使用了sufficient,在此就可以看出二者的区别了。
我们发现su的认证使用了pam_rootok.so,他是如何验证的,为什么导致我们输入任何密码就通过。
于是查了下pam_rootok.so的相关信息:
他的认证模块是认证你的UID是否为0,他会return pam的结果。
再去看一下pam_rootok.so的源码,发现:
他先会调用getuid(),如果get的uid为0,他会检查selinux的root是否为0或是否启用selinux下为0,返回认证成功,否则认证失败。
那么getuid()是从哪里来的,查一下官网:
是根据进程来取得的,根据pam_rootok的文档,我们也可以对su进行调试:
pam_rootok.so返回成功,依次向下执行so,都会成功,建立会话。
查看log:
第一条:
pam_rootok(su:auth): authentication succeeded
1.4 真相
至此也终于清楚了为什么就可以输入任意密码进行登录。
我们重新捋一捋:
1.5 彩蛋
实际的真相就是在pam中的pam_rootok模块,pam_rootok通过了认证还会一次向下执行,但是下面的都会依赖于pam_rootok的认证,auth =>account =>session:
通过查找其实不单单是su存在pam_rootok,只要满足了上述的三个条件都可以进行”任意密码登录”。
1.6 参考资料
https://linux.die.net/man/8/pam_rootok
https://fossies.org/dox/Linux-PAM-1.3.0/pam__rootok_8c_source.html
https://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c.html
https://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c_source.html
http://man7.org/linux/man-pages/man2/getuid.2.html
http://www.tuxradar.com/content/how-pam-works
http://www.centoscn.com/CentOS/help/2014/0504/2899.html
转载自http://www.91ri.org/16803.html
linux不用命令开启ssh,不用密码也能ssh登陆Linux?相关推荐
- 在 Linux 终端下生成随机/强密码的五种方法 | Linux 中国
最近我们在网站上发表过一篇关于 检查密码复杂性/强度和评分的文章.它可以帮助你检查你的密码的强度和评分. 我们可以手工创建我们需要的密码.但如果你想要为多个用户或服务器生成密码,解决方案是什么呢? 是 ...
- window命令行 linux,Windows命令行:起源 直到引入Windows下的linux子系统(WSL)
本文从Windows命令行的起源及终端的演变,到我们在未来Windows发行版中对Windows控制台及命令行进行全面更新,引入Windows下的linux子系统(WSL).在本文中,我们将对命令行最 ...
- linux终端命令行用户名和密码,Linux入门篇 —— Linux 用户与组管理详解(system-config-users 命令行)| 七日打卡...
用户与组管理什么是用户,用户是人吗? 用户是干啥的?用户账号超级管理员: root 普通用户: ruochen 系统/程序用户: 系统中为某个程序而产生的用户,这类用户一般不允许登录操作系统 组账号定 ...
- Linux基础命令---smbpasswd管理samba密码
smbpasswd smbpasswd指令可以用来修改samba用户的的密码,该指令不仅可以修改本地samba服务器的用户密码,还可以修改远程samba服务器的用户密码. 此命令的适用范围:RedHa ...
- linux getty命令 开启 初始化 设置 终端 简介
目录 简介 当作为 getty 命令调用时 参数 安全性 文件 简介 功能说明:是Unix类操作系统启动时必须的三个步骤之一,用来开启终端,进行终端的初始化,设置终端. 语法:getty [-h][- ...
- linux chpasswd命令 批量修改用户密码
chpasswd 批量修改用户密码 工作原理: 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令 语法: 1:# echo 用户名:密码 | chpasswd 2: ...
- 登陆linux主机提示all,修改 linux 的命令行提示符PS1-限制IP通过SSH登陆linux服务器-linux下系统服务详解_169IT.COM...
很多朋友可能对windows下的服务比较了解,但对于linux下的系统服务(守护进程)可能有些陌生. 这里收集了57个linux下的系统服务的详细解释,供大家学习参考. 1. NetworkManag ...
- linux 以下命令对中正确的是什么,2016年Linux认证模拟真题及答案
2016年Linux认证模拟真题及答案 一.选择题. 1.以下命令对中,正确的是: B . A ls和sl B cat和tac C more和erom D exit和tixe cat是显示文件夹的命令 ...
- 告别linux重复操作,学习linux文本处理工具,真正实用性入门教学linux基础命令之文本管理-----进阶sre第一阶段(重温linux基础06)
文本处理工具 cut(实用) 取出文件中的列 cut 列分隔符 指定列 文件名 cut -d: -f1,3 /etc/passwd cut -d: -f1,3-5 /etc/passwd df -h ...
最新文章
- 二级域名做SEO优化有怎样的利弊关系?
- 让你的应用程序支持高对比度模式
- 栈——用链表实现栈操作
- Groovy里使用CountDownLatch
- 数据结构排序法之堆排序he归并排序
- python画图隐藏画笔_python画图
- 计算机二级考试网易教程,学姐分享 | 计算机二级来袭,你准备好了吗?
- 谷歌发布 Windows 10 图形组件 RCE 漏洞的详情
- [转载] Pytorch基础介绍
- 区块链 solidity 快排
- 如何从官网下载oracle客户端,Oracle11g客户端client的下载与安装
- js日期格式化 YYMMDD 转 YY-MM-DD 转 YY年MM月DD日
- python for maya教程_Python for Maya 教程 – Artist Friendly Programming
- 【Java力扣算法《代码随想录》04】第4章链表63-69题(leetcode题号203+707+206+24+19+面试题02.07+142)
- 劝学篇翻译软件测试,汪洙《神童诗劝学篇》原文与译文
- windows系统C++获取当前电脑电池信息
- Hibernate 列映射 – 解决其他类型映射命名冲突
- Counterfactual 项目:广义的以太坊状态通道
- 图像处理------图像加噪
- PL/SQL Developer配置使用说明