灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4452回复:0

Linux密码文件passwd和shadow分析

楼主#
更多 发布于:2013-02-25 14:48

引言:与Linux密码密切相关的两个文件

一:关于/etc/passwd

关于/etc/passwd的内容理解

/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是我的系统中的/etc/passwd 的两行;

beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash

beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

linuxsir:x:501:502::/home/linuxsir:/bin/bash

第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan linuxsir

第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;

第三字段:UID ;请参看本文的UID的解说;

第四字段:GID;请参看本文的GID的解说;

第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;

第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir

第七字段:用户所用SHELL 的类型,beinanlinuxsir 都用的是 bash ;所以设置为/bin/bash;

关于UID 的理解:

UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID ,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs 可以查到,一般Linux发行版约定为60000; 在Linux 中,rootUID0,拥有系统最高权限;

UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID 的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinanUID 改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;

UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID 是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID ,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过susudo来实现;切不可随意让一个用户和root分享同一个UID

UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0

一般情况下,每个Linux的发行版都会预留一定的UIDGID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftpnobodyadmrpmbinshutdown等;

Fedora 系统会把前499 UIDGID 预留出来,我们添加新用户时的UID 500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UIDGID预留出来;以各个系统中/etc/login.defs中的 UID_MIN 的最小值为准; Fedora 系统 login.defsUID_MIN500,而UID_MAX 值为60000,也就是说我们通过adduser默认添加的用户的UID的值是50060000之间;而Slackware 通过adduser不指定UID来添加用户,默认UID 是从1000开始;

二:关于/etc/shadow

/etc/shadow 概说

/etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd 而产生的,这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd 不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作,权限如下:

-r——– 1 root root 1.5K 1016 09:49 /etc/shadow

/etc/shadow 的权限不能随便改为其它用户可读,这样做是危险的。如果您发现这个文件的权限变成了其它用户组或用户可读了,要进行检查,以防系统安全问题的发生;

如果我们以普通用户查看这个文件时,应该什么也查看不到,提示是权限不够:

[beinan@localhost ~]$ more /etc/shadow

/etc/shadow: 权限不够

/etc/shadow 的内容分析

/etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割;我们以如下的例子说明;

beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::

linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:

第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd shadow中用的用户记录联系在一起;这个字段是非空的;

第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;

第三字段:上次修改口令的时间;这个时间是从19700101日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;

第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;

第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;

第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;

第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;

第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的11日开始的天数),如果这个字段的值为空,帐号永久可用; www.atcpu.com

第九字段:保留字段,目前为空,以备将来Linux发展之用;

如果更为详细的,请用 man shadow来查看帮助,您会得到更为详尽的资料;

我们再根据实例分析:

beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::

linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:

第一字段:用户名(也被称之为登录名),在例子中有峡谷两条记录,也表示有两个用户beinanlinuxsir

第二字段:被加密的密码,如果有的用户在此字段中是x,表示这个用户不能登录系统,也可以看作是虚拟用户,不过虚拟用户和真实用户都是相对的,系统管理员随时可以对任何用户操作;

第三字段:表示上次更改口令的天数(距19700101),上面的例子能说明beinanlinuxsir这两个用户,是在同一天更改了用户密码,当然是通过passwd 命令来更改的,更改密码的时间距19700101日的天数为13072

第四字段:禁用两次口令修改之间最小天数的功能,设置为0

第五字段:两次修改口令间隔最多的天数,在例子中都是99999天;这个值如果在添加用户时没有指定的话,是通过/etc/login.defs来获取默认值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs来查看,具体的值;

第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;在例子中的值是7 ,表示在用户口令将过期的前7天警告用户更改期口令;

第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;在例子中,此字段两个用户的都是空的,表示禁用这个功能;

第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的11日开始的天数),如果这个字段的值为空,帐号永久可用;在例子中,我们看到beinan这个用户在此字段是空的,表示此用户永久可用;而linuxsir这个用户表示在距19700101日后13108天后过期,算起来也就是20051121号过期;哈哈,如果有兴趣的的弟兄,自己来算算,大体还是差不多的  

第九字段:保留字段,目前为空,以备将来Linux发展之用


喜欢0 评分0
游客

返回顶部