Linux 的 passwd 和 shadow

/etc/passwd

Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。

Linux 系统中默认会有多个的用户,这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

/etc/passwd每行各字段解释:

每行用户信息都以 ":" 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

用户名,就是一串代表用户身份的字符串。

密码,"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中,虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。

UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。

UID 为 0 就代表这个账号是管理员账号。

UID 为1~499代表系统用户(伪用户),此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号,100~499 分配给有系统账号需求的用户。

UID 为500~65535代表普通用户。

GID,即组ID,表示用户初始组的组 ID 号。

描述性信息,这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。

主目录,也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。

默认的Shell,shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。

通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。

在 /etc/passwd 文件中,大家可以把这个字段理解为用户登录之后所拥有的权限。如果这里使用的是 bash 命令解释器,就代表这个用户拥有权限范围内的所有权限。

//它使用的是 bash 命令解释器,那么这个用户就可以使用普通用户的所有权限。
root:x:0:0:root:/root:/bin/bash

//如果使用sbin/nologin命令解释器,那么这个用户就不能登录了,sbin/nologin是禁止登录的 Shell
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

/etc/shadow

/etc/shadow 文件用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限。

同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 ":" 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

用户名

就是一串代表用户身份的字符串。

加密密码

这里保存的是真正加密的密码。所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的

最后一次修改时间

此字段表示最后一次修改密码的时间

最小修改时间间隔

也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。

密码有效期

为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

密码需要变更前的警告天数

与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。

密码过期后的宽限天数

也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

账号失效时间

同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!

保留

这个字段目前没有使用,等待新功能的加入。

shadow密文格式

当我们通过任意文件下载或者目录穿越下载或者读取到/etc/shadow文件时,可以对shadow中加密的密码进行爆破获取明文密码。

shadow文件加密的密码具有固定格式:

$id$salt$encrypted

id:表示加密算法,1 代表 MD5,5 代表 SHA-256,6 代表 SHA-512。

salt:表示密码学中的 Salt,由系统随机生成 。

encrypted:表示密码的 hash。

冒号后面的数值是一些日期和密码修改间隔天数的信息,可以不用管,以上述示例中 root 账号为例:

root:$6$a2nlbRtmvGBTUYo2$9M9ATvJjVKHkgdTM.MpRe8Ym9rjIKK1WeE8sTOll3CRrOmNl9CbUSBkuVUx3k2N8GooDufYDv8ejjYsscdnSN/:18806:0:99999:7:::

id=6,即使用SHA-512哈希算法

salt=a2nlbRtmvGBTUYo2

encrypted=9M9ATvJjVKHkgdTM.MpRe8Ym9rjIKK1WeE8sTOll3CRrOmNl9CbUSBkuVUx3k2N8GooDufYDv8ejjYsscdnSN/

破解shadow密码

我们可以直接使用 john 去破解 shadow 文件:

$ sudo apt install john    //安装John the Ripper

$ john
John the Ripper password cracker, version 1.8.0
Copyright (c) 1996-2013 by Solar Designer
……
$ sudo john ./shadow      //暴力破解获取的shadow文件中的账号密码

root@iZ8vb9momvxgy7b10w615yZ:~# john
Created directory: /root/.john
John the Ripper password cracker, version 1.8.0
Copyright (c) 1996-2013 by Solar Designer
Homepage: http://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]
--single                   "single crack" mode
--wordlist=FILE --stdin    wordlist mode, read words from FILE or stdin
--rules                    enable word mangling rules for wordlist mode
--incremental[=MODE]       "incremental" mode [using section MODE]
--external=MODE            external mode or word filter
--stdout[=LENGTH]          just output candidate passwords [cut at LENGTH]
--restore[=NAME]           restore an interrupted session [called NAME]
--session=NAME             give a new session the NAME
--status[=NAME]            print status of a session [called NAME]
--make-charset=FILE        make a charset, FILE will be overwritten
--show                     show cracked passwords
--test[=TIME]              run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..]  [do not] load this (these) user(s) only
--groups=[-]GID[,..]       load users [not] of this (these) group(s) only
--shells=[-]SHELL[,..]     load users with[out] this (these) shell(s) only
--salts=[-]N               load salts with[out] at least N passwords only
--save-memory=LEVEL        enable memory saving, at LEVEL 1..3
--node=MIN[-MAX]/TOTAL     this node's number range out of TOTAL count
--fork=N                   fork N processes
--format=NAME              force hash type NAME: descrypt/bsdicrypt/md5crypt/
                           bcrypt/LM/AFS/tripcode/dummy/crypt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值