/etc/passwd和/etc/shadow文件解析

一,/etc/passwd

1,在讲用户管理前先来看看/etc/passwd文件。

[root@localhost~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

2,现在来慢慢解释每个字段含义。原文可以参考#man 5 passwd

Passwd文件结构account:password:UID:GID:GECOS:directory:shell

root:x:0:0:root:/root:/bin/bash

为例

Account:用户的名称,如例子中的root

Password:用户密码,我们看到这里只显示x,不是指密码就为x,而是表示该密码已经

      被移动到shadow中去了(这个后面会讲到)。为什么这么做呢?早期的linux

      系统密码是放在passwd文件中的,但因为这个文件是要被所有程序都能够

      读取的,所以很容易造成资料被窃取。后来就将密码属性值放到/etc/shadow

      件中去。所以我们看到这里只显示x

UID:用户ID,这个不用解释,linux系统还是通过ID来判断用户大。

    需要注意的是当uid0时表示系统管理员。所以将其他用户id改为0,将

    使其他人改为管理员。

    一般讲1-499 保留给系统使用。更细划分是将1-99会保留给系统预设的账号。

     100-499则保留给系统一些服务来使用。

GID:组ID。指明用户所属组。有关组的概念待会再讲。例子中root属于0组。

GECOS:一般说明用户信息的,如电话、地址等附属信息。

Directory:即我们常说的家目录,例子中root家目录/root

Shell:用来指明用户登录时预设使用的bash。例子中预设使用/bin/bash

     注意,我们还可以通过这个属性让用户无法登录,达到某些用户无法登录

     的目的。如将shell指向/sbin/nologin。为甚么需要这样做呢?如提供打印服务

     可以使用系统资源,但没有必要登录,就可以通过此方法实现。

二、/etc/shadow

    1,同样先来看下shadow长什么样子。

[root@localhost ~]# more /etc/shadow
root:$6$dzsbXlAsouy1Rv8y$sjzsbZhORDfSX9eqZRvYh1IA1urCeWkSg5EH2MpeufDj3HozrthVpqxOtNjEpyBxurhG23Vm85y1Z1rfEgKIh/:16665:0:99999:7:::
bin:*:15980:0:99999:7:::

    2,同样可以看到每个属性用“:”来分开。原文解释可以用#man 5 shadow来查看。

     loginname:登录名。即/etc/passwd中的account。例子中root

     encryptedpassword:加密的密码。上节讲过密码信息保存shadow中,就保存在这个

    字段中。可以看到例子中是一段很没思路的字符。这是因为密码

     通过加密的。使用单向加密算法,这样别人就无法逆向破解了。

     细化看$6即代表使用加密算法。通过上面显示可以看到用户bin

     的密码栏只用个“*”,表示什么意思呢?*表示账户不能用来登录。

date of last password change:最近更改密码日期。例子中16665表示从197011日开

       始计算的日期时间差。即表示2015818日。

minimum password age:最小密码寿命?实际指若需要改密码至少要经过多少天。或者可以

       可以理解为在这些天内密码不允许更改。注意0表示随时可以更改。

maximum password age:最大密码寿命?可以这么理解,为了密码的安全,需要定期修改

       密码,通过设定密码寿命,过期后提醒用户更新密码。

password warning period:密码过期前几天提醒用户更新密码。前面说过密码是有寿命的,

       在寿终前需要提醒用户更新密码,这个参数就是设定提醒天数的。

password inactivity period:密码不可用期限。实际上密码寿终后是还可以继续使用的,在

       它下地狱前还是有魂魄的,魂魄还能呆多久呢?就是这个参数决定的。

account expiration date:账户过期时间。这才是最终过期时间。就是说,在用户密码过期后

      后用户还不更新密码的话,将到这个日期后用户将真的无法使用了。

reserved field:保留位。

三、实践

1,添加一个用户及密码

[root@localhost ~]# useradd test #密码为test

2,查看passwd文件

test:x:2009:2011::/home/test:/bin/bash

3,查看shadow文件

test:$6$zdoUUPZ8$upYc997cVApM6ywWd10NkNtnFJnliwd5aouoNv5fOb72JWj/VtvV69YCJtA1bxHHPlRr7NjVpAdFE0HUa69db1:16675:0:99999:7:::

4,修改shadow文件后

test:$6$zdoUUPZ8$upYc997cVApM6ywWd10NkNtnFJnliwd5aouoNv5fOb72JWj/VtvV69YCJtA1bxHHPlRr7NjVpAdFE0HUa69db1:16675:5:3:7:::

注意:默认shadow是没有修改权限的,我这是使用root用户添加写权限才修改的。

5,使用账号test登录,提醒如下:

Warning: your password will expire in 3days

6,尝试修改密码

[test@localhost ~]$ passwd

Changing password for user test.

Changing password for test.

(current) UNIX password:

You must wait longer to change yourpassword

7,修改上次修改密码时间后,重新使用test登录,提醒用户修改密码。

You are required to change your passwordimmediately (password aged)

Last login: Fri Aug 28 15:42:05 2015 from192.168.1.106

WARNING: Your password has expired.

You must change your password now and loginagain!


你可能感兴趣的:(linux,passwd,shadow,shadow,man,man,/etc/passwd,/etc/shadow)