← Back

Linux下关于用户账户的几个文件解析

2018-03-09

Linux是一个多用户系统,但是对于一个多用户共存的系统中,当然不能够出现用户相互越权等一系列的安全问题,所以如何正确的管理账户成为了Linux系统中至关重要的一环。

在Linux下,与用户账户有着紧密联系的文件又如下的几个:

/etc/passwd   #管理用户的UID、GID等重要用户信息
/etc/shadow   #管理用户密码的等重要信息
/etc/group    #管理用户组
/etc/gpasswd  #管理用户组密码

1./etc/passwd

虽说这个文件的文件名写着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
...

上面的每一行代表了存在你系统中的一个用户。按照“:”来进行字段的划分,可以划分为7个字段,从左到右依次如下意义:

当然,如果记不住的话,可以使用finger命令与id命令,例如:

finger root
# 输出如下:
Login: root           			Name: root
Directory: /root                    	Shell: /bin/bash
On since Fri Mar  9 19:10 (CST) on tty1   7 seconds idle
Mail last read Sat Mar  3 15:58 2018 (CST)
No Plan.

id root
# 输出如下:
uid=0(root) gid=0(root) groups=0(root)

输出内容不在解释,十分 -h 了。

2./etc/shadow

打开该文件,内容大致如下:

root:$6$tVBKdRxY$myJhWrhIwlXh42zNYLz1fmwu4ONQWP03O/5ccx1/34koU8GTn0M0ACx3xI4Bl.wPN3DPrrGbQX7vbPqqR//xv0:17593:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::

shadow文件夹自然也以“:”作为分隔符,这里一共有9个字段,从左到右依次具有如下意义:

3./etc/group

/etc/group文件中存放的是用户组的相关的信息,打开大致如下:

root:x:0:root

一共有四个字段:

4./etc/gpasswd

/etc/gpasswd文件中存放的是用户组没密码的相关信息,大致如下:

root:::root

同样有四个字段:

当然,对于一个用户来说,当然可以在多个组当中。但是,当我们使用一个账户进行某些操作时,系统如何判断我们当前属于哪个组呢?例如,当前有个文件属性如下:

----r----- root group1  x.txt

有一个用户名为user既属于group1又属于group2。那该用户到底能不能读取这个txt呢?

其实这就涉及到了一个有效用户组与初始用户组两个概念了。使用groups命令,可以看到类似如下的输出(这里模拟有groups1、2两个组):

groups
# 输出
groups1 groups2

第一个就是有效用户。有效用户组意味着目前你身份是user,现在属于group1。所以你是可以读取那个txt的。如何进行切换呢?使用newgrp命令

newgrp group2
groups
# 输出
group2 group1

此时尝试读取x.txt会提示权限不足。

那么初始用户组是什么呢?其实就是/etc/passwd中的GID对应的用户组,也是我们在登陆是的第一个用户组。