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?相关推荐

  1. 在 Linux 终端下生成随机/强密码的五种方法 | Linux 中国

    最近我们在网站上发表过一篇关于 检查密码复杂性/强度和评分的文章.它可以帮助你检查你的密码的强度和评分. 我们可以手工创建我们需要的密码.但如果你想要为多个用户或服务器生成密码,解决方案是什么呢? 是 ...

  2. window命令行 linux,Windows命令行:起源 直到引入Windows下的linux子系统(WSL)

    本文从Windows命令行的起源及终端的演变,到我们在未来Windows发行版中对Windows控制台及命令行进行全面更新,引入Windows下的linux子系统(WSL).在本文中,我们将对命令行最 ...

  3. linux终端命令行用户名和密码,Linux入门篇 —— Linux 用户与组管理详解(system-config-users 命令行)| 七日打卡...

    用户与组管理什么是用户,用户是人吗? 用户是干啥的?用户账号超级管理员: root 普通用户: ruochen 系统/程序用户: 系统中为某个程序而产生的用户,这类用户一般不允许登录操作系统 组账号定 ...

  4. Linux基础命令---smbpasswd管理samba密码

    smbpasswd smbpasswd指令可以用来修改samba用户的的密码,该指令不仅可以修改本地samba服务器的用户密码,还可以修改远程samba服务器的用户密码. 此命令的适用范围:RedHa ...

  5. linux getty命令 开启 初始化 设置 终端 简介

    目录 简介 当作为 getty 命令调用时 参数 安全性 文件 简介 功能说明:是Unix类操作系统启动时必须的三个步骤之一,用来开启终端,进行终端的初始化,设置终端. 语法:getty [-h][- ...

  6. linux chpasswd命令 批量修改用户密码

    chpasswd  批量修改用户密码 工作原理: 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令 语法: 1:# echo 用户名:密码 | chpasswd 2: ...

  7. 登陆linux主机提示all,修改 linux 的命令行提示符PS1-限制IP通过SSH登陆linux服务器-linux下系统服务详解_169IT.COM...

    很多朋友可能对windows下的服务比较了解,但对于linux下的系统服务(守护进程)可能有些陌生. 这里收集了57个linux下的系统服务的详细解释,供大家学习参考. 1. NetworkManag ...

  8. linux 以下命令对中正确的是什么,2016年Linux认证模拟真题及答案

    2016年Linux认证模拟真题及答案 一.选择题. 1.以下命令对中,正确的是: B . A ls和sl B cat和tac C more和erom D exit和tixe cat是显示文件夹的命令 ...

  9. 告别linux重复操作,学习linux文本处理工具,真正实用性入门教学linux基础命令之文本管理-----进阶sre第一阶段(重温linux基础06)

    文本处理工具 cut(实用) 取出文件中的列 cut 列分隔符 指定列 文件名 cut -d: -f1,3 /etc/passwd cut -d: -f1,3-5 /etc/passwd df -h ...

最新文章

  1. 二级域名做SEO优化有怎样的利弊关系?
  2. 让你的应用程序支持高对比度模式
  3. 栈——用链表实现栈操作
  4. Groovy里使用CountDownLatch
  5. 数据结构排序法之堆排序he归并排序
  6. python画图隐藏画笔_python画图
  7. 计算机二级考试网易教程,学姐分享 | 计算机二级来袭,你准备好了吗?
  8. 谷歌发布 Windows 10 图形组件 RCE 漏洞的详情
  9. [转载] Pytorch基础介绍
  10. 区块链 solidity 快排
  11. 如何从官网下载oracle客户端,Oracle11g客户端client的下载与安装
  12. js日期格式化 YYMMDD 转 YY-MM-DD 转 YY年MM月DD日
  13. python for maya教程_Python for Maya 教程 – Artist Friendly Programming
  14. 【Java力扣算法《代码随想录》04】第4章链表63-69题(leetcode题号203+707+206+24+19+面试题02.07+142)
  15. 劝学篇翻译软件测试,汪洙《神童诗劝学篇》原文与译文
  16. windows系统C++获取当前电脑电池信息
  17. Hibernate 列映射 – 解决其他类型映射命名冲突
  18. Counterfactual 项目:广义的以太坊状态通道
  19. 图像处理------图像加噪
  20. PL/SQL Developer配置使用说明

热门文章

  1. LINUX 内存使用情况
  2. 出栈顺序 与 卡特兰数(Catalan)的关系
  3. python 代码片段9
  4. Ioc容器Autofac介绍
  5. PCL点云 Lebel:Research
  6. 主打“云安全” 迅雷系帝恩思登陆新三板
  7. 程序员,软件测试知多少?
  8. 《MySQL排错指南》——1.9 许可问题
  9. WWDC 2013 Session笔记 - iOS7中弹簧式列表的制作
  10. Android 编程下的四大组件之服务(Service)