在Linux中,每个文件都是属于一个用户的,而每个用户都属于一个用户组。
在Linux中,可以同时拥有N多个用户,和用户组。
在Linux中,保存用户的信息是在
/etc/passwd //保存账号的文件
/etc/shadow //保存密码的文件
/etc/passwd文件解析
通过 vim /etc/passwd 指令可以打开passwd文件,里面数据如下图:

我数了一下,总共有29行,也就是说我的服务器上公共有29个用户。
每一行都代表一个用户。
用户的基本信息以【:】为分割符,写成了一行,我又数了一下,总共有六个冒号,说明每个用户有七个属性。
下面就以root这个用户来讲解每个属性的意思。
root:x:0:0:root:/root:/bin/bash
以冒号为拆分,从左到右排序:
root
账号的名称
x
密码。
在早期,Linux用户的密码就是放在这个位置上的,但是因为/etc/passwd可以被所有程序读取,为了系统安全,于是把密码移到了/etc/shadow文件中。
所以你会发现,在所有的用户中,该位置的值都是x
0
UID 也就是用户ID。
这个ID被使用在了权限管理中,比如文件权限等地方。
UID有一些特殊特性,如下:
1. 当UID=0时,代表这个用户是超级管理员。所以,当你将其他账号,如上图中的test的UID设置为0,那么test也就变成超级管理员了。
2. 习惯上,将1-499的UID保留给操作系统使用,称其为系统账号。但实际上,这只是习惯问题,权限上并没有任何差别。
3.习惯上,将500之后的UID给我们自定义使用,也就是说,我们使用useradd增加的用户的UID默认就是500以后的。
0
GID
用户组ID
root
使用者信息说明栏
这个字段是用户的描述信息
/root
主文件夹
用户登录进来的默认文件夹,/root,则代表root用户的默认主目录是/root,在上图中,我们可以发现apache在该位置的值是 /urs/share/httpd 说民apache这个用户的默认主目录就是 /urs/share/httpd
/bin/bash
用户默认情况下的shell。
在Linux中,有很多类型的shell,每个类型的shell都有所迥异,但每个的主要目的都是与操作系统内核沟通。
反过来,如果这个shell没办法和操作系统内核沟通,那么这个拥有这个shell的用户就没法执行命令了。
基于此原理,如果你不想系统中的某个用户可以登录进系统,可以将该位置的值设置为一些无法与内核沟通的shell,比如:/sbin/nologin
所以,shell为/sbin/nologin的用户是无法登录进系统的。
/etc/shadow文件解析
开文之前,先讲一下/etc/shadow文件出现的历史原因。
通过 ls /etc/passwd -al 指令可以查看 /etc/passwd 文件的权限信息。
-rw-r--r--:说明系统上的所有用户都是可以读取到该文件的,如果将密码放在这个文件,那么就意味着所有人都可以读取到所有用户的信息,只不过除了root,没有人有权限修改这个文件而已。

这就带来了安全问题,为了系统更安全,于是将用户的密码移除到 /etc/shadow 文件里。
通过 ls /etc/shadow -al 指令可以查看 /etc/shadow 文件的权限信息。

----------:说明除了超级管理员(UID=0),谁都无法查看和修改此文件。
通过 vim /etc/shadow,可以打开shadow文件,里面信息如图所示。

root:$6$W1.A5Zr/$VbHWDRA3leWeOlZfcJwXuKfphFftfRMeBToNZInkypJ0LI62fYZWTZyJSAY.FgTGIIdaa0EdqKX7nxDi3G/kd.:17698:0:99999:7:0:16679:
和/etc/passwd一样。
/etc/shadow也是每一行代表一个用户密码。
/etc/shadow的每一行也是以冒号【:】来分割的,数了一下,总共有八个冒号,说明密码总共有九个属性。
下面从左到右排序,分别介绍:
root
用户名称,和/etc/passwd里的第一个位置字段一一对应着。
$6$W1.A5Zr/$VbHWDRA3leWeOlZfcJwXuKfphFftfRMeBToNZInkypJ0LI62fYZWTZyJSAY.FgTGIIdaa0EdqKX7nxDi3G/kd.
加密后的密码。
可通过:authconfig --test | grep hashing
查看密码的加密方式:

17698
最近更改密码的日期
计算规则:从1970 年 1 月 1 日起,过去的秒数。
0
密码不可更改的天数。
如果为0,则随时都可以更改密码。
如果为N(N>0),则代表上一次修改后,经过N天之后才能修改用户的密码。
99999
密码需要重新修改的天数
如果经过该天数后,密码还未修改过,那么在下次登录的时候,会强制修改一次。
7
密码需要变更前期限前的警告天数
7表示在密码过期前的前七天会提醒管理者。
0
密码过期后的宽限日期
16679
账号的失效日期,到这个日期的时候,该用户就无法使用了。
空
最后一个字段是作为保留字段使用的。
到此,账号的两个文件都已经讲解完毕了。
因为Linux中的账号和密码都是以文件的形式保存的,所以,可以直接通过文件,来更改对应账号的相应属性。
比如:如果root密码忘记了,就可以想办法通过开机的方式进入该文件,修改密码。
网友评论