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 命令禁用账户时,也是在这部分最前面加上了! 来达到使账户无法登录的目的。 ??所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。 -
最后一次修改时间 ??此字段表示最后一次修改密码的时间,在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 中的密码字段前添加! 。
|