在《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全方位的支持。

linux的shadow文件的更多相关文章

  1. linux /etc/shadow文件详解

    struct spwd { char *sp_namp; /* user login name */ char *sp_pwdp; /* encrypted password */ long int ...

  2. linux下/etc/passwd和/etc/shadow文件

    /etc/passwd文件中保存的是用户的账号信息,而/etc/shadow文件中保存的是用户的口令信息. 一 /etc/passwd 一个用户对应着该文件中一行记录,一行记录由若干个字段组成,字段之 ...

  3. Linux中/etc/passwd文件与/etc/shadow文件解析.

    此文章转载自"慧可",用来学习. 1. /etc/passwd文件 1.1 /etc/passwd文件内容格式 用户名: 密码 : uid  : gid :用户描述:主目录:登陆s ...

  4. Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)

    一. 概述 linux安全系统的核心是用户账户. 创建用户时会分配用户ID(UID). UID是唯一的,但在登录系统时不是用UID,而是用登录名.在讲文件权限之之前,先了解下linux是怎样处理用户账 ...

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

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

  6. linux用户帐号管理/etcpasswd 和/etc/shadow文件

    #学习鸟哥的linux私房菜 /etc/passwd的文件构造: dahu@dahu-OptiPlex-:~/myfile/VideoFile$ head /etc/passwd root:x:::r ...

  7. (转)linux口令相关文件(/etc/passwd和/etc/shadow)

    在linux中,口令文件在/etc/passwd中,早期的这个文件直接存放加密后的password,前两位是"盐"值,是一个随机数.后面跟的是加密的password.为了安全,如今 ...

  8. Linux用户影子文件——shadow

    Linux使用不可逆的加密算法(如MD5,SHA1等)来加密口令.和/etc/passwd类似,/etc/shadow文件中每条记录用冒号“:”分隔,形成9个域,格式如下所示: username:pa ...

  9. Linux中/etc下面passwd和shadow文件介绍

    1./etc/passwd root@root:~# cat /etc/passwd root:x:::root:/root:/bin/bash daemon:x:::daemon:/usr/sbin ...

随机推荐

  1. mysql:Cannot proceed because system tables used by Event Scheduler were found damaged at server start

    mysql 5.7.18 sqlyog访问数据库,查看表数据时,出现 Cannot proceed because system tables used by Event Scheduler were ...

  2. JSR 整理、翻译

    https://jcp.org/en/jsr/all https://github.com/search?l=Java&q=JSR&type=Repositories

  3. centos7 快速安装 mariadb(mysql)

    从最新版本的linux系统开始,默认的是 Mariadb而不是mysql! 使用系统自带的repos安装很简单: yum install mariadb mariadb-server systemct ...

  4. Docker 下载镜像慢的问题解决方法

    让你火箭般的速度下载docker镜像! 的冷漠度 百家号17-11-1713:09 因为有墙的原因所以在国内下载docker镜像的速度非常慢,有时候是几kb每秒,那个蛋疼的等待,真是谁等谁知道!下面我 ...

  5. 如何用Python计算Softmax?

    Softmax函数,或称归一化指数函数,它能将一个含任意实数的K维向量z"压缩"到另一个K维实向量\(\sigma{(z)}\)中,使得每一个元素的范围都在(0,1)之间,并且所有 ...

  6. 数据库的范式,第一、二、三、四、五范式、BC范式

    数据库的规范化(上一篇博客有写到)的程度不同,便有了这么多种范式.数据库范式是数据库设计必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库,甚至设计出错误误的数据库.课本中的定义比较抽 ...

  7. 微信内置浏览器submit函数无效的问题

    在表单提交button被点击时.触发提交函数,代码例如以下: <form id="frm_photo" enctype="multipart/form-data&q ...

  8. 【转】ASP.NET中验证控件的使用

    前言: 前几日,无奈用JS判断控件的有效性,发现的确是一件费力.费神的事情!特别是针对邮件格式.邮政编码等的关于正则表达式的JS验证(其中涉及正则表达式的比较等,较烦~).其实对于这些常用的控件有效性 ...

  9. 关联规则挖掘算法之Apriori算法

    Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集. 关于这个算法有一个非常有名的故事:"尿布和啤酒".故事是 ...

  10. MATLAB 画柱状图(/直方图)修改横坐标名称并使其横着显示

    使用MATLAB 画柱状图 ,即bar (x,y),其横坐标是默认 1.2.3.4.……的 % --v1 y1=[asum1,asum2,asum3,asum4,asum5,asum6,asum7,a ...