linux学习记录:用户与/etc/passwd与/etc/shadow

Posted 河边小咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习记录:用户与/etc/passwd与/etc/shadow相关的知识,希望对你有一定的参考价值。

Linux学习记录:用户与/etc/passwd与/etc/shadow

  • 这部分内容也是在实习中接触到的,其中关于各个伪用户关联的内容,我都一一进行了查询,于是记录一下相关内容,方便日后查看。

一、/etc/passwd

  这个文件中储存了系统中的各个用户,它记录了用户的一些基本属性。如下图,其中每一行都是一个用户。

  可以很明显的看出来每一行的开头都是一个用户名,而各个字段直接之间是由:来进行分隔的。其中字段格式与含义如下:

注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释器
  • 注册名
      用于区分不同的用户。在同一系统中注册名是惟一的,且用户名是区分大小写的。

  • 口令
      通俗来讲就是密码,用来验证用户的合法性。但是目前来看,现在的口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个x来代替,而真正的口令储存在/etc/shadow中。所以可以看到上图中,第二个字段的内容均为 x

  • 用户标识号
      英文缩写叫做UID,它是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用 UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要。而对于用户来说注册名使用起来更方便。在某些特定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。
      在find命令中可以使用-uid来对用户标识号进行检索,例如-uid +0即为检索所有UID大于0的内容。
      在linux系统中(linux7及以上),UID为0的即为管理员用户,UID在1~999的为系统用户,UID在1000及往上的为普通用户。所以一个很简单的给普通用户管理员权限的方法就是把他的UID改为0。

  • 组标识号
      英文缩写叫做GID,是用户的工作组标识,而每个用户可以同时属于多个组。在/etc/passwd文件中指定一个用户归属的基本组,而在/etc/group文件中指明一个组所包含的用户。

  • 描述性信息
      这个字段包含用户的一些信息,可以算作一个小备注。就我的体验来看没有什么。

  • 用户主目录
      这个字段标明了各个用户的个人主目录。在shell中可以通过cd ~来进入自己的个人主目录。
      就一般的规则来看,root用户的个人主目录为/root,而普通用户的个人主目录为/home下的同用户名目录。

  • 命令解释器
      这个字段的内容是指定用户的shell程序,可以看到上图中root的shell为/bin/bash。通过命令cat /etc/shells可以查看本系统下支持的shell。

二、/etc/shadow

  这个文件中储存了系统中的各个用户的密码信息,被称为"影子文件"。

  可以很明显的看出来每一行的开头都是一个用户名,而各个字段直接之间也是由:来进行分隔的。其中字段格式与含义如下:

用户名 : 加密密码 : 最后一次修改时间 : 最小修改时间间隔 : 密码有效期 : \\
密码需要变更前的警告天数 : 密码过期后的宽限时间 : 账号失效时间 : 保留字段
  • 用户名
      和上文中passwd文件中的用户名含义一样,也是用于区分不同的账户。

  • 加密密码
      这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。
      而且这部分加密后的密码是不能更改的,更改后会无法登录。当使用usermod -L命令禁用账户时,也是在这部分最前面加上了!来达到使账户无法登录的目的。
      所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。

星号代表帐号被锁定,将无法登录;双叹号表示这个密码已经过期了, 
如果是\\$x\\$xxxxxxxx\\$的形式,则代表密码正常。

$6$ 表明是用SHA-512加密的,密文长度86
$1$ 表明是用MD5加密的,密文长度22个字符
$2$ 是用Blowfish加密的,
$5$ 是用 SHA-256加密的,密文长度43
  • 最后一次修改时间
      此字段表示最后一次修改密码的时间,在1970 年 1 月 1 日的基准上,加上该字段显示的天数,即为最后修改的时间。通过命令date -d "1970-01-01 18818 days"可以获取具体是哪一天。

  • 最小修改时间
      最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。

  • 密码有效期
      这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
      该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

  • 密码需要变更前的警告天数
      与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户密码需要变更。
      该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。

  • 密码过期后的宽限时间
      也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。
      比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

  • 账号失效时间
      同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用。

  • 保留字段
      目前没有功能,保留。

三、如何禁用一个用户?

  从结果来看,只要让这个用户没办法登录,就可以说是禁用这个用户了。所以可以通过以下方式来实现禁用。

1. 修改/etc/passwd

  把想要禁用的用户的解释器选项配置为/sbin/nologin即可。

2. 修改/etc/shadow

  改动一下第二个密码字段即可,可以在该字段添加一些字符或者更改为*!!!即可使得该账户无法登录。

3. 使用usermod命令

  usermod -L user禁用用户, usermod -U user解禁用户。经过执行可以发现,其实这个命令的原理其实就是在/etc/shadow中的密码字段前添加!

以上是关于linux学习记录:用户与/etc/passwd与/etc/shadow的主要内容,如果未能解决你的问题,请参考以下文章

《Linux学习并不难》用户管理:/etc/passwd文件详细介绍

/etc/passwd与/etc/shadow

Linux文件权限与目录配置

Linux ❀ /etc/passwd与/etc/shadow的异同区分

Linux ❀ /etc/passwd与/etc/shadow的异同区分

linux 里 /etc/passwd /etc/shadow和/etc/group 文件内容解释