一、基本概念
首先,我们要知道,Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以在linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
命令:su [用户名] 功能:切换用户。 例如,要从root用户切换到普通用户user,则使用su user。 要从普通用户user切换到root用户则使用su root(root可以省略),此时系统会提示输入root用户的口令。 实例:
在这里插入图片描述
在这里我们再介绍一个su -,用法是一样的,有一点不同:
su:只切换用户身份,但保持原用户的工作环境(环境变量、工作目录等)。 su - 或 su -l:切换用户身份,并同时切换到该用户的完整登录环境。
实例:
在这里插入图片描述
说明(基本都知道): 从超级用户->普通用户,权限降低; 从普通用户->超级用户,权限提高; 提高有什么用,简单来说,因为很多文件不允许普通用户操作。
二、Linux权限管理
2.1 “权限”详解
首先,我们要知道权限是什么?
权限的本质,就是能或者不能做什么事情
其次,为什么要有权限?
在日常生活中,我们都听过,“谁谁谁没有权限做什么操作……” 权限就是为了控制用户的行为,防止错误的发生。 这里也很好理解,权限首先限制的是角色(谁有我的权限),权限还要求目标必须具备对应的属性(也就是,我想在LeetCode上玩游戏,但是,它不具备玩游戏的“属性”呀)。 所以,权限=角色+目标权限属性(目标有什么权限) 通俗一点,哪个角色有目标的什么权限。 在Linux下,一切皆文件,面对的都是文件,那文件有什么权限呢–>读、写、执行
2.2 权限=角色+目标权限属性
- 看现象: 下面,我们来看一下我在一个目录下列出该目录下所以文件和目录的详细信息:
在这里插入图片描述
这里显示的就是文件或者目录的属性,因为文件不仅仅是内容,文件=内容+属性。 那我们来详解一下这些属性都代表什么意思:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
- 角色前面我们说到:权限=角色+目标权限属性,那在Linux中角色有什么呢,在上图我们看到,有所有者,所属组,那对于每一个角色都要一一列举嘛,显然不是,除了这两个其它的角色都称为“其它”,所以在Linux中:
- 文件访问者的分类(角色)有以下三种:
文件和文件目录的所有者:u—User(所有者) 文件和文件目录的所有者所在的组的用户:g—Group(所属组) 其它用户:o—Others(其它)
对于所属组,我们来简单介绍一下,我们可以用一个公司的部门来做一个形象的比喻:
概念 | 比喻 | 说明 |
|---|---|---|
文件所有者 | 项目负责人 | 这个文件的“主人”,拥有最高的控制权。 |
所属组 | 项目组/部门 | 这个文件所关联的团队,这个团队里的所有成员都享有为这个组设定的权限。 |
其他用户 | 公司其他部门 | 不属于这个项目组的其他所有人。 |
但是,我们在上面的截图中为什么不见Others呢,很简单,Others不需要记录,除了所有者和所属组其它的都是Others。
- 基本权限: 那这些权限具体是什么呢?
在这里插入图片描述
读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 “-”表示不具有该项权限
- 文件类型(提到了就说一下) 接下来,我们吧把角色和目标权限属性(基本权限)和起来看一下文件权限值的具体表示方法。 在此之前,说到这了。看一下Linux中文件类型都有哪些吧:文件类型:
d:文件夹 -:普通文件 l:软链接(类似Windows的快捷方式) b:块设备文件(例如硬盘、光驱等) p:管道文件 c:字符设备文件(例如屏幕等串⼝设备) s:套接口文件
- 权限具体
在这里插入图片描述
在这里插入图片描述
可以看出suxi(所有者)对test.cpp有读写权限,没有可执行权限,当然,所属组要是suxi,就不说了,然后,其它角色只有读权限。 这还是比较好理解的。 那下面我们来看一下如何改变权限。
三、文件访问权限的相关设置方法
3.1chmod(最常用)
功能:设置文件的访问权限格式:chmod [参数] 权限 文件名常用选项:
-R-> 递归修改目录文件的权限- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
用户表示符+/-权限字符
+: 向权限范围增加权限代号所表示的权限-: 向权限范围取消权限代号所表示的权限=: 向权限范围赋予权限代号所表示的权限
用户符号:
u: 拥有者g: 拥有者同组用户o: 其它用户a: 所有用户
实例:
在这里插入图片描述
3.2 文件权限值的表示方法
- 字符表示方法(前面说过)
- 进制数值表示方法(重点说一下)
在这里插入图片描述
其他位类似,那也就是说,对于任意一个角色,最大的数字组合(权限)为111,最小为000。此时,转为8进制即为最大7,最小0;
所以我们也可以通过三位8进制数字在改变权限,实例:
在这里插入图片描述
我们上面改变了文件的权限属性,如果我们要改变权限的所属角色,怎么办?看下面。
3.3 chown
功能:修改文件的拥有者格式:chown [参数] 用户名 文件名实例:
在这里插入图片描述
这里,我们再说一个提高权限的方法,也是最常用的:sudosudo是用来进行指令的短暂提权的。它允许一个被授权的普通用户以另一个用户(通常是 root 超级管理员)的安全权限来运行命令,而无需知道 root 的密码,也无需长时间保持在 root 权限状态。但是,它需要我们被授权,也就是把我们用户放在一个类似于白名单的文件中。使用前需在 /etc/sudoers 文件中授权,所以,就需要改文件信息,使用vim。这个我后面在讲解vim编辑器的时候会有所说明。 现在就先用su吧,这里就先了解一下。看实例:
在这里插入图片描述
3.4 chgrp
功能:修改文件或目录的所属组格式:chgrp [参数] 用户组名 文件名常用选项:-R递归修改文件或目录的所属组实例:
在这里插入图片描述
提醒:su之后退回到普通用户Ctrl+d就行,或者exit。
3.5 细节问题
- 一个普通用户可以改任何人的文件权限吗? 不可以,普通用户只可以改变自己的文件权限。(能改的话就乱套了)
- 如果我们没有权限会怎么办,前面已经遇到了。 系统会拒绝让我们访问
在这里插入图片描述
- 看现象:
在这里插入图片描述
即在确认权限信息时,系统确认的顺序是所有者、所属组、其它;在Centos下,用户角色只确定一次。
- root超级用户不受权限限制。
- 可执行权限 != 文件可执行 你给test.cpp执行的权限它也执行不了。文本源码(如 .c/.cpp/.txt)即使设置了 x,没有编译成二进制,也无法“直接运行”。