linux的shadow文件

摘要:
普通用户的修改密码流程是这样的:test用户调用/usr/bin/passwd命令修改自己的密码,因为passwd对任何用户都是可执行的,而且s位规定所有可执行的用户在执行这个命令时变身为root,所以此时test用户拿着root的权限去读写shadow文件,当命令执行完成后变身结束,test变失去root权限。

在《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文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gdb命令手册(转)基于CC2530/CC2430 的温度采集系统--DS18B20下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux 基础教程 39-作业控制

    在Linux系统中,作业是由一个或多个关联进程组成的。用户可以运行多个作业并可以在作业间切换。而作业控制则是对作业的行为进行控制,允许用户对作业的前后台的进行切换和终止操作等。作业相关的控制命令如下所示: 后台符号(&):让作业在后台运行 快捷键Ctrl+Z:让作业切换到后台并停止运行 命令jobs:显示作业列表 命令fg:将作业切换到前...

Linux删除文件过程解析

目录 Linux删除文件过程解析 1. 概述 2. 源码分析 3. rm对I/O影响 参考文献 Linux删除文件过程解析 1. 概述 当我们执行rm命令删除一个文件的时候,在操作系统底层究竟会发生些什么事情呢,带着这个疑问,我们在Linux-3.10.104内核下对ext4文件系统下的rm操作进行分析。rm命令本身比较简单,但其在内核底层...

Boot loader: Grub进阶[转]

Boot loader: Grub进阶 本文记录grub的一些进阶配置 关於核心功能当中的 vga 配置 事实上,你的 tty1~tty6 除了 80x24 的解析度外,还能够有其他解析度的支持喔!但前提之下是你的核心必须支持 FRAMEBUFFER_CONSOLE 这个核心功能选项才行。如何确定有没有支持呢?你可以查阅 /boot/config-2....

SecureCRT连接linux设置vim显示颜色

只需要两个步骤: 1) 选项 --> 会话选项 --> 终端 --> 仿真 --> 勾选“ANSI 颜色”。 2) 在.bashrc中添加:export TERM=xterm 可用如下命令: [root@host1 conf]# echo "export TERM=xterm" >> ~/.bashrc [root@...

Linux进程管理

1.介绍 1.什么是进程 比如: 开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。总结一句话就是: 当我们运行一个程序,那么我们将运行的程序叫进程。PS1: 当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限。PS2: 在进程运行的过程中,系统会有各种指标来表示当前运行的状态。 2.程序和进程的区别 1.程序是数据和指令...

Linux wc文件统计

原文链接 linux下如何统计一个目录下的文件个数以及代码总行数的命令知道指定后缀名的文件总个数命令:find . -name "*.cpp" | wc -l知道一个目录下代码总行数以及单个文件行数:find . -name "*.h" | xargs wc -llinux统计文件夹中文件数目第一种方法:ls -l|grep “^-”|wc -lls -l...