Linux系统中每个用户的信息,包括用户名、密码以及所属组等都会被存储在/etc/passwd文件中。

类似的,/ect/group 文件存放用户组的所有信息。

 

一、 /etc/passwd

我们可以通过more /etc/passwd 查看该服务器中的用户信息。

 

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:997:User for polkitd:/:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

andy:x:1000:1000:andy:/home/andy:/bin/bash

 

文件内容比较规律,一行代表一个用户,每行有7个字段,字段之间用 冒号 : 分隔,字段含义从左往右依次是:

用户名、用户密码(x)、UID(用户的ID,唯一表示),GID(用户的初始组ID),一些说明(没用),用户的家目录,登录之后的shell

=》LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL 

 

1.用户名是登录时使用的名字,区分大小写,在同一个Linux操作系统中不允许重复,但是操作系统并不以它作为唯一标识字段,而是UID。

 

2.用户密码:你可能会发现用户密码都是同样的x。这是因为Linux出于系统安全考虑,为用户提供了MD5和Shadow安全密码服务(安装时可选,默认都有,建议有),把真正的密码(密文形式)放在了/etc/shadow文件里。因此,需要注意的是这三个文件对应的权限最好设置成:

/etc/passwd 644   /etc/group 644 /etc/shadow 000

如果/etc/shadow这个文件的权限发生了改变,则需要注意是否是恶意攻击。

 

3.UID是用户的唯一标识,系统是通过 UID 来识别不同的用户和分配用户权限的。你可能会有疑问,我明明只有一个root和一个普通(andy)用户,为什么这里有这么多个用户。其实只有UID>500的用户才是普通用户ID,UID<499的都是系统用户(也称为伪用户),是用来运行系统服务的,可以理解成是不能登录的,但是也不能删除的。

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。

注意,其中很多的系统用户是攻击者入侵的常用入口,一定要熟悉他们,并注意密码域是否不为空。

         adm拥有账号文件,起始目录/var/adm通常包括日志文件

         bin拥有用户命令的可执行文件

         daemon用来执行系统守护进程

         games用来玩游戏

         halt用来执行halt命令

         lp拥有打印机后台打印文件

         mail拥有与邮件相关的进程和文件

         news拥有与usenet相关的进程和文件

         nobody被NFS(网络文件系统)使用

         shutdown执行shutdown命令

         sync执行sync命令

         uucp拥有uucp工具和文件

 

4.GID(Group ID):用户的初始组ID

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

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

需要注意的是,在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的初始组。

 

5.一些说明的内容,可以省略,没什么影像。

 

6.用户的家目录,即登录后进入的~目录路径。root用户是/root,普通用户一般是/home/username

 

7.登录之后用的shell(可以理解成用户登录之后的所有权限或者不能登录)

比如:

/bin/bash 就代表这个用户可以登录,且登录后使用/bin/bash

/sbin/nologin就是禁止该用户登录。(如果我想要让某个具有 /sbin/nologin 的用户知道,他们不能登陆主机时,可以新建 /etc/nologin.txt 这个文件,在文件内面写上不能登陆的原因,当用户登录时,屏幕上就会出现这个文件里面的内容) 注:一般情况下我们要禁止ftp等用户登录。

/usr/bin/passwd则是该用户可以登录,但是登录之后只能使用passwd命令修改自身的密码,不能用其他的命令,如ls。

 

注意:工作中不建议直接修改/etc/passwd文件,而推荐使用相关的修改命令。

 

二、/etc/shadow

/etc/shadow虽然是/etc/passwd的影子文件,用来存储用户的真正密码数据,但是/etc/shadow并不是由/etc/passwd生成的,而是互相补充的关系。

root用户可以通过more /etc/shadow查看影子文件内容:

root:$6$rfOvmKlnnRFX/cB5$Jccj9ZeTrFJoTsz6oI.u6nnRKIeyxkRllD87WezlIYd.zP9tJGs1URLLtdVWbabeNO4u60oz59bvooycrQ3Aq.::0:99999:7:::

bin:*:17110:0:99999:7:::

daemon:*:17110:0:99999:7:::

adm:*:17110:0:99999:7:::

lp:*:17110:0:99999:7:::

sync:*:17110:0:99999:7:::

shutdown:*:17110:0:99999:7:::

halt:*:17110:0:99999:7:::

mail:*:17110:0:99999:7:::

operator:*:17110:0:99999:7:::

games:*:17110:0:99999:7:::

ftp:*:17110:0:99999:7:::

nobody:*:17110:0:99999:7:::

systemd-network:!!:18096::::::

dbus:!!:18096::::::

polkitd:!!:18096::::::

postfix:!!:18096::::::

sshd:!!:18096::::::

andy:$6$7ujSunxrBHuEijDv$uAMuLBmSDv9wd0hSTIbw5FjFal07A5yuDkXqGyMb78rER4mD8oCN1f4S58.Cmo26/MmRkxQgbpKOYObAB.MWG.:18096:0:99999:7:::

文件内容依然规律,一行对应一个用户,比较明显的区别是第二个字段不再是x而是一串密文。

9个字段从左往右依次是=》用户名:加密口令:上一次修改的时间(从1970年1月1日起的天数):两次修改口令间隔的最小天数:两次修改口令间隔的的最大天数:提前多少天警告用户口令将国企:口令过期之后多少天禁用用户:用户过期日期(从1970年1月1日起的天数):保留字段(目前为空)

 

1.用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;

2.密码(已被加密),这个字段是非空的;

3.上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;

4.两次修改口令间隔最少的天数;如果这个字段的值为空,帐号永久可用;

5.两次修改口令间隔最多的天数;如果这个字段的值为空,帐号永久可用;

6.提前多少天警告用户口令将过期;如果这个字段的值为空,帐号永久可用;

7.在口令过期之后多少天禁用此用户;如果这个字段的值为空,帐号永久可用;

8.用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;

9.保留字段,目前为空,以备将来发展之用; 

 

三、/etc/group

/etc/group 文件是用户组的配置文件,通过more /etc/group命令查看文件内容

root:x:0:

bin:x:1:

...

...

andy:x:1000:andy

cgred:x:996:

docker:x:995:

文件中一行表示一个组,4个字段从左往右依次为:用户组(Group)、用户组口令、GID、该用户组所包含的用户=》group_name:passwd:GID:user_list

 

1.用户组名

2.用户组密码,和/etc/passwd一样是用x代替,真正的密码数据存放在/etc/gshadow中

3.GID 组的唯一标识,和/etc/passwd中的GID关联起来

4.用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

 

到此,已经梳理了/etc/passwd、/etc/shadow、/etc/group,它们之间的关系可以这样理解,先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码。

 

 

 

 

 

版权声明:本文为liuyizhao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liuyizhao/p/11279869.html