Linux用户和用户组管理 用户配置和管理的相关文件

时间:2021-04-24 15:09:17

用户信息文件 /etc/passwd

这个文件中保存的就是系统中所有的用户及其对应的用户主要信息。

文件格式 : 

第1字段 第2字段 第3字段 第4字段 第5字段 第6字段 第7字段
用户名称 密码标志 用户ID 组ID 用户说明 家目录 登陆后的Shell

例如:root:x:0:0:root:/root:/bin/bash

lizhouwei:x:1000:1000:lizhouwei:/home/lizhouwei:/bin/bash

用户名称

第1个字段是用户名称,用户名称只是为了方便管理员记忆,Linux 系统是通过用户 ID (UID) 来区分不同用户、分配用户权限的。而用户名称和 UID 的对应正是通过 /etc/passwd 这个文件来定义的。

密码标志

第2个字段是密码标志,这里的"x"代表的是密码标志,表示用户是拥有密码的,而不是真正的密码,真正的密码是保存在 /etc/shadow 文件中的。由于这个文件的权限是 644,查询命令如下:

[root@localhost /]# ls -l etc/passwd
-rw-r--r--. 1 root root 2282 Nov 5 20:19 etc/passwd

所有用户都可以读取 /etc/passwd 文件,这样非常容易导致密码的泄露。虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。所以现在的 Linux 系统把真正的加密密码串放置在影子文件/etc/shadow中,而影子文件的权限是 000,查询命令如下:

[root@localhost /]# ls -l etc/shadow
----------. 1 root root 1266 Nov 5 20:19 etc/shadow

这个文件是没有任何权限的,但因为我是 root 用户,所以读取权限不受限制。当然,用强制修改的方法也是可以手工修改这个文件的内容的。只有 root 用户可以浏览和操作这个文件,这样就最大限度地保证了密码的安全。

所以在 /etc/passwd 中"x"只是密码标志,代表用户是拥有密码的,具体的密码要去 /etc/shadow 文件中查询。如果删除了密码标志"x",那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(用户无密码时远程是不可以登陆的)。

UID

第3个字段就是用户 ID(UID),在Linux中系统是通过 UID 来识别不同的用户和分配用户权限的。这些 UID 是有使用限制和要求的:

  0:超级用户 UID。如果用户 UID 为 0,则代表这个账号是管理员账号。在 Linux 中只需把其他用户的 UID 修改为 0 就可以把普通用户升级成管理员了。

  1~499:系统用户(伪用户)UID。这些 UID 是系统保留给系统用户的 UID,也就是说 UID 是 1~499 范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中,1~99 是系统保留的账号,系统自动创建;100~499 是预留给用户创建账号的,但是这些用户同样也不能被删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

  500~65535:普通用户 UID。建立的普通用户 UID 从 500 开始,最大到 65535。

说明:在2.6.x 内核以后的 Linux 系统用户 UID 已经可以支持 232 个用户了。

GID

第4个字段就是用户的组 ID(GID),这个组ID是指用户的初始组的标志号。在Linux 中用户可以同时加入初始组和附加组。

初始组:指用户一登陆录就立刻拥有这个用户组的相关权限。每个用户的初始组只能有一个,在添加用户时如果不指定初始组,则系统会建立一个与用户名相同的组作为用户的初始组。例如:我们手工添加用户 lizhouwei,在建立用户 lizhouwei 的同时就会建立 lizhouwei组作为 lizhouwei 用户的初始组。

附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组以外,把用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。例如:刚刚的 lizhouwei 用户除属于初始组 lizhouwei 外,我又把它加入了 users 组,那么 lizhouwei 用户同时属于 lizhouwei 组、users 组,其中 lizhouwei 是初始组,users 是附加组。当然,初始组和附加组的身份是可以修改的,但是我们在工作中不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。

用户说明

第5个字段是这个用户的简单说明,没有什么特殊作用,可以不写。

家目录

第6个字段是这个用户的家目录,也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。

普通用户家目录: /home/ 用户名  所有者所属组都是此用户 权限 700;

超级用户的家目录: /root   所有者所属组都是root 权限 550;

说明:在psswd中即使将用id(UID)改为0用户管理员,其家目录的位置是不变的,还是/home/用户名

登录之后的Shell

Shell 就是 Linux 的命令解释器。将Linux的命令翻译成系统可以识别的机器语言,同时把系统的执行结果翻译为用户可以识别的 高级语言。Linux 的标准 Shell 就是 /bin/bash。
在 /etc/passwd 文件中,大家可以把这个字段理解为用户登录之后所拥有的权限。如果写入的是 Linux 的标准 Shell,/bin/bash 就代表这个用户拥有权限范围内的所有权限。例如:

[root@localhost /]# vim etc/passwd

lizhouwei:x:1000:1000:lizhouwei:/home/lizhouwei:/bin/bash

例如:lizhouwei 用户,它的登录 Shell 是 /bin/bash,那么这个用户就可以使用普通用户的所有权限。如果把 lizhouwei 用户的 Shell 修改为 /sbin/nologin,那么这个用户就不能登录了,因为 /sbin/nologin 就是禁止登录的 Shell。如果我在这里放入的系统命令,如 /usr/bin/passwd,那么这个用户可以登录,但登录之后就只能修改自己的密码。

说明:在用户的 Shell中不能随便写入和登陆没有关系的命令,如 ls,否则系统不会识别这些命令,也就意味着这个用户不能登录。

影子文件 /etc/shadow

这个文件中保存着用户的实际加密密码和密码有效期等参数。我们已经知道这个文件的权限是 000,所以除 root 用户外,其他用户是不能查看的,这样做有效地保证了密码的安全。字段之间使用":"作为分隔符。

第1字段 第2字段 第3字段 第4字段 第5字段 第6字段 第7字段 第8个字段 第9个字段
用户名称 密码

密码最后一次修改曰期

密码的两次修改间隔时间

(和第3个字段相比)

密码的有效期

(和第3个字段相比)

密码修改到期前的警告天数

(和第5个字段相比)

密码过期后的宽限天数

(和第5个字段相比)

账号失效时间

保留

例如:lizhouwei:bIUmABK6YbB4k1w6Ai::0:99999:7:::

用户名称

第1个字段中保存的是用户名称,和 /etc/passwd 文件的用户名称相对应。

密码

第2个字段中保存的是真正加密的密码。在Linux 的密码采用的是 SHA512 散列加密算法。如果用户密码是"!!"或"*",代表没有密码是不能登录。例如:所有伪用户的密码都是"!!"或"*",代表没有密码是不能登录的。新创建的用户如果不设定密码,那么它的密码项也是"!!",代表这个用户没有密码,不能登录。

密码最后一次修改曰期

第3个字段是密码的修改日期,数值表示 当前日期 到 1970年1月1日的天数, 366 代表的就是 1971 年 1 月 1 日。

密码的两次修改间隔时间(和第三个字段相比)

第4个字段是密码的两次修改间隔时间。这个字段要和第3个字段相比,也就是说密码被修改后多久不能再修改密码。如果是 0,则密码可以随时修改。如果是 10,则代表密码修改后 10 天之内不能再次修改这个密码。

密码的有效期(和第三个字段相比)

第5个字段是密码的有效期。这个字段也要和第三个字段相比,也就是说密码被修改后可以生效多少天。默认值 99999,也就是 27 年,大家可以认为永久生效。如果改为 90,那么密码被修改 90 天之后就必须再次修改,否则该用户就不能登录了。我们在管理服务器的时候可以通过这个字段强制用户定期修改密码。

密码修改到期前的警告天数(和第五个字段相比)

第6个字段是密码修改到期前的警告天数。这个字段要和第五个字段相比,就是密码到期前需提前几天修改。默认值是7,也就是说从密码到期前的 7 天开始,每次登录系统都会警告该用户修改密码。

密码过期后的宽限天数(和第五个字段相比)

第7个字段是密码过期后的宽限天数。也就是密码过期后,用户如果还是没有修改密码,那么在宽限天数内用户还是可以登录系统的;如果过了宽限天数,那么用户就无法再使用该密码登录了。天数如果是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

账号失效时间

第8个字段是用法的账号失效时间。这里同样要写时间戳,也就是用 1970 年 1 日 1 日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效,无法使用了。

保留

这个字段目前没有使用。

在 Linux 中,如果遗忘了密码,则可以启动进入单用户模式。这时既可以删除 /etc/passwd 文件中的密码标识字段,也可以删除 /etc/shadow 文件中的密码标识字段,都可以达到清空密码的目的

组信息文件 /etc/group

这个文件是记录组 ID(GID) 和组名的对应文件。etc/passwd 文件的第四个字段记录的是每个用户的初始组的 ID

文件格式:

第1字段 第2字段 第3字段 第4字段

组名

组密码标志

组ID (GID)

组中的用户

例如:lizhouwei:x:1000:lizhouwei


组名

第1个字段是用户组的组名。

组密码标志

第2个字段是组密码标志字段。和 /etc/passwd 文件一样,这里的"x"仅仅是密码标识,真正的加密之后的组密码保存在 /etc/gshadow 文件中。
不过,用户设置密码是为了验证用户的身份,但是用户组设置密码是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。

组ID (GID)

第3个字段是用户组的 ID,和 UID 一样,Linux 系统是通过 GID 来区别不同的用户组的,组名只是为了便于管理员识别。所以,在 /etc/group 文件中可以查看对应的组名和GID。

组中的用户

第4个字段表示的就是这个用户组中到底包含了哪些用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段。也就是说,写入这个字段的用户是这个用户组的附加用户。比如 lizhouwei 组就是这样写的"lizhouwei:x:1000",并没有在第四个字段中写入 lizhouwei 用户,因为 lizhouwei 组是 lizhouwei 用户的初始组。如果要查询这些用户的初始组,则需要先到 /etc/passwd 文件中查看 GID(第四个字段),然后到 /etc/group 文件中比对组名。

每个用户都可以加入多个附加组,但是只能属于一个个初始组。所以我们在实际工作中,如果需要把用户加入其他组,则需要添加附加组。一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。

注意,/etc/passwd、/etc/shadow、/etc/group 之间的关系为:先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码

组密码文件 /etc/gshadow

这个文件就是保存组密码的文件。如果我们给用户组设定了组管理员,并给该用户组设定了组密码,那么组密码就保存在这个文件中,组管理员就可以利用这个密码管理者个用户组了。

 文件格式:

第1字段 第2字段 第3字段 第4字段

组名

组密码

组管理员用户名

组中的附加用户

例如:lizhouwei:!!::lizhouwei

组名

第1个字段是用户的组名。

组密码

第2个字段就是实际加密的组密码。注意,对于大多数用户来说,这个字段不是空就是"!",代表这个组没有合法的组密码。

组管理员用户名

第3个字段表示这个组的管理员是哪个用户。

组中的附加用户

第4个字段用于显示这个用户组中有哪些附加用户。

用户模板目录 /etc/skel/

此文件是一个用户创建的时候一个模板,如果该/etc/skel文件夹有文件的话,使用useradd命令则会将/etc/skel/下的文件拷贝到新建用户的/home/用户名文件夹下