Linux – 账号与用户组分析

一、概述

  虽然我们登录 Linux 主机的时候,输入的是我们的账号,但是其实 Linux 主机并不会直接认识你的【账号名称】,它仅认识 ID (ID就是一组号码)。

1、Linux账号登录时,系统处理的主要流程

(1)先查找 /etc/passwd 里面是否有你输入的账号? 如果没有则退出,如果有的话则将该账号对应的 UID 与 GID (在/etc/ group中) 读出来,另外,该账号的家目录与shell 设置也一并读出。

(2)再来则是核对密码表。这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里面的密码是否相符。

(3)如果一切都OK的话,就进入 shell 管理的阶段。

(4)大致上的情况就像这样,所以当你要登录你的 Linux 主机的时候,那个/etc/passwd 与 /etc/shadow 就必须要让系统读取(这也是很多攻击者会将特殊账号到 /etc/passwd里面去的缘故)。所以,如果你要备份 Linux系统的账号的话,那么这两个文件就一定需要备份才行。

二、/etc/passwd 内容分析

 
1、执行命令 cat -n /etc/passwd 查看当前 Linux 系统的用户列表

每一行代表一个账号,有几行就代表有几个账号在我们的系统中。上图中可以看到,目前有28个账号在我的系统中。

不过需要注意的是,这里面有很多账号都是系统正常运行所必须的,我们简称为系统账号。比如:bin、daemen、adm、nobody 等,这些账号是不能随意删除的,否则出问题的哦。

下面针对每个系统都会有的第一行,也就是 root 这一行作分析。

 
2、每一行都被 : 分成了 7 部分,这里以 root 这一行做分析

root:账号名称

x:密码,早期 UNIX 系统的密码就是放在这里,但是由于这个文件的特性是所有的程序都能读取,这样会导致密码被窃取,因此后来将这个字段所代表的密码数据改放到 /etc/shadow 中了,所以这里会放一个 x

0:UID,用户标识符。这里需要注意的是,Linux 对 UID 是有限制的,0 就代表系统管理员,也就是说,一个系统是可以有多个系统管理员的,但并不建议这样做,保留一个 root 就很好。 1 ~ 999 是保留给系统使用的 ID,在 1 ~ 999 范围中,又被分为 2 部分,1 ~ 200:有 Linux 发行版自行建立的系统账号;201 ~ 999:如果用户有系统账号需求时,可以使用的账号 UID。1000 ~ 60000:给一般用户使用。

0:GID,这个与 /etc/group 有关,其实它与 /etc/passwd 差不多,只不过它是用来规范组名与 GID 的对应而已。

root:用户信息说明栏,这个字段基本上没有什么重要用途,只是用来解释这个账号的意义而已。

/root:家目录,以上面为例,root的家目录在 /root,所以当 root 登录后,就会跑到 /root 目录里面。如果你有个账号的使用空间特别大,你想要将该账号的家目录移动到其他的硬盘去该怎么做?没错,可以在这个字段进行修改。

/bin/bash:shell,当用户登录系统后就会获取一个 shell 来与系统的内核沟通以进行用户的操作任务。那为何默认 shell 会使用 bash 呢?就是在这个字段指定的。这里比较需要注意的是, /sbin/nologin 指无法登录 shell 进行交互,但是设置为/sbin/nologin 的用户实际上也是可以进行系统程序的工作的,只不过他们不能登录也不需要登录主机而已,比如 nginx,redis 等用户。

 
三、其他

用户的密码信息及设置相关:/etc/shadow (涉及到密码、最近修改密码时间、密码多长时间内不可以再次修改,密码需要重新修改的天数、密码需要修改期限前的记警告天数、密码过期后的账号宽限时间、账号失效日期等)

用户组的密码信息及设置相关:/etc/gshadow(这个一般用不上)