linux的PAM认证和shadow文件中密码的加密方式
它是一种统一的认证方案。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文件,这个前提条件貌似很难。
本文只是篇技术分析文章,没有其它任何初衷。
linux的PAM认证和shadow文件中密码的加密方式的更多相关文章
- shadow文件中密码的加密方式
1) 查看shadow文件的内容 cat /etc/shadow 可以得到shadow文件的内容,限于篇幅,我们举例说明: root:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF ...
- 生成/etc/shadow文件中的密码
shadow文件的格式就不说了.就说说它的第二列--密码列. 通常,passwd直接为用户指定密码就ok了.但在某些情况下,要为待创建的用户事先指定密码,还要求是加密后的密码,例如kickstart文 ...
- 手动生成/etc/shadow文件中的密码
shadow文件的格式就不说了.就说说它的第二列——密码列. 通常,passwd直接为用户指定密码就ok了.但在某些情况下,要为待创建的用户事先指定密码,还要求是加密后的密码,例如kickstart文 ...
- Linux命令行批量替换多文件中的字符串【转】
Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...
- linux sed 批量替换多个文件中的字符
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串 sed -i "s/oldst ...
- [转载] linux查找目录下的所有文件中是否含有某个字符串
链接自 http://blog.sina.com.cn/s/blog_691a84f301015khx.html,并略加修订. 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...
- linux查找目录下的所有文件中是否含有某个字符串
查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" find .|xargs grep -ri "IBM" -l ...
- linux查找目录下的所有文件中是否含有某个字符串 (转)
查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...
- linux查找目录下的所有文件中是否含有某个字符串 <zhuan>
查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...
随机推荐
- IDEA 下载 和 安装
1. IDEA 下载 网址 pttps://www.jetbrains.com IDEA 优点 :高度集成企业软件工程的概念(svn, git) 缺点: 破解存在在法律风险 ; E ...
- jQuery插件备忘
jQuery BlockUI Plugin 遮罩插件 ...
- IIS安装、配置 发布网站 报错解决方案
错误一: HTTP 错误 500.19- Internal Server Error法请求该页面配置,因为页面的相关配置数据无效#### HTTP 错误 500.21 - Internal S ...
- bootstrap-table方法之:合并单元格
方法一 通过mergeCells方法 演示地址:http://issues.wenzhixin.net.cn/bootstrap-table/methods/mergeCells.html Merge ...
- 转自: linux svn命令行无法拉取中文名称的文件
转自: https://blog.csdn.net/shaohui/article/details/3996274#commentBox svn: Can't convert string from ...
- SpringBoot2.0小程序支付功能实现weixin-java-pay
SpringBoot2.0小程序支付功能实现weixin-java-pay WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等 ...
- __NSArrayI __NSArray0 __NSSingleObjectArrayI __NSPlaceholderArray __NSArrayM
如果你的 全局 可变数组 前面 用了 copy修饰,那么 调用 arr addObjectsFromArray: 的时候 就 会崩溃,而且提示你 是 [__NSArray0 addObje ...
- (七):处理MFC
(一):简单介绍 为了可以在一个Winelib应用中使用MFC,你须要首先使用Winelib又一次编译MFC. 在理论上,你应该为Windows的MFC编写一个封装(怎样编写在后面介绍).可是,在实践 ...
- 前端学习-jQuery-2
老师的博客地址:https://www.cnblogs.com/yuanchenqi/articles/6070667.html day44 属性操作: ----------------------- ...
- 【OpenFOAM案例】01 elbow
本案例演示利用OpenFOAM的icoFoam求解器计算弯曲管道中的混合流动问题. 1 拷贝tutorials文件 启动终端,且拷贝tutorials文件夹中的文件.利用命令: cp -r $FOAM ...