Linux的shadow密码文件

在《Python绝技》这本书的第一个小程序首先展示了针对与unix系统中shadow文件密码的暴力破解的能力,因为之前只是对shadow文件停留在保存了用户密码的阶段,但并没有详细研究,所以周末两天特地花时间好好研究了一下。
1.passwd文件和shadow文件
在unix早些时候是没有/etc/shadow这个文件的。一个用户的所有信息都只是保存在/etc/passwd文件中,加密后的用户密码保存在了passwd文件的第二个字段中。那么为什么要产生shadow文件呢?
首先我们通过ls查看一下passwd文件的详细权限:
-rw-r--r-- 1 root root 1505 Mar 6 22:34 /etc/passwd
可以看出每个用户都是可读的,那么这不就把用户密码暴露给任何人了么?虽然是加过密的,但是这样也存在安全性问题。
现在的文件权限是这样的:(注意/usr/bin/passwd除了rwx权限外还有一个SetUID的s标识位)
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
---------- 1 root root 964 Mar 6 22:34 /etc/shadow
首先通过对shadow文件取消所有权限,保证了只有root才能对shadow文件进行读写(root是天神,没有特殊说明任何文件都在root的管辖之下)。那么普通用户修改密码时肯定要对shadow文件进行更改的啊?通过/usr/bin/passwd的s位实现。
普通用户的修改密码流程是这样的:
test用户调用/usr/bin/passwd命令修改自己的密码,因为passwd对任何用户都是可执行的,而且s位规定所有可执行的用户在执行这个命令时变身为root,所以此时test用户拿着root的权限去读写shadow文件,当命令执行完成后变身结束,test变失去root权限。可以看出经过对shadow文件的分离,既保证了普通用户对自己密码的修改,也保证了普通用户看不到加密后的密码串提升了安全性。
2.shadow文件的组成
root:$1$abcdefg$Qp6zr7K0tHxV79N9cCLSc1:16866:0:99999:7:::
帐号名称 :root
加密后的密码:$1$abcdefg$Qp6zr7K0tHxV79N9cCLSc1
上次修改密码的日期:16866
密码不可被变更的天数:0
密码需要被重新变更的天数:99999(99999表示不需要变更)  
密码变更前提前几天警告 :7
帐号失效日期 :无
帐号取消日期 :无
保留条目,目前没用  
3.shadow文件的密码部分
shadow文件的密码部分由三个部分组成,由‘$‘分割。
以上面root用户的密码为例,按照‘$‘分割后分别是加密方式(1),salt值(abcdefg),加密后的密码串(Qp6zr7K0tHxV79N9cCLSc1)。
首先看第一个加密方式,目前加密方式有6种,最常见的只有3种:
1:MD5加密,密文长度22
5:SHA-256加密,密文长度43
6:SHA-512加密,密文长度86
4.手动生成password字串(测试于centos6.5)
方法一:dovecot包中提供dovecotadm命令。
比如:doveadm pw -s SHA512-CRYPT,其中s参数可选多种加密方式,比如SHA512-CRYPT,SHA256-CRYPT,MD5-CRYPT。
方法二:openssl包中提供passwd子命令。
比如openssl passwd -1,但是我发现只支持md5。
方法三:默认的python中自带crypt库。

__import__("crypt").crypt("password","$1$abcdefg$") 1

如果你不想自己设置指定的salt值,可以使用crypt库的mksalt函数自动生成,且提供md5,sha256,sha512全方位的支持。

时间: 2024-10-11 11:57:34

Linux的shadow密码文件的相关文章

2.7 shadow 密码文件

#shadow文件存放用户的密码,分9段 hadoop:$6$Kb9ANEdp$Y9gOjslCKP8.QokDWso31JcsFXcG9E7aneTjcjd.u0XicwDO3pZ5Mxu8fAtqhttfUpPqnL5wl8nkQZYLtDXq01:16712:0:99999:7::: 第1段               用户名 第2段               密码 第3段               上次更改密码时间,从1970.1.1到上次更改密码的时间 第4段          

详细介绍Linux /etc/shadow文件

与Linux /etc/passwd文件不同,Linux /etc/shadow文件是只有系统管理员才有权利进行查看和修改的文件,系统管理员应该弄明白Linux /etc/shadow文件中每个字符段的相应的意义,清楚管理时的具体意义. Linux /etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生.它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开.这些字段是:登录名:加密口令:

Linux 三周第一次课(4月2日)Linux,windows 互传文件 用户配置文件密码 组管理

三周第一次课(4月2日) 2.27linux和windows互传文件3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理 Linux和windows文件互传 我通常使用的是ftp或者是其他文件管理方式 这里介绍一个办法,但是只能在xshell下使用, 安装 lrzsz工具包 安装好了之后就可以使用sz命令 +要传输的文件 如果是想从windows往linux传就可以使用 rz命令 overall 总结 可以使用xshell securecrt 不能使用putty 安装lrzsz工

linux命令4 find、三个时间属性、硬链接和软连接、用户名和密码文件、增加和删除用户组、usermod、su、sudo

find搜索命令 其他搜索命令如下: [[email protected] 333]# which ls alias ls='ls --color=auto' /bin/ls [[email protected] 333]# echo $PATH /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/usr/local/jdk1.6.0_23/b

[添加用户]解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或目录的访问权限命令,linux修改用户密码,usermod的ysuum安装包。飞

usermod的yum安装包: shadow-utils 将nobody用户添加到nogroup 组: usermod -g nogroup nobody cat /etc/passwd|grep nobody nobody:x:65534:65534:nobody:/var/lib/nobody:/bin/bash 第3个字段是65534:意思就是,UID(用户的ID)是500. 第4个字段是65534:意思就是.GID(用户的组ID)的500. 使用usermod -g nogroup no

Linux用户相关文件之密码文件

1.文件地址: /etc/shadow ----------. 1 root root 842 10月 6 13:09 /etc/shadow 2.文件内容: xiaol_1:$6$NdCAnK3y$yPNzIhLXfkrohbZd:17080:0:99999:7:::3.信息含义: 第1个字段:用户名称 第2个字段:加密密码 加密算法为SHA512算法 如果密码位是"!!"或"*"代表不能登录 第3个字段:密码最后一次修改日期 使用1970年1月1日为标准时间,每

Linux密码文件

(1).密码文件 [[email protected] ~]# head -3 /etc/shadow root:$6$kcgcu794R0VP3fDL$aYN8XUbtWvZ4QQtT2xVW.N2CgE3YLPdtnprAAtKZUgNdq8itUJEN6NoYQDarLUevcDCWrxMVId8b18ujwST1b0::0:99999:7::: bin:*:17632:0:99999:7::: daemon:*:17632:0:99999:7::: 内容格式如下,用冒号隔开,可以用man

Linux root用户密码重置,远程登陆,文件基本属性

忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 单用户模式 步骤如下: 重启linux系统 3 秒之内要按一下回车, 然后输入e 在 第二行最后边输入 single,有一个空格.具体方法为按向下尖头移动到第二行,按"e"进入编辑模式 kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ single 在后边加上single 回车 最后按"

Linux scp 免密码 传输文件

Linux scp 免密码 传输文件 背景介绍 最近项目是集群化部署(由 node1,node2,node3 三台 CentOS 7.4 的虚拟机构成). 但是,涉及到跨机器同步文件的问题,想通过写shell文件实现,用 crontab 设置定时任务,定时执行改脚本. 由于每次都需要输入密码,导致定时任务没法正常工作,因此,需要三台机器之间可以免密码互相访问. 建立SSH的信任关系 以实现 node1 免密码给 node2 scp传输文件为例说明,需要如下几个步骤: 1.生成 node1 的秘钥