购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2.2 Linux用户

“Linux用户”非常重要:Linux下的任何操作都是和用户相关,而用户又和权限紧密关联,例如常见的Permission is denied问题,就和用户密切相关。随着读者学习的深入,还会碰到一系列的用户相关的问题,例如普通用户和超级用户的区别是什么?它们是依据什么来划分的?超级用户的名字能否改变?什么是用户组,用户组ID和gid有什么区别?这些都是本节要介绍的内容。

1.Linux用户分类

Linux有两种类型的用户:超级用户和普通用户。超级用户默认的用户名是root。当用户在localhost login后面输入root,按〈Enter〉键后,可以看到“Password:”的提示和后面闪烁的指针,输入root的密码(如123456),按〈Enter〉键,就可以看到如图2-3所示的登录界面了。

图2-3 CentOS 8登录界面图

按〈Ctrl+D〉组合键可以退出当前登录。

超级用户的权限最大,可以查看和删除任何文件。Linux不像Windows,Linux下没有回收站机制,文件被命令删除之后,就很难找回。由于超级用户可以做所有的操作,因此很容易出现误操作,造成一些不可逆的损失;而普通用户由于权限受限,出现误操作相对较难。因此,平时尽量要在普通用户下工作,除非是那些必须要由超级用户完成的操作,才进行切换,完成后,要立即切换回普通用户。

无数个Linux操作的“血泪”故事告诉人们,除非万不得已,不要在超级用户下工作。

2.登录提示符

称为登录提示符,如图2-4所示,自左向右:root为当前登录的用户名;@是地址符号,和邮箱地址中的@是一样的;localhost是主机名,它和域名一样,也是一个字符串到IP地址的映射;~所在的位置表示当前目录(工作目录),而~符号自身表示当前用户的home目录,如当前用户为root,root的home目录就是/root,因此,当前目录就是/root。如果切换当前目录到/tmp,那么~就会被替换成tmp;最后是用户身份符号,有#和$两种,#表示超级用户,$表示普通用户,图2-4中的身份符号为#,说明当前登录的用户为超级用户。

图2-4 登录提示符说明图

3.用户的home目录

每个用户都有一个home目录,home目录用来存储该用户自身的数据。通常情况下,root用户的home目录是 /root,普通用户的home目录则是“/home/普通用户名”。

用户的home目录也可以修改,它由 /etc/passwd中的设置决定,例如root用户的设置就是root:x:0:0:root:/root:/bin/bash,各项设置之间用冒号(:)进行分隔,其中第6项设置就是root用户的home目录的设置,此处的设置是/root,也可以修改成其他路径,例如/home/root,这样root用户的home目录就变成了 /home/root。

~表示当前用户的home目录,不管当前目录是什么,使用cd~,都能切换回当前用户的home目录。

4.用户的uid和gid

Linux的每个用户都有1个uid和1个gid,uid和gid都是数字,其中uid是 用户编号 ,相当于身份证号码,gid则是 当前用户组编号 (Current Group ID)。

id命令可以打印当前用户的信息,如图2-5所示,当前用户是root,uid(用户编号)是0;Current Group(当前用户组)是root,gid(当前用户组编号)是0;groups(用户组集合)只有1个元素,即gid=0的用户组。

0是一个特殊的数字,它表示权限最大的用户,即root用户(超级用户),也表示权限最大的组,即root用户组。Linux以uid=0来判断用户是否为超级用户,而不是以用户名是否为root来判断是否为超级用户。

图2-5 当前用户身份信息图

一个Linux用户可以属于多个用户组,这个信息由groups来表示,groups中的第一个元素即为当前用户组(Current Group),其编号是gid。有关gid和groups的使用后续还有详细说明。

(1)Linux的用户信息由数字编号(uid/gid)来记录

Linux的用户信息是用数字编号(uid/gid)来记录的,用户名/组名只是根据编号查文件得到的结果。例如每个文件都有用户信息,ls-l/etc/profile可以查看/etc目录下profile文件的信息,如图2-6所示,profile文件的Owner为root,Group也为root。

图2-6 profile文件用户信息图

但是,profile存储的并不是root字符串信息,而是uid/gid,其中用户名root是在/etc/passwd文件中根据uid查询到的,组名root是在/etc/group文件中根据gid查询到的,可以用下面的示例进行验证。

1)将/etc/passwd中的uid=0对应的用户名root修改成admin,如图2-7所示。

2)再次查看/etc/profile的文件信息,可以看到Owner的名字已经由root变成了admin,如图2-8所示,这就验证了前面的结论,即Linux中用户的信息是以数字编号uid/gid来存储的,并不会直接存储名字信息。同样的,如果修改/etc/group文件中gid=0对应的组名,再次查看/etc/profile时,其用户组的名字也会改变。

图2-7 /etc/passwd中用户名映射信息图

图2-8 profile文件拥有者信息图

修改/etc/passwd文件中的用户名,可以修改用户名,例如将root修改为admin;而修改/etc/group文件中的组名,可以修改用户组的名字。因此,超级用户的名字(root)也是可以修改的,这个修改某种程度上会增强系统的安全性。

(2)不要轻易改变用户名同uid的对应关系

正常情况下,用户名和uid是一对一的。但是CentOS 8并不会阻止用户修改/etc/passwd,将用户名和uid变成多对一或者一对多。但是这种混乱的关系很容易出错,实际使用中,不要轻易改变用户名同uid的对应的关系,这个原则对于用户组同gid同样适用。

(3)gid是groups的第一个元素

一个用户可以属于多个用户组,这些用户组的集合就是groups,gid是groups的第一个元素,使用示例说明如下。

1)先使用useradd命令创建一个普通用户user,命令如图2-9所示,-m选项表示创建user的home目录,其路径是/home/user,创建后,使用ls来验证home目录是否创建成功。

图2-9 普通用户创建命令图

2)查看user用户信息,如图2-10所示,user的gid=1000,当前用户组名字也为user,groups中只有1个元素。

图2-10 普通用户创建命令图

3)为user用户添加root用户组,如图2-11所示,使用的命令是usermod,-a表示append添加用户,-G表示不删除该用户的原有用户组集合,root是新添加的用户组名字,user是用户名。

图2-11 user用户组添加命令图

4)使用id查看user用户信息,如图2-12所示,user的groups增加了root用户组。此时gid还是1000,这是因为groups中的第一个元素的id就是1000,如果groups中第一个元素的id是0,gid就会变成0,后续还会详细说明。

图2-12 user用户信息图

由上面的操作可知,groups可以有多个用户组,gid是groups的第一个元素。

(4)新建文件会使用当前用户组作为文件的Group

当用户创建一个文件时,会使用该用户的当前用户组作为文件的Group,验证步骤如下。

1)使用su命令将当前用户由root切换到普通用户user,如图2-13所示。

2)在user用户下使用touch命令创建一个文件a,如图2-14所示。

图2-13 用户切换命令图

图2-14 文件新建命令图

3)查看文件a的用户属性,可以看到文件的Group为user,即当前用户组的名字,如图2-15所示。

4)将user用户的当前用户组修改为root,命令如图2-16所示。

图2-15 文件用户属性图

图2-16 当前用户组修改命令图

5)查看用户信息,命令如图2-17所示,gid已经变成0,当前用户组变成了root,用户组集合groups中的第一个元素也变成了0(root),这就验证了前面的结论: groups中的第一个元素就是当前用户组

图2-17 用户信息图

6)新建文件b,并查看文件的用户信息,命令如图2-18所示,文件b的Group为root,而之前创建的文件a的用户组则是user。这就验证了前面的结论: 新建文件会采用当前用户组作为文件的Group

(5)groups的作用

groups是用户组的集合,它用于用户操作文件时的权限判断 。例如有一个文件/tmp/a,它的Group是root,那么,所有属于root用户组的用户对该文件都拥有写权限,如图2-19所示。

图2-18 文件信息图

图2-19 文件a权限信息图

虽然user是普通用户,但是它也属于root用户组,因此,user也拥有对/tmp/a的写权限。如图2-20所示,user向/tmp/a写入字符串aa,输出/tmp/a的内容,验证确实有user所写入的内容aa,说明写入成功。

图2-20 文件a内容图

>>是重定向符号,它表示将标准输出stdout同一个文件关联起来,所有向stdout输出的内容,将不再在屏幕上打印,而是追加到/tmp/a文件的末尾。

因此,如果Linux用户没有操作某个文件的权限,可以看一下该文件的Group是否有权限,如果有,则可以将该Group添加到该用户的groups中,此时用户就拥有操作该文件的权限了,从而避免在root用户下操作该文件。 cSNONsrqhi8Mys4dQ1hbOg8BtB2G5dw+HWZ0o+bptNZD13p3p5MRtlTcKYvY9IcO

点击中间区域
呼出菜单
上一章
目录
下一章
×