Linux /etc/passwd内容解释

**

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

**
默认情况下,/etc/passwd 存储有关本地用户的信息
/etc/passwd 采用以下格式:
在这里插入图片描述

1)username        UID到名称的一种映射,用户名

 2)password         保存密码的位置,现在保存在/etc/shadow 中

 3)UID                   用户ID

 4)GID                  主组ID

 5)GECOS            字段存储任意文本,用户注释

 6)/home/dir          用户的家目录

 7)shell                 用户登入后使用的shell名称

我们仔细解释一下:

/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(分隔为7个字段,其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

1)“用户名”是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(,因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

2)“口令”一些系统中,存放着加密后的用户口令字。。虽然这个字段存放的只是用户口令的加密串,不是
明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多 Linux
系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

3)“用户标识号”是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。通常用户标识号的取值范围是0~65
535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

4)“组标识号”字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。

5)“注释性描述”字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux
系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

6)“主目录”,也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

7)用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell
是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C
Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne
Again
Shell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux
系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

比如:

[root@localhost ~]# vi /etc/passwd
#查看一下文件内容
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin
…省略部分输出…

这个文件的内容非常规律,每行代表一个用户。大家可能会比较惊讶,Linux 系统中默认怎么会有这么多的用户啊!这些用户中的绝大多数是系统或服务正常运行所必需的用户,我们把这种用户称为系统用户或伪用户。系统用户是不能登录系统的,但是这些用户同样也不能被删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

现在我们就把 root 用户这一行拿出来,具体分析这个文件中的内容具体代表的含义。可以注意到,这个文件用":"作为分隔符,划分为 7 个字段,我们逐个来看具体的含义。
用户名称
第一个字段中保存的是用户名称。不过大家需要注意,用户名称只是为了方便管理员记忆,Linux 系统是通过用户 ID (UID) 来区分不同用户、分配用户权限的。而用户名称和 UID 的对应正是通过 /etc/passwd 这个文件来定义的。
密码标志
这里的"x"代表的是密码标志,而不是真正的密码,真正的密码是保存在 /etc/shadow 文件中的。在早期的 UNIX 中,这里保存的就是真正的加密密码串,但是这个文件的权限是 644,查询命令如下:
[root@localhost ~]# ll /etc/passwd
-rw-r–r-- 1 root root 1648 12月29 00:17 /etc/passwd

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

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

所以在 /etc/passwd 中只有一个"x"代表用户是拥有密码的,我们把这个字段称作密码标志,具体的密码要去 /etc/shadow 文件中查询。但是这个密码标志"x"也是不能被删除的,如果删除了密码标志"x",那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(当然只能在使用无密码登录,远程是不可以的),除非特殊情况(如破解用户密码),这当然是不可行的。
UID
第三个字段就是用户 ID(UID),我们已经知道系统是通过 UID 来识别不同的用户和分配用户权限的。这些 UID 是有使用限制和要求的:
0:超级用户 UID。如果用户 UID 为 0,则代表这个账号是管理员账号。在 Linux 中如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。
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
第四个字段就是用户的组 ID(GID),也就是这个用户的初始组的标志号。这里需要解释一下初始组和附加组的概念。

所谓初始组,指用户一登陆录就立刻拥有这个用户组的相关权限。每个用户的初始组只能有一个,一般就是将和这个用户的用户名相同的组名作为这个用户的初始组。举例来说,我们手工添加用户 lamp,在建立用户 lamp 的同时就会建立 lamp 组作为 lamp 用户的初始组。

所谓附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组要把用户再加入其他的用户组外,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。

举例来说,刚刚的 lamp 用户除属于初始组 lamp 外,我又把它加入了 users 组,那么 lamp 用户同时属于 lamp 组、users 组,其中 lamp 是初始组,users 是附加组。当然,初始组和附加组的身份是可以修改的,但是我们在工作中不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。

需要注意的是,在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的初始组。
用户说明
第五个字段是这个用户的简单说明,没有什么特殊作用,可以不写。
家目录
第六个字段是这个用户的家目录,也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。

超级用户的家目录是 /root 目录,普通用户在 /home/ 目录下建立和用户名相同的目录作为家目录,如 lamp 用户的家目录就是 /home/lamp/ 目录。
登录之后的Shell
Shell 就是 Linux 的命令解释器。管理员输入的密码都是 ASCII 码,也就是类似 abcd 的英文。但是系统可以识别的编码是类似 0101 的机器语言。Shell 的作用就是把 ASCII 编码的命令翻译成系统可以识别的机器语言,同时把系统的执行结果翻译为用户可以识别的 ASCII 编码。Linux 的标准 Shell 就是 /bin/bash。

在 /etc/passw 文件中,大家可以把这个字段理解为用户登录之后所拥有的权限。如果写入的是 Linux 的标准 Shell,/bin/bash 就代表这个用户拥有权限范围内的所有权限。例如:
[root@localhost ~]# vi /etc/passwd
lamp❌502:502::/home/lamp:/bin/bash

我手工添加了 lamp 用户,它的登录 Shell 是 /bin/bash,那么这个用户就可以使用普通用户的所有权限。如果我把 lamp 用户的 Shell 修改为 /sbin/nologin,例如:
[root@localhost ~]# vi /etc/passwd
lamp❌502:502::/home/lamp:/sbin/nologin

那么这个用户就不能登录了,因为 /sbin/nologin 就是禁止登录的 Shell。这样说明白了吗?如果我在这里放入的系统命令,如 /usr/bin/passwd,例如:
[root@localhost ~]#vi /etc/passwd
lamp❌502:502::/home/lamp:/usr/bin/passwd

那么这个用户可以登录,但登录之后就只能修改自己的密码了。这里不能随便写入和登陆没有关系的命令,如 ls,否则系统不会识别这些命令,也就意味着这个用户不能登录。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值