1.用户用户组概念

回到顶部

Linux是典型的多用户多任务操作系统,在使用linux操作系统之前,必须首先向系统管理员申请账号,然后通过帐号登录系统。

用户在登录时键入正确的用户名和口令后,即可进入系统和自己的主目录。

默认情况下,系统上所有账号包括root的相关信息, 都是记录在/etc/passwd文件中。用户的口令密码记录在/etc/shadow文件中。Linux用户组纪录在/etc/group文件内!

在每次使用linux系统之前,我们需要先登录linux。这时就需要用户账号和密码了,

用户的账号一方面可以控制用户对系统资源的访问,帮助系统管理员对使用系统的用户进行跟踪;

另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个唯一的用户名和口令。

不同的用户拥有不同的权限,在linux中,root拥有至高无上的权限。

linux的每个用户,都会加入至少一个用户组中。在一个用户组中的用户,就会拥有该用户组的相应权限。

每个用户都会有一个用户名,一个用户一定会加入一个用户组,称为主用户组,可能会加入多个用户组,称为附属用户组。

2.用户UID和用户组GID

回到顶部

系统中每个用户和用户组都分别对应唯一的ID,用户ID称为UID(User ID),用户组ID称为GID(Group ID)。

linux内部通过ID号识别用户和用户组。而用户则通过用户名和用户组名识别用户。

linux用户信息记录在/etc/passwd文件中,用户组信息记录在/etc/group文件中。

除了查看/etc/passwd和/etc/group文件外,我们也可以使用id命令观察用户的UID和GID,

id命令可以查询某个用户的UID和GID等信息,不需要刻意关注id的选项,只需要使用默认选项就可以了!

id命令常用格式如下:

[root@study ~]# id [username]

如果不加任何参数,id默认显示当前登录用户的id信息,假设当前登录账号为root,用id查看root的ID:

[root@study ~]# id

uid=0(root) gid=0(root) groups=0(root)

可以看到超级用户root的uid和gid都是0,root也只有一个群组,那就是root组。

用id看看peter的id:

[root@study ~]# id peter

uid=1000(peter) gid=1000(peter) groups=1000(peter),0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),112(lpadmin),127(sambashare),999(vboxsf)

可以看到当前登录用户为peter,uid和gid都是1000. groups就是peter所加入的所有用户组id,上面我们可以看出peter加入了好多用户组。

如果是系统中不存在的用户,id也会给出用户不存在的提示,可以据此判断系统中是否存在某个账号:

[root@study ~]# id peterr

id: ‘peterr’: no such user

3.linux文件的拥有者和所属用户组

回到顶部

linux文件的拥有者和所属用户组是文件的两个重要属性,在用ls -al显示文件属性的时候,

linux会根据文件的用户ID和所属用户组ID分别从/etc/passwd和/etc/group文件中找到对应的用户名和用户组名并显示出来。

所以在用ls -al查看linux文件属性的时候,我们看到的是文件的拥有者名称和所属用户组名称。

但是在linux内部,linux文件的拥有者和所属用户组属性记录的是拥有者和所属用户组对应的ID。

有时候我们在网络上下载一些文件,文件的拥有者和所属用户组属性显示的是ID号,

因为这个下载的文件的拥有者和所属用户组并不是linux主机中的存在的用户,linux无法找到和ID号对应的用户和用户组,

只能显示ID号码。不过这种情况是极少发生的,因为linux的处理是谁下载的文件这个文件就属于谁。

不过我们依然可以做个小实验验证一下,例如当前的登录账号为peter,peter的ID为1000,

我们通过ls -al /home/peter发现该目录下的所有文件的拥有者就是peter:

[root@study ~]# ls -al /home/peter

drwxr-xr-x 6 peter peter 4096 Feb 23 11:09 .

drwxr-xr-x 39 peter peter 4096 Feb 23 11:16 ..

…省略…

-rw-r–r– 1 peter peter 101213499 Jul 13 2019 kblog.tar.gz

drwxr-xr-x 8 peter peter 4096 Oct 6 21:14 linuxsource

…省略…

我们切换到root账号,以root身份编辑vim /etc/passwd文件,将peter的ID改成系统中还没有分配的一个号码,例如1010。

[root@study ~]# vim /etc/passwd

…省略…

peter:x:1010:1000:peter,,,:/home/peter:/bin/bash #将ID号1000改为1010

…省略…

再次观察/home/peter目录中的文件属性,会发现该目录的下所有文件的拥有者变成了1000:

[root@study ~]# ls -al /home/peter

drwxr-xr-x 6 1000 peter 4096 Feb 23 11:09 .

drwxr-xr-x 39 1000 peter 4096 Feb 23 11:16 ..

…省略…

-rw-r–r– 1 1000 peter 101213499 Jul 13 2019 kblog.tar.gz

drwxr-xr-x 8 1000 peter 4096 Oct 6 21:14 linuxsource

…省略…

这是因为我们把peter的ID号改成1010后,ls无法找到1000对应的用户名了,只能显示ID号码了。

做完这个小实验后请立即将/etc/passwd文件恢复原样:

[root@study ~]# vim /etc/passwd

…省略…

peter:x:1000:1000:peter,,,:/home/peter:/bin/bash #将ID号改回1000

…省略…

不过这里我们留个一个大坑,上面的切换到root账号的方法有很多,可能想到的方法是:

1.先登出系统,再以root身份登录;

2.用ctl+alt+[F1-F6]切换到其他终端,以root身份登录;

3.使用su命令切换到root;

4.在执行编辑文件命令的前面加上sudo;

特别要注意的是第四种方法,如果用sudo的话,再次编辑/etc/passwd文件的时候,系统已经无法识别你了,所以无法使用root权限了,也无法切换到root账号了:

[peter@study ~]# sudo vim /etc/passwd

sudo: unknown uid 1000: who are you?

[peter@study ~]# su

su: Cannot determine your user name.

[peter@study ~]# su –

su: Cannot determine your user name.

如果你是用的这种方法修改的/etc/passwd文件,赶紧登出系统再以为root身份登录或者使用ctl+alt+[F1-F6]切换到其他终端,以root身份登录,

然后将/etc/passwd文件恢复原样。

如果没有将/etc/passwd文件恢复原样,那么下次peter再次登录系统时,原本属于peter的文件将不在属于peter了,会面临许多权限问题,甚至无法进入自己的家目录!

如果是在企业生产环境下出现这样的问题,将是一个不小的企业生产事故。

以上的练习只能在自己的练习机上操作,切忌千万不可在企业生产环境下操作。

在正常运行的Linux系统环境上已经有很多的数据被建立了,随意修改系统上某些账号的UID,很可能会由于权限问题而导致某些程序无法进行,

导致整个系统无法顺利运行!

initroot编辑整理,转载请注明www.initroot.com