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

#学习鸟哥的linux私房菜

/etc/passwd的文件构造:

dahu@dahu-OptiPlex-3046:~/myfile/VideoFile$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
#帐号名称:密码:UID:GID:用户信息说明:主文件夹:Shell

每一行为一个帐号以冒好:作为间隔,每个代表的意思是

1.帐号名称,用来对应uid的,root就是0

2.密码,密码数据现在/etc/shadow 中,所以这里会有一个『x 』

3.UID

4.GID

这个与/etc/group 有关!其实 /etc/group 与 /etc/passwd 差不多,用来规定组名与GID 的关系

5.用户信息说明列

6.主文件夹

这是用户的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登陆之后,就会立刻跑到 /root 目录里头啦!呵呵! 如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其他的硬盘去该怎么作? 没有错!可以在这个字段进行修改呦!默认的用户家目录在 /home/yourIDname

7.shell

户登陆系统后就会取得一个 Shell 来与系统的核心沟通以进行用户的操作任务。那为何默认 shell 会使用 bash 呢?就是在这个字段指定的啰! 这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法取得 shell 环境的登陆动作!那就是 /sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件账号者的数据呢!

/etc/shadow文件构造

dahu@dahu-OptiPlex-3046:~/myfile/VideoFile$ sudo head /etc/shadow
[sudo] password for dahu: 
root:$6$usxhQ4YH$XhyLZjh0.KaAUn8/ucI8nyBmNr1oNF9oacjjenEn4lQK/X//4aUkYosTSpuHwpt9Es/73O7aQ8qXFb5wU0FAV1:17347:0:99999:7:::
daemon:*:16911:0:99999:7:::
bin:*:16911:0:99999:7:::
sys:*:16911:0:99999:7:::
#帐号名称:密码:最近更改密码的日期:密码不可被更改的天数:密码需要重新更改的天数:密码需要更改期限前的警告天数:密码过期后的帐号宽限时间:帐号失效日期:保留

1.和/etc/passwd对应

2.这个字段内的数据才是真正的密码,而且是经过编码的密码 (加密) 啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密过的口令很难被解出来, 但是『很难』不等于『不会』,所以,这个文件的默认权限是『-rw-------』或者是『-r--------』,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个文件的权限呢

3.最近更改密码的日期

这个字段记录了『更动口令那一天』的日期,不过,很奇怪呀!在我的例子中怎么会是 14126 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 而累加的日期,1971 年 1 月 1 日则为 366 啦! 得注意一下这个数据呦!上述的 14126 指的就是 2008-09-04 那一天,至于想要知道某个日期的累积日数, 可使用如下的程序计算:

[root@www ~]# echo $(($(date --date="2008/09/04" +%s)/86400+1))
14126


4.口令不可被更动的天数:(与第 3 字段相比)上述命令中,2008/09/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来的累积总秒数。 由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。

第四个字段记录了:这个账号的口令在最近一次被更改后需要经过几天才可以再被变更!如果是 0 的话, 表示口令随时可以更动的意思。这的限制是为了怕口令被某些人一改再改而设计的!如果配置为 20 天的话,那么当你配置了口令之后, 20 天之内都无法改变这个口令呦!

5.口令需要重新变更的天数:(与第 3 字段相比)
经常变更口令是个好习惯!为了强制要求用户变更口令,这个字段可以指定在最近一次更改口令后, 在多少天数内需要再次的变更口令才行。你必须要在这个天数内重新配置你的口令,否则这个账号的口令将会『变为过期特性』。 而如果像上面的 99999 (计算为 273 年) 的话,那就表示,呵呵,口令的变更没有强制性之意。

6.口令需要变更期限前的警告天数:(与第 5 字段相比)
当账号的口令有效期限快要到的时候 (第 5 字段),系统会依据这个字段的配置,发出『警告』言论给这个账号,提醒他『再过 n 天你的口令就要过期了,请尽快重新配置你的口令呦!』,如上面的例子,则是口令到期之前的 7 天之内,系统会警告该用户。

7.口令过期后的账号宽限时间(口令失效日):(与第 5 字段相比)
口令有效日期为『升级日期(第3字段)』+『重新变更日期(第5字段)』,过了该期限后用户依旧没有升级口令,那该口令就算过期了。 虽然口令过期但是该账号还是可以用来进行其他工作的,包括登陆系统取得 bash 。不过如果口令过期了, 那当你登陆系统时,系统会强制要求你必须要重新配置口令才能登陆继续使用喔,这就是口令过期特性。

8账号失效日期:
这个日期跟第三个字段一样,都是使用 1970 年以来的总日数配置。这个字段表示: 这个账号在此字段规定的日期之后,将无法再使用。 就是所谓的『账号失效』,此时不论你的口令是否有过期,这个『账号』都不能再被使用! 这个字段会被使用通常应该是在『收费服务』的系统中,你可以规定一个日期让该账号不能再使用啦!

9.保留

举例

假如我的 dmtsai 这个用户的口令栏如下所示:

dmtsai:$1$vyUuj.eX$omt6lKJvMcIZHx4H7RI1V.:14299:5:60:7:5:14419:

这表示什么呢?先要注意的是 14299 是 2009/02/24 。所以 dmtsai 这个用户的口令相关意义是:

  • 由于口令几乎仅能单向运算(由明码计算成为口令,无法由口令反推回明码),因此由上表的数据我们无法得知 dmstai 的实际口令明文;

  • 此账号最近一次更动口令的日期是 2009/02/24 (14299);

  • 能够再次修改口令的时间是 5 天以后,也就是 2009/03/01 以前 dmtsai 不能修改自己的口令;如果用户还是尝试要更动自己的口令,系统就会出现这样的信息:
    You must wait longer to change your password
    passwd: Authentication token manipulation error
    画面中告诉我们:你必须要等待更久的时间才能够变更口令之意啦!

  • 由于口令过期日期定义为 60 天后,亦即累积日数为: 14299+60=14359,经过计算得到此日数代表日期为 2009/04/25。 这表示:『使用者必须要在 2009/03/01 到 2009/04/25 之间的 60 天限制内去修改自己的口令,若 2009/04/25 之后还是没有变更口令时,该口令就宣告为过期』了!

  • 警告日期设为 7 天,亦即是口令过期日前的 7 天,在本例中则代表 2009/04/19 ~ 2009/04/25 这七天。 如果用户一直没有更改口令,那么在这 7 天中,只要 dmtsai 登陆系统就会发现如下的信息:
  • Warning: your password will expire in 5 days

     

  • 如果该账号一直到 2009/04/25 都没有更改口令,那么口令就过期了。但是由于有 5 天的宽限天数, 因此 dmtsai 在 2009/04/30 前都还可以使用旧口令登陆主机。 不过登陆时会出现强制更改口令的情况,画面有点像底下这样:
    You are required to change your password immediately (password aged)
    WARNING: Your password has expired.
    You must change your password now and login again!
    Changing password for user dmtsai.
    Changing password for dmtsai
    (current) UNIX password:

    你必须要输入一次旧口令以及两次新口令后,才能够开始使用系统的各项资源。如果你是在 2009/04/30 以后尝试以 dmtsai 登陆的话,那么就会出现如下的错误信息且无法登陆,因为此时你的口令就失效去啦!
    Your account has expired; please contact your system administrator
  • 如果使用者在 2009/04/25 以前变更过口令,那么第 3 个字段的那个 14299 的天数就会跟着改变,因此, 所有的限制日期也会跟着相对变动喔!^_^

  • 无论使用者如何动作,到了 14419 (大约是 2009/07/24 左右) 该账号就失效了~

透过这样的说明,您应该会比较容易理解了吧?由于 shadow 有这样的重要性,因此可不能随意修改喔! 但在某些情况底下你得要使用各种方法来处理这个文件的!举例来说,常常听到人家说:『我的口令忘记了』, 或者是『我的口令不晓得被谁改过,跟原先的不一样了』,这个时候怎么办?

    • 一般用户的口令忘记了:这个最容易解决,请系统管理员帮忙, 他会重新配置好你的口令而不需要知道你的旧口令!利用 root 的身份使用 passwd 命令来处理即可。

    • root 口令忘记了:这就麻烦了!因为你无法使用 root 的身份登陆了嘛! 但我们知道 root 的口令在 /etc/shadow 当中,因此你可以使用各种可行的方法启动进入 Linux 再去修改。 例如重新启动进入单人维护模式(第二十章)后,系统会主动的给予 root 权限的 bash 接口, 此时再以 passwd 修改口令即可;或以 Live CD 启动后挂载根目录去修改 /etc/shadow,将里面的 root 的口令字段清空, 再重新启动后 root 将不用口令即可登陆!登陆后再赶快以 passwd 命令去配置 root 口令即可。

 

posted @ 2017-08-07 15:22  dahu1  Views(1488)  Comments(0Edit  收藏  举报