1、/etc/passwd 文件是干什么的?

Linux 系统中的 /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
...太多了,省略一部分...
skx:x:1000:1000:ubuntu-18.04.1,,,:/home/skx:/bin/bash
lilei:x:1001:1001:,,,:/home/lilei:/bin/bash

文件中每一行代表着一个用户。

打开文件可以看到有很多行,怎么会有这么多用户呢?这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

文件中每一行的格式如下所示,共有 7 个字段,用 “:” 进行分隔,下面分别介绍作用

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

2、字段详解

2.1 用户名

root, skx, lilei 这些都是用户名,用户名仅是为了方便用户记忆,Linux 系统是通过 UID 来识别用户身份,分配用户权限的。/etc/passwd 文件中就定义了用户名和 UID 之间的对应关系。

2.2 密码

“x” 表示此用户有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中。

在早期的 UNIX 中,这里保存的就是真正的加密密码串,但由于所有程序都能读取此文件,用户数据容易被窃取(可以暴力破解的)。现在 Linux 系统把真正的加密密码串放置在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。

注意:“x” 不能删除,如果删除了 “x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆。

2.3 UID

UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。

实际上,UID 就是一个 0~65535 之间的数,不同范围的数字表示不同的用户身份,具体如表 1 所示。

UID 范围 用户身份
0 超级用户,管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?把其他用户的 UID 修改为 0 就可以了
1~499 系统用户(伪用户)。此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。
除了 0 其他的 UID 都一样,默认 500 以下的数字给系统只是一个公认的习惯。
500~65535 普通用户

2.4 GID

全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。这里需要解释一下初始组和附加组的概念。

  • 初始组,指用户登陆时就拥有这个用户组的相关权限。
  • 附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。

简单点说就是,用户 A 属于初始组 A,现在又加入了组 B,A 就同时属于两个组,组 A 就是初始组,组 B 就是附加组。

/etc/passwd 文件中的组 ID 是初始组ID。

2.5 描述性信息

用来解释这个用户的意义,没什么重要用途

2.6 主目录

也就是用户登录后有操作权限的访问目录,通常称为用户的主目录,切换用户默认进入这个目录。

2.7 默认的Shell

Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。

系统只认识 0101 的机器语言,我们是通过使用 Linux 命令来完成操作任务的,这就需要使用命令解释器。也就是说,Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。

通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。

参考链接:http://c.biancheng.net/view/839.html