目录
2.3用户与组的相关操作
2.3.1用户、组的基本概念
Linux操作系统中,用户(User)和组(Group)是权限管理的基础。用户账户具有唯一的用户ID(UID),通常从1000开始,每个用户有一个主目录存放个人文件,登录Shell用于登录系统,密码保护用户账户,存储在/etc/shadow。组账户由组ID(GID)标识,用于将用户分组以便统一管理权限,每个用户有一个默认组,通常与用户名相同,也可以属于多个附加组。
用户和组的管理包括使用useradd创建用户,userdel删除用户,usermod修改用户信息,groupadd创建组,groupdel删除组,groupmod修改组信息,以及使用usermod -aG将用户添加到附加组。文件权限分为文件所有者权限、组权限和其他用户权限,分别控制不同用户对文件的访问。
2.3.2用户、组所存在的文件夹
2.3.2.1用户信息文件
用户的所有信息存储在/etc/passwd文件中,我们可以使用cat命令来查看用户信息文件,我们管理员新建的用户都在该文件的最后,我们可以使用tail命令查看最后几行,我为了方便大家直接使用cat文件来进行查看吧!
我们看到我们电脑中之前创建的user01和user02文件,我们发现它们在该文件的显示分为了好几个信息段,我们以 : 来区分到底分了哪几段,发现共有七个分号。接下来我们开始每个分号开始分析。
以user01举例:
1.user01:用户名,不能使用数字。
2.x:因为密码不能直接展示,所以暂时使用x代替
3.1001:UID用户的ID代号,代号分为三类
:UID为0的时候代表的就是超管
:UID在1000以内的时候代表系统用户
:UID在1000往上代表的是用户新建的用户
4.1001:GID组信息,GID一般是和UID是相同的
5.:(这里仅有一个‘:’不是没有内容哦):用户的描述,对帐号的额外描述与补充,一般都是用户的名字,描述也是用户的名字
6./home/user01:用户在计算机中的信息的存储地址
7./bin/bash:命令解释器:
解析命令:Shell 读取用户输入的命令或脚本文件中的命令,并解析这些命令。
执行命令:解析后,Shell 会找到对应的可执行文件并执行它们。
假设我们将bin/bash的代码改成任意字母,对应的用户都无法登录系统,因为没有正确的路径解析用户的操作了,就连用户输入的密码都没有对应的文件去解析了。
也可以换种方式去理解:
如果你将
/bin/bash
的路径或名称改为任意字母,那么系统将无法找到这个解释器,因为它不知道去哪里寻找这个程序来执行命令。这就像是你告诉邮递员去一个不存在的地址投递邮件,邮递员无法找到这个地址,所以邮件也就无法送达。
2.3.2.2用户密码文件
用户的密码文件通常存储在cat/ets/shadow中
我们打开这个文件,发现格式还是和上述一样,我们以‘;’进行区分这几个代码段,发现共有8个代码段
以user01举例:
1.user01:代表用户名。
2.$6$asdkasjlgfalksglkagagahaw:这种情况是密文形式的密码
密码分为两个部分、三种情况:
情况一:正常的密码形式
第一部分加密算法的开头:可以用$n$进行区分,表示使用的是哪种加密算法
$1$:使用MD5加密算法
$2$:使用Blowfish加密算法
$3$:可调节键值的哈希加密算法
$4$:SSHA-256加强版的哈希函数加密算法
$5$:SSHA-256加密算法
$6$:SSHA-512加密算法
情况二:如果在该字段出现‘*’表示封锁的意思,表示被封锁的用户不能被使用。
情况三:如果在该字段出现‘!!’表示用户的密码已经过期。
3.19894:最后修改时间(计算方法:最后一次修改密码的时间-1970.1.1),单位为天
4.0:最小可修改密码的时间间隔。0表示当天就可以修改密码,假设是5,表示修改完密码之后五天之后才能再进行修改
5.99999:密码有效期(天)表示密码能使用多长时间,密码的有效期天数,也称为令牌
6.7:警告时间:假设上一字段的密码有效期为14天,当我们设置了警告时间之后(假设设置为7),那么在第七天的时候就会出现警告信息的弹窗“您的密码还有14-7天时间过期”
7.不活动时间:表示用户不登陆系统时,密码为其保留多少天的天数。假设为28,则表示用户不登陆系统,密码可保留28天,这28天表示用户是不活跃用户,28天以后冻结用户禁止登陆,期间登陆一次,就重新计算。
8.失效时间,超过这个时间账号就不能用了,账号只有n天
剩余的部分:保留,后期需要再使用
2.3.2.3组信息文件
组的概念:组(Group)是一个重要的概念,用于管理用户权限和资源共享。而组信息文件就是将在某些方面上(可能是对文件的查看、操作某文件、修改文件上)具有相同的权限而组成的文件夹。
组信息文件一般存储在etc/group中,用于管理用户所在的组。
我举一个生动的例子就可以明白了:
在QQ中我们存在绿钻、蓝钻、黄钻、红钻等等好几种不同种类的钻石,每种钻石都可以在音乐、QQ空间、游戏等方面有不同的权限;假设我们充值了绿钻,那么我们就会在听音乐方面享有特权,从我们的角度来看我们是用户,在学习组之前,上述这样的情况我们通常都会创建对应的用户,然后给该用户赋上相关的权限,但是网络中存在上亿的用户,难道我们都要为每个用户设置特权吗?
其实不用,我们可以设置多个组,每个组都享有不同的权限(类比QQ中的各种各样的钻)用户充值的时候我们只需把用户拖入对应的组中,因为组有权限,所以拖入组的用户也享有对应的权限,当我们的钻石过期的时候,我们可以直接在组中将过期的用户再放入普通权限的组中即可。
我们使用cat命令查看组信息文件,
cat /ets/group
我们可以查看到下列内容
组信息的每一行共有四列组成,我们可以把它称为四个信息段
我们以root组举例
1.root:表示组名第一个冒号前的信息是组名。
2.x:表示组密码,与用户的密码占位符相同。
3.0:组ID,又称为GID,用于表示组的编号,两个组ID不能相同,用来区分计算机系统中的不同的组。
4.‘:(这里也是只有一个冒号,不要混淆)’:组成员,该组包含的成员,默认为空值,所以我们才会看到新建的组,组成员仅有一个冒号。
2.4用户与组的管理
2.4.1用户的管理
2.4.1.1创建用户(未指定选项)
注意:在root管理员模式下才可以新建用户,普通账户只有临时提权(后期会讲:简单来说就是将自己的权限暂时提升到管理员的权限)在得到管理员权限之后才能操作其他用户。
命令如下:
useradd + 用户名
用户名创建完成之后,会提示有邮件发送。当然,也不是只有创建完用户名之后才会发送邮件,我们平时遇到的某些可能涉及到安全性的问题或者报错也会通过文件发送给管理员。发送邮件的路径一般在/var/spool/mail文件夹下
2.4.1.2创建用户(指定选项)
指定选项创建用户可以指定选项的范围为上述 cat/etc/passwd中的信息段。创建指定选项的用户账户就相当于给某个用户指定的识别信息。类似在自然界中我们会给动物做标记一样,这样就可以在千万种一样种类的动物之间一眼就能看见你“标记”的动物了。
命令如下(以创建特定的UID的用户举例):
useradd + 用户名 -u +uid
命令如下(已创建特定用户信息文件地址的用户举例)
useradd + 用户名 -d 目录位置
2.4.1.3检验用户是否被成功创建
CentOS给我们提供查找用户的思路非常多,我这里仅列举出四种常用的方法:
1.查找法:使用grep +用户名 在/etc/passwd用户信息中进行查找。grep user02 /etc/passwd
2.显示法;因为用户的所有信息文件都存在在根文件夹下的home子文件中,我们可以使用ls查看子文件命令查找home文件夹下是否存在对应的用户名文件夹
3.id法:我们可以直接使用id + 用户名 来对用户进行检索,如果存在,则显示uid=1001(user01)gid=1001(user01) 组=1001(user01)。显示用户id和组id及所在的组
不存在的话显示id:user02:no such user
2.4.1.4删除用户
删除用户的命令如下,前提是必须现处在管理员账号下才可以对用户进行删除,普通用户的权限到不了删除其他用户的地步(除非提权)。
userdel + 用户名
我们也可以用一句命令删除多个用户,这时候需要另外添加一个 - r 选项,- r 选项可以一次性删除多个用户(前提也是需要在管理员账户下才可以)。
userdel -r 用户名1,用户名2......
删除成功之后不会出现弹窗,删除失败会出现提示信息“用户名”不存在。
2.4.1.5为用户配置密码
我们创建完用户的账号之后,必须要创建密码,否则没有密码只有账户名的用户是无法完成登录的。配置密码的命令如下:
passwd + 用户名
在弹出的提示信息中输入用户名的密码
重复输入一次密码进行确认即可
我们虽然输入了密码,但是密码是以密文的形式存储在计算机中的(类似我们先前查看的 cat /ets/shadow文件一样)。如果我们在账户下直接输入passwd我们会创建基于当前账户的密码,如果有密码的话需要事先输入原密码。(无论是管理员账户还是普通的用户账户都是这样)
例如:如果我们在root下直接输入passwd之后回车,那么我们更改的就是root的密码,或者我们在user01中直接输入passwd,则我们修改的是user01账户的密码......
2.4.1.6修改用户的属性
1.存在场景:我们创建完了一个user03,在cat /ets/passwd查看用户信息的时候发现user03的UID不是我们想要的,如何修改它的UID呢?
这时我们可以使用usermod修改用户属性的 -u选项来修改用户的属性。
usermod -u 新用户ID 用户名
上述场景即为修改用户UID的操作步骤,创建完user03之后(本步骤略),直接使用usermod的-u选项更改对应用户的UID,更改语句不关心旧的UID是什么,只关心新的用户的UID应该是什么。
2.存在场景:我们想封禁对user03的登录(类似游戏的封号操作的原理)也是需要修改用户的属性来实现,我们需要使用-s选项来改变用户的shell默认登录路径,只要是默认登录路径不在/bin/bash中用户都无法完成登录,具体语法如下
usermod -s 新的shell地址 + 用户名
这样的原理和上面讲的/bin/bash的原理是一样的,我们的解释器无法找到该用户的登录命令,就不会理会该用户的登陆操作了。
我们首先使用user03正常登录系统(如下图所示)
当我们修改user03的shell登录改为了‘/’(如下一图)那么我们再来看看能不能登陆吧!
指令成功(验证方法就是在登陆界面没有user03的账户并且使用user03账户登录之后会弹回到如下界面要求用户重新选择账户进行登录)
3.会员过期处理:在实际的操作中,假设我们对自己的QQ开通了绿钻,如果我们绿钻过期了我们可以更改附加组组号,就相当于把自己从有绿钻特权的组中踢出。
usermod -G +指定用户的附加组
附加组与基本组的概念与区别:
基本组:用户账户一开始被创建的时候所属于的组,每个用户都有一个基本组,这是用户创建文件时默认的组归属。基本组通常与用户的主要工作和文件系统访问权限相关。
基本组就如上图,默认的uid和gid相同的那个组就是创建用户时自动创建的基本组
附加组:用户可以属于多个附加组,这些组提供了用户访问其他资源的权限,也可以修改用户的附加组为用户添加或者删除对应的权限。附加组允许用户在不同的上下文中拥有不同的权限。
相同点:本质都是组,组的特性附加组和基本组都符合
不同点:附加组和基本组的立场不同,叫法也不同,需要我们静下心来认真思考某组对于某用户到底是附加组还是基本组
具体的区分我下面给了一张思维导图供大家查看
4.更改用户的基本组:
usermod -g 需要更改的目的gid 更改哪个用户的,这里填写用户名
例如更改user02的基本组为1001
usermod -g 1001 user02
验证:
上图为原先的user01的基本组为1001
上图的user02的基本组为1009(用了两种不同的验证gid的方法,大家哪种熟练用哪种即可)
我们执行完usermod -g 1001 user02命令之后再次验证一下(如下图),我们发现user02的gid已经变成了1001了,说明user02的基本组变成了1001,这意味着 user02
的默认组现在是 user01
的基本组,但是这通常会影响 user02
创建的文件和目录的默认组归属。
2.4.2组的管理
2.4.2.1组的创建(未指定选项)
使用groupadd命令创建新的用户组(命令如下)
groupadd + 组名称
如果我们不更改组的GID,那么GID默认是从上一个GID继续向下分配的(如下图所示)。
验证组是否被创建成功的方法:使用cat /etc/group查看刚刚创建的组的名称有没有在最后一行显示。
2.4.2.2组的创建(指定选项)
如果我们不想按照上述的步骤进行顺序的组号的创建,想要自定义非顺序的组号,这个时候我们可以指定组的组号(指定GID)命令如下:
groupadd +组名称 + -g +自定义的GID
2.4.2.3组查询
我们组创建完成之后想要对组进行验证查看组是否被成功创建,我们同样可以使用查询命令来实现(命令如下)
grep 组名称 + /etc/group
2.4.2.4组的删除
同样,用户中存在对用户的删除,如果我们一个组不需要了,也需要完成对组的删除,组删除的命令为groupdel + 组名称
groupdel + 组名称
注意:我们是通过组名称对组进行删除的而不是使用组号对组进行删除!
2.4.2.5观察组的信息
创建完一个组之后,如果我们想观察组的信息,我们可以使用grep命令进行查看
grep 组名称 或 组号(gid) + /etc/group
稍微解释一下弹出的信息吧
zu1:表示我们组的名称
x:表示组的密码,当然这里的x肯定不是组的密码,这时一个密码的占位符,毕竟谁也不想自己最重要的组的密码在让别人一个grep就轻松得到了
1010:gid
2.5提权
如果我们临时使用普通用户的账号进行计算机的操作,但是因为普通账号的权限有限,如果我们想要进一步的操作某些管理员账号才能执行命令,这就涉及到了提权。
我们平时练习的时候一直在root管理员账户下进行操作,有很多问题可以执行的直接原因就是因为我们管理员的身份太高了。
在正儿八经的工作的时候是不能随便下方管理员账户的,最多是将你的账号按部门进行分类,管理员会根据部门给你们分配对应的权限,在你的权限之内的操作你可以直接执行,但是超过这个范围我们只有提权(将自己的身份暂时转换成管理员)才可以执行。
涉及到提权,提权又可以分为永久提权和授予用户临时的权限。
2.5.1永久提权
假设我们现在使用的账户的名称是user01普通账户,我们想永久使用管理员的权力的话可以使用su +用户名命令
该原理不是让普通用户直接变成管理员,而是用普通用户的身份登录到管理员账户从而进行操作,当管理员下机之后你还是普通用户
su + 管理员账户名
上述命令的作用是在当前窗口永久切换成对应的用户,有两种情况
情况1:管理员切换到普通用户
su 用户名
直接切换到对应的用户的账户,不需要使用密码验证
情况2:普通用户切换到普通用户
su 用户名
一个普通账户直接切换到另一个普通账户
需要验证(输入)切换到的账户的密码
2.5.2临时提权
如果我们不想直接切换用户而是使用一条或者多条带有管理员权限的命令,我们可以使用sudo + 命令,只对sudo的命令提升权限。
sudo + 命令
但是我们发现上图user01使用sudo命令之后并没有成功,因为我们的用户user01没有被存放在 /etc/sudoers文件中
敲黑板,重点来了!!!!
sudoers文件定义了哪些用户可以使用sudo命令,是可以使用sudo的全部命令还是只能使用sudo的一部分的内容。这句话说起来简单做起来确实难,要考虑到配置文件的格式的书写等问题。举个例子方便大家理解:
将user01编入sudoers的方法
1.首先我们先查看sudoers中存在哪些可以使用sodu命令的普通用户
使用如上命令我们可以进入并查看sudoers中富有权限的用户,查看方法就是文件中的第107行的信息,查看有无用户名,没有的话说明只有管理员能任意操纵操作系统,没有任一用户可以有管理员的sudo权限,除非su登录到管理员
2.将用户编入sudoers中
语法:
用户名 + ALL=(ALL) ALL
表示用户名拥有了所有的权限
注意:拥有了所有权限的user01用户还是不能进行sudo vim/etc/sudoers防止user01赋予其他所有用户最高的权限。为了防止该问题出现,我们一般会只给user部分的sudo管理员权限的命令。
如下所示:我们可以这样改:
用户名 +ALL=(ALL) NOPASSWD:+可以使用的命令的路径
以上述命令为例,我们只允许了user01用户对所有文件的ls查看功能,其他的所有功能都没有给到,所以即使user01用户想不开删库,他也不能执行只有管理员才能执行的删库的命令。
上述照片是普通用户user01可以查看管理员才能看的root文件夹的内容(且因为使用了NOPASSWD命令所以不用执行一步输入一次密码),而user02却不可以(如下)
我们再让user01执行一次其他的管理员命令(因为我们只写了ls命令到sudoers文件中,所以按理说user01的ls命令是和管理员同级的,其他的都不能使用),看看是否成功:
上述图片我们先使用root的ls查找到了/root文件夹下有一个1文件,本来/root文件夹只有root管理员才能进去查看,并且我们的user01没有写入cat命令到/ets/sudoers中,所以不能使用cat命令查看/root/1文件,试验成功!
如果不想每一步都输入密码,可以重新在sudoers文件下找到对应有管理员权限的用户,在ALL=(ALL)之后添加“NOPASSWD:”其余内容不变即可。
user01 ALL=(ALL) NOPASSWD: /bin/cat
讲到这里我们的第二章基本告一段落了,下一章我们直接开进Linux中的“权限”的知识的讲解,想了解的家人们拿好小板凳记得听课~