linux的PAM认证和shadow文件中密码的加密方式

2023-11-16

它是一种统一的认证方案。PAM 让您能随时改变您的认证方法以及需求,并且不需要重新编译任何代码就封装了所有本地认证方法。具体见 PAM 网站

对于 PAM 您只需要做:

  • 对您的密码采用不同于 DES 的加密方式(让它们面对暴力解码(brute-force decode)时更为坚固)。

  • 对您所有用户使用资源限额,以防止他们进行拒绝服务(denial-of-service)攻击(进程数、占用内存量等等)。

  • 随时启用 shadow password (见下文)

  • 只在特定的时间允许特定的用户从特定的地方登录

上述介绍来源于 http://man.ddvip.com/linux/Mandrakelinux10server/password-security.html

========================================


我们看看shadow文件的格式:

格式是:

shadow是个可读文件,普通用户没有读写权限,超级用户权限为可读写。

如果密码字符串为,表示系统用户不能被登入,为表示用户名被禁用,如果密码字符串为空,表示没有密码,通过可以清空一个用户的口令。

具体shadow可参考 shadow how-to,尽管这是一份已经过时了的文档。

下面探讨下shadow中的密码加密问题:

还是以上面的root用户为例:

其中的密码域为 ,参考linux标准的passwd.c源文件,在pw_encrypt函数中可以找到加密方法:


也就是说加密用明文密码和一个叫salt的东西用crypt()加密生成密文。
再来看看crypt的帮助:
http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html
可发现原来crypt密文里是由三部分组成的,即:
目前常用的是当id为1时,使用md5加密,id为5,采用SHA256进行加密,id为6采用SHA512进行加密。
分析上面的函数,可看出我们的shadow密码中,直接把 当做salt参数带入进行crypt加密。
那好,我们可以写个简短的代码进行试验:

保存后执行gcc passwd.c -lcrypt -o passwd

编译成功后运行./passwd root 123
其中./passwd是生成的命令,root是我们用来测试的账户,123是测试系统中root用户的密码,执行的结果是:

可见,我们得到了和系统shadow文件下相同结果的密文。


根据我们的运行结果我们可以看到,在root用户的shadow中,他的salt是
我们之前也是用这个salt来进行加密匹配的。但是,问题是:这个salt到底是怎么来的??

还是分析标准的passwd.c,
在passwd.c中,找到了生成salt的函数:crypt_make_salt

除了一大段条件判断语句,其实最重要的只有一句gensalt(salt_len)。
看看gensalt的定义:

哦,原来神秘的salt只是某个的固定长度的随机的可见的字符串而已。
每次改写密码时,都会再随机生成一个这样的salt。而用户登入时,会拿用户登入的明文密码经过上述演示的步骤生成密文后和shadow里的密码域进行比较。


有了上述的分析,要暴利破解linux下的口令也不是什么问题,但前提是你有机会拿到shadow文件,这个前提条件貌似很难。
本文只是篇技术分析文章,没有其它任何初衷。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux的PAM认证和shadow文件中密码的加密方式 的相关文章

  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • python:numpy 运行脚本两次

    当我将 numpy 导入到 python 脚本中时 该脚本会执行两次 有人可以告诉我如何阻止这种情况 因为我的脚本中的所有内容都需要两倍的时间 这是一个例子 usr bin python2 from numpy import print t
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 操作系统什么时候清除进程的内存

    进程在某些操作系统上成功或异常终止 操作系统何时决定擦除分配给该进程的内存 数据 代码等 在退出时或当它想为新进程分配内存时 这个清除内存分配过程在所有操作系统 winXP Win7 linux Mac 上都相同吗 据我了解 页表具有该进程
  • gethostbyname() 或 getnameinfo() 如何在后台工作?

    How gethostbyname or getnameinfo 在后台工作 include
  • InstaPy:“错误,无法确定 64 位 Linux 的正确文件名”

    有人知道如何解决或解决这个问题吗 来自控制台的堆栈跟踪 执行后报告错误 InstaPy Version 0 6 9 Workspace in use home zanettra InstaPy Error unable to determi
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • Inotify linux 监视子目录

    是否可以以这种模式监视目录 storage data usernames Download gt storage data Download 我需要监视每个用户的下载文件夹中是否进行了更改 也许我需要创建所有路径的列表 将其放入数组中 并在
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star

随机推荐

  • 【前端】Bad control character in string literal in JSON解决方案(详解),JSON.parse(str)/Uncaught SyntaxEr报错解决方法。

    问题描述 let text fail station FSW WELDING DRY 2 r n fail resourceid 200118223 r n fail timestamp 2022 12 17 JSON parse text
  • 宝塔部署Springboot项目与踩坑

    目录 1 宝塔硬件方面 2 转储数据库 3 开放端口 4 打包maven项目 1 宝塔硬件方面 首先在宝塔上安装完成mysql与Tomcat 然后在MySQL的配置文件中添加 skip grant tables 重载配置并启动 注意可能会启
  • tomcat下CSS失效

    项目改界面的时候 把新界面套用到原有页面上去 总是不正常 有部分CSS显示不出来 弄了半天才发现 原来是tomcat缓存的问题 把tomcat的缓存 也就是work文件夹下的相关文件删除就正常了 具体原因好像是因为 tomcat的jsp文件
  • 16.BIO、NIO、AIO 有什么区别?

    简单介绍 BIO 就是传统的 java io包 它是基于流模型实现的 交互的方式是同步 阻塞方式 也就是说在读入输入流或者输出流时 在读写动作完成之前 线程会一直阻塞在那里 它们之间的调用时可靠的线性顺序 它的优点就是代码比较简单 直观 缺
  • Python分析

    一 前言 大家好 首先说明的是 这是一篇技术文 也是一篇not技术文 今天分享的是 当我获取了微信小程序英文取名的3500多个微信用户昵称 年龄段后 分析得到下面解果 二 Let s get it 1 基本信息获取 1 访问英文取名的用户基
  • 可视化修改SQL服务器名字,修改sql server服务器名称

    SQLServer复制需要有实际的服务器名称才能连接到 修改完后 重启SQL SERVER服务 第二种情况下 为远程服务器增加 别名 使用别名代替IP地址来连接远程数据库服务器 我自己用的是SQL SERVER2012 打开SQL SERV
  • selenium⼊⻔到放弃-------->学会了就是玩,能玩出花来

    目录 爬虫和反爬虫之间的斗争 爬虫的建议 动态HTML技术了解 获取ajax数据的方式 selenium chromedriver获取动态数据 selenium 下载chromedriver 安装Seleniumselenium入门 Chr
  • vue3 子组件向父组件传递数据,函数

    父组件向子组件传递参数请看 父组件vue3 setup 父组件向子组件传递参数 子组件 defineExpose 暴露uid name参数和sonToFather的方发 在setup语法糖里面defineExpose不用import引入直接
  • SummaryWriter的使用

    from torch utils tensorboard import SummaryWriter import numpy as np from PIL import Image writer SummaryWriter logs ima
  • el表达式和jstl标签库

    el表达式 只用于jsp页面中 el表达式的最初提出来的时候的作用 1 可以从域对象中获取数据 比较简单 获取域对象内容的表达式 pageContext request session application 2 第二种用法 在el表达式中
  • 一个可以让你斩获大厂Offer的笔记、速来领取

    青春啊 永远是美好的 可是真正的青春 只属于这些永远力争上游的人 永远忘我劳动的人 永远谦虚的人 最近收到不少的优秀学生投稿 他们有投稿手写笔记 有手写博客 也还有视频 小编也从中挑出几篇较为优秀的文章 下面一起看看吧 C认证优秀学员笔记又
  • HashMap多线程造成了CPU100%,死循环

    resize 方法的时候是罪魁祸首
  • STM32F1xx IAP跳转App 后中断异常及解决

    网上看到一些网友遇到STM3F1xx系列编写IAP程序经常遇到跳转到App后中断异常的问题 如一触发串口接收中断就复位等 现梳理如下 其实引起上述异常的根本原因就是 共用一组件 中断无入口 如 IAP程序中配置并打开了USART1接收中断
  • 使用Vue实现div上下收缩动画效果

    封装组件
  • springboot原理

    1 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用
  • ConstrainLayout解决复杂的嵌套布局

    最近 项目比较忙 没什么时间写博客 今天我要讲的是 项目中复杂的嵌套布局你讲采取何种方式呢 如果按常规方式去做 估计你做完一个界面 估计够呛 我将推荐你们使用谷歌推出的ConstrainLayout 虽然还没有出正式版本 但用于复杂嵌套布局
  • OJ系统刷题 第九篇(难篇)

    13441 求小数的某一位 难题 二刷 三刷 时间限制 1 秒 内存限制 128 MB 分数 tfrac a b ba 化为小数后 小数点后第n位的数字是多少 输入 三个正整数a b n 相邻两个数之间用单个空格隔开 0
  • Windows下好用的终端程序ConEmu

    Windows下的终端程序一直是一个问题 默认的cmd已经老旧不堪 而且在Windows 10中已经取消了在此处打开终端的右键菜单 改为使用功能更加强大的Powershell 而Powershell虽然功能强大 但是默认自带的终端程序却很不
  • COCO数据集解析生成语义分割mask

    COCO数据集解析生成语义分割mask 通过coco数据集的标注文件 instances train2014 json instances val2014 json 生成语义分割mask存在不同类别区域重叠问题 导致重叠部分像素的数值超出
  • linux的PAM认证和shadow文件中密码的加密方式

    它是一种统一的认证方案 PAM 让您能随时改变您的认证方法以及需求 并且不需要重新编译任何代码就封装了所有本地认证方法 具体见 PAM 网站 对于 PAM 您只需要做 对您的密码采用不同于 DES 的加密方式 让它们面对暴力解码 brute