/ 中存储网

Linux系统的etc/passwd和etc/shadow文件作用详解

2016-09-20 14:02:10 来源:中存储网

/etc/passwd和/etc/shadow是两个非常重要的Linux用户及组管理文件,没有他们就没法登录系统的。那么/etc/passwd和/etc/shadow有什么区别呢?仔细看来:

一、/etc/passwd

/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式: 

name:password:uid:gid:comment:home:shell 

name 用户登录名 

password 用户口令。此域中的口令是加密的,常用x表示。当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要口令。 

uid 指定用户的 UID。用户登录进系统后,系统通过该值,而不是用户名来识别用户。 

gid GID。如果系统要对相同的一群人赋予相同的权利,则使用该值。 

comment 用来保存用户的真实姓名和个人细节,或者全名。 

home 指定用户的主目录的绝对路径。 

shell 如果用户登录成功,则要执行的命令的绝对路径放在这一区域中。它可以是任何命令。

如果/etc/passwd文件存放的是用户的信息,由6个分号组成的7个信息,解释如下 

(1):用户名。 

(2):密码(已经加密) 

(3):UID(用户标识),操作系统自己用的 

(4):GID组标识。 

(5):用户全名或本地帐号 

(6):开始目录 

(7):登录使用的Shell,就是对登录命令进行解析的工具。

例如:abc:x:501:501::/home/abc:/bin/bash

每一行都代表一个帐号, 有几行就代表有几个帐号在你的系统中!不过需要特别留意的是, 里头很多帐号本来就是系统中必须要的,我们可以简称他为系统帐号, 例如 bin, daemon, adm, nobody 等等,这些帐号是系统正常运作时所需要的,请不要随意删除呢! 

当然,为了加固Linux系统,我们可以对系统用户做一些科学的管理,比如不需要ftp服务,那么可以删除不必要的ftp用户,不需要ssh服务,那么删除ssh用户等。

二、/etc/shadow

如果查看/etc/shadow文件存放的特殊帐号信息如下: 

name:!!:13675:0:99999:7:::  

每一行给一个特殊帐户定义密码信息,每个字段用 : 隔开。 

字段 1 定义与这个 shadow 条目相关联的特殊用户帐户。 

字段 2 包含一个加密的密码。 

字段 3 自 1/1/1970 起,密码被修改的天数 

字段 4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”) 

字段 5 系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”) 

字段 6 密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”) 

字段 7 密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”) 

字段 8 该帐户被禁用的天数(-1 表示“该帐户被启用”) 

字段 9 保留供将来使用

如果查看/etc/shadow下存放的普通帐号信息如下: 

(1):帐号名称 

(2):密码:这里是加密过的,但高手也可以解密的。要主要安全问题(代!符号标识该帐号不能用来登录) 

(3):上次修改密码的日期 

(4):密码不可被变更的天数 

(5):密码需要被重新变更的天数(99999表示不需要变更) 

(6):密码变更前提前几天警告 

(7):帐号失效日期 

(8):帐号取消日期 

(9):保留条目,目前没用 

例如:abc:!!:14768:0:99999:7:::

更多关于/etc/passwd和/etc/shadow的资料

由于每个程序都需要取得 uid 与 gid 来判断权限的问题,所以, /etc/passwd 的权限必须要设定成为 -rw-r--r-- 这样的权限,在这样的情况下, 使用者的密码不就任何人都可以看到吗?即使这个档案内的密码栏是加密的, 坏心肠的朋友也可能利用暴力破解法去 try and error 找出您的密码资料......

因为这样的关系,所以后来发展出将密码移动到 /etc/shadow 这个档案分隔开来的技术, 而且还加入很多的密码限制参数在 /etc/shadow 里头呢!我们先来瞭解一下这个档案的构造吧! 我的 /etc/shadow 档案有点像这样:

root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::

bin:*:12959:0:99999:7:::

daemon:*:12959:0:99999:7:::

adm:*:12959:0:99999:7:::

基本上, shadow 同样以‘:’作为分隔符号,如果数一数,会发现共有九个栏位啊, 这九个栏位的用途是这样的:

1. 帐号名称:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行!

2. 密码:这个才是真正的密码,而且是 经过编码过的密码啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是‘很难’不等于‘不会’,所以, 这个档案的预设属性是‘-rw-------’或者是‘-r--------’,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登入的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个 * !嘿嘿!他就无法使用该帐号啰!直到他变乖了,再给他启用啊!

3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期, 不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦! 所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2005 年 1 月 1 日就是 12784 啦,瞭解了吗?

4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!

5. 密码需要重新变更的天数: 由于害怕密码被某些‘有心人士’窃取而危害到整个系统的安全,所以有了这个栏位的设计。 你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦! 不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!

6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时, 系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!’,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。

7. 密码过期的恕限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在‘必须变更密码的期限前,并没有变更你的密码!’ 那么该组密码就称为‘失效的密码’啰~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,呵呵!那么您的帐号就失效了!无法登入!

8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。 这个栏位会被使用通常应该是在‘收费服务’的系统中, 你可以规定一个日期让该帐号不能再使用啦!

9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。

举个例子来说好了,假如我的 dmtsai 这个使用者的密码栏如下所示:

dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:

这表示什么呢?要注意的是, 13025 是 2005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是:

* 最近一次更动密码的日期是 2005/08/30 (13025);

* 能够修改密码的时间是 5 天以后,也就是 2005/09/04 以前 dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:

You must wait longer to change your password

passwd: Authentication token manipulation error

* 使用者必须要在 2005/09/04 到 2005/10/29 之间的 60 天限制内去修改自己的密码,若 2005/10/29 之后还是没有变更密码时,该帐号就会宣告失效;

* 如果使用者一直没有更改密码,那么在 2005/10/29 之前的 7 天内,系统会警告 dmtsai 应该修改密码的相关资讯;例如当 dmtsai 登入时,系统会主动提示如下的资讯:

Warning: your password will expire in 5 days

* 如果该帐号一直到 2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在 2005/10/31 以前继续登入;

* 如果使用者在 2005/10/29 以前变更过密码,那么那个 13025 的日期就会跟著改变,因此, 所有的限制日期也会跟著相对变动喔!^_^

* 无论使用者如何动作,到了 13125 ,大约是 2005/12/8 左右,该帐号就失效了~

透过这样的说明,您应该会比较容易理解了吧?! ^_^

Tips:

常常听到:我的密码忘记或者被更动了?怎么办?

有的时候会发生这样的情况,就是说,你的 root 密码忘记了!要怎么办?重新安装吗?另外, 有的时候是被入侵了, root 的密码被更动过,该如何是好?

这个时候就必须要使用到 /etc/shadow 这个资料了!我们刚刚知道密码是存在这个档案中的, 所以只要你能够以各种可行的方法开机进入 Linux ,例如单人维护模式,或者是以 live CD (KNOPPIX) 来进入 Linux 系统。之后,将硬碟顺利挂载,然后进入 /etc/shadow 这个档案中,将 root 的密码这一栏全部清空!然后再登入 Linux 一次,这个时候 root 将不需要密码 (有的时候需要输入空白字元) 就可以登入了!这个时候请赶快以 passwd 设定 root 密码即可。