Linux账号密码相关 /etc/passwd和/etc/shadow文件详解

Linux系统的账户密码

在Linux系统中所有的账户密码都存放在两个文件夹中:/etc/passwd和/etc/shadow
例如在我们登入shell时,仅输入了账号密码,那么系统内部发生了什么事情呢:

  • 系统先进入/etc/passwd寻找是否存在你输入的账号,如果没有就退出并提示错误,如果有,就将数据读取出来进行第二步
  • 再来核对密码表,系统会进入/etc/shadow寻找对应的账号,并核对密码是否与输入相同
  • 如果一切ok,则登入成功

那么这两个文件夹里到底有什么数据呢

/etc/passwd

root@zero ~:# cat /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
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
		#以下部分省略

该文件下每一行代表一个账户,除了系统管理员(第一个root)和一些个人账户之外,其他账户都是系统运行必不可少的东西,这些也被称为系统账户。
注:一定不要删除系统账户 系统会挂的!!!
注:一定不要删除系统账户 系统会挂的!!!
注:一定不要删除系统账户 系统会挂的!!!

看上图中的五行案例,可以观察到它们都以 : 为分界线,并且被分成了七个字段,我们来仔细说一说这七个字段。

  1. 账户名称
    就是该系统里拥有的账户名称
  2. 账户密码
    早期的时候Unix将密码放在这个位置,但因为这个文件的权限是所有程序可读,容易造成安全问题,所以密码被放在了/etc/shadow里。这里就用【x】代替
  3. UID
    这个是用户标识符,UID全称User ID,顾名思义user的ID,计算机是个只认识0和1的机器,但我们的账户是英文,他怎么识别和区分每个不同的账户呢,就是通过这个UID来识别的,通过上图可以发现这个UID就是一串数字,这就像每个人的身份证号一样,是一串唯一的数字,那这串数字有什么特性呢,下面用一个表格展示
UID范围 该UID用户的特性
0(系统管理员) UID等于0的时候,表示你是系统管理员,拥有root权限,所以将UID字段改为0也是获得root权限的一个办法,但不建议,一台机子多个账户的UID为0,容易导致系统管理员紊乱。
1~999(系统账户) 这个字段的UID是系统保留下来的,他的权限与特性其实除了系统管理员之外没有其他区别,但系统为了启动一些服务预留下了这部分UID,而这部分又可以分为两部分,1~200:有Linux发行版自行创建的系统账户;201~999:若用户有系统账户需求时,可使用这部分UID。
>1000(可登入账户) 这部分UID提供给一般用户使用
  1. GID
    与UID相差无几,GID全称Group ID,标识用户组用的
  2. 用户信息说明
    关于账户的一些信息的一些记录,暂时可忽略
  3. 家目录
    表示用户的家目录,如上图,root的家目录就是/root
  4. shell
    用户登入系统之后,用户就需要通过系统的shell来与系统的内核沟通,而这个就是用户默认的shell的版本,如上图root默认使用的shell就是bash,常见的shell版本还有:sh(BourneShell)、csh(CShell)、ksh(KornShell)、tcsh(TENEX/TOPS-20typeCShell)等,

/etc/shadow

root@zero ~:# cat /etc/shadow
root:!:18304:0:99999:7:::
daemon:*:18113:0:99999:7:::
bin:*:18113:0:99999:7:::
sys:*:18113:0:99999:7:::
sync:*:18113:0:99999:7:::
	#以下部分省略

同样,shadow也是以 : 为分隔符,共分成了就个字段,每个字段的详解:

  1. 账号名称
    与passwd对应,第一个字段也是账号名称
  2. 密码
    /etc/shadow文件中的这个字段里的数据存放着真正的密码,不过出于安全考虑,,这是经过加密的密码存储
    1. 如果为空,则对应用户没有口令,登录时不需要口令;
    2. 星号代表帐号被锁定;
    3. 双叹号表示这个密码已经过期了;
    4. 6

      6

      6
      开头的,表明是用SHA-512加密;
    5. 1

      1

      1
      表明是用MD5加密;
    6. 2

      2

      2
      是用Blowfish加密;
    7. 5

      5

      5
      是用 SHA-256加密;
  3. 最近一次修改密码的日期
    这个字段记录了最后一次修改密码的日期,那为什么是数字呢,其实这个日期是以1970年1月1日开始到你最后一次修改密码的总天数,例如上图,我都root最后一次修改密码距1970年1月1日18304天。
  4. 密码不可被更改的天数
    这个字段记录了你的密码从最后一次更改开始多少天之内不能再更改,如果是0,则表示随时可以更改。
  5. 密码需要重新修改的天数
    这个数字表示从密码被最后一次更改了之后多少天需要重新更改密码,并会再更改日期到来的前几天给出预警,否则该账户的密码会过期,如果为99999表示没有此要求。
  6. 密码修改前的预警天数
    这个数字表示第五个字段中密码需要修改的最后期限之前的多少天给出预警,如上图7表示,密码需要修改的前7天提醒用户更改密码。
  7. 密码过期后的宽限日期
    在第五个字段要求的更改密码的日期之前并没有更改密码,则密码将会过期,但不会马上失效,在这个字段表示过期后仍然可以用的天数,这个天数一过则密码失效。
  8. 账户失效日期
    这个字段与第三个字段一样是从1970年1月1日开始的总天数,到了这个日期,则密码失效,尽管密码并没有过期,也会直接失效。
  9. 保留
    这个字段是保留字段,以待以后增添新功能用的。

文件权限

既然这两个文件如此重要,那直接这样存放是否会很危险呢,这个倒不必过于担忧,我们可以看一下这两个文件的权限便知
在这里插入图片描述
我们可以看到这shadow文件其他人是不具备读写权限的,所以,一定不能轻易改写这两个文件的权限,可能会带来大问题。


版权声明:本文为a_loser_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>