OS8.【Linux】基本权限(上)

目录

1.指令的运行原理

bash命令行

Shell简单的定义

命令行解释器存在的意义

2.用户权限

定义

用户的分类

单独一个su

[su -](#su -)

[su 用户名](#su 用户名)

sudo+指令

3.文件权限

先看第一列

解释文件后缀名没有直接的意义

块(block)设备文件举例

字符(character)设备文件举例

管道(pipeline)文件举例

[创建管道文件的指令: mkfifo](#创建管道文件的指令: mkfifo)

fifo可用于终端之间通信

3种角色

剩余几列

练习:描述下图1.c文件的权限

实验:以其他人的身份修改文件

4.文件权限的修改

chmod指令

[chmod u+或-??? g+或-??? o+或-???](#chmod u+或-??? g+或-??? o+或-???)

[chmod a+或-???](#chmod a+或-???)

使用8进制数值修改权限

chown指令

[格式1:chown 用户名 文件名](#格式1:chown 用户名 文件名)

[格式2:chown 拥有者:所属组 文件名](#格式2:chown 拥有者:所属组 文件名)

chgrp指令

4.权限在进行认证时,只能以一个身份认证


1.指令的运行原理

bash命令行

例如以下内容:

@前的guest是用户名,@后的zhangcoder是主机名,~/folder是当前目录,对于普通用户,$是命令提示符

对于超级用户root,#是命令提示符

(~表示该用户的家目录)

1.输入指令的过程,实际上就是输入字符串

2.指令的本质是执行特定路径下的编译好的程序和脚本

3.而通过图像化界面或者命令行解释器来与操作系统对接,帮助用户运行指令,如下图:

Shell简单的定义

由于Shell是Kernel的"壳",可通过Shell与Kernel沟通

是命令行解释器,将使用者的命令翻译给核心(Kernel)处理,同时,将核心的处理结果翻译给使用者

命令行解释器存在的意义

1.解释命令,方便用户使用

2.拦截非法指令,防止破坏操作系统

2.用户权限

定义

指的是某个特定的用户具有特定的系统资源使用权力,可以简单理解为权限==人+事物的属性,分两类:

1.权限和"人"有关,是普通用户?是超级用户?

2.文件可读?可写?可执行?

用户的分类

root:超级用户,基本不受约束,具有最高权限

普通用户:是通过手动新建得到的,有权限的约束

无论是超级用户还是普通用户都要设置密码

单独一个su

观察使用su指令的前后

用户: 从guest切换到了root

路径: ~/folder和/home/guest/folder是等价的

结论: su指令仅切换身份,没有改变所处的目录

su -

观察使用su -指令的前后

用户: 从guest切换到了root

路径: 从~/folder切换到了~

结论: su -指令切换身份,并改变所处的目录为根目录

su 用户名

以普通用户的身份使用"su 用户名"需要密码,而以如果以root的身份使用,不需要输入密码(root有最高权限)

使用su后如果想退出,可以使用exit指令或者按下Ctrl+D

sudo+指令

作用:前缀sudo对一条指令提高权限(变为root)

如果出现画红框的内容,说明当前普通用户不在系统信任的白名单sudoers里,需要手动添加该用户至sudoers

3.文件权限

三种:1.可读 2.可写 3.可执行

以下面三个文件为例子,看画红框的部分

先看第一列

文件的类型(Linux后缀名没有直接的意义,因为用文件属性来区分文件的类型,一般不用文件的后缀名)

-指的是普通文件(例如文本,可执行程序),d指的是目录文件,其他: b指的是块(b lock)设备文件(例如磁盘文件),c指的是字符(c haracter)设备文件(例如键盘,显示器),p指的是管道(pipeline)文件

解释文件后缀名没有直接的意义

a.txt通过后缀名看,貌似是txt文本文件,但是中有x,是可执行文件

虽然文件后缀名没有直接的意义,但不代表后缀名没有用,后缀名可用于软件识别文件类型

修改后缀名为.c后,gcc执行没有问题

gcc和Linux操作系统不同,gcc是运行在Linux上的软件,和操作系统无关

块(block)设备文件举例

字符(character)设备文件举例

管道(pipeline)文件举例

创建管道文件的指令: mkfifo

mkfifo的fifo是f irst i n f irst out的缩写

fifo可用于终端之间通信

按图操作演示即可:

3种角色

拥有者,所属组和其他人

拥有者: 创建了一个文件,简单理解为文件的创建者就是文件的拥有者

所属组: 例如一个服务器上有多个小组在用,不同组负责不同的项目,有对应不同的目录

其他人: 除了拥有者和所属组之外的其他人

root、普通用户和3种角色的对应关系如下:

即: 具体的人(超级用户和普通用户)对应不同的角色(拥有者,所属组和其他人)

剩余几列

r表示可读, w表示可写,x表示可执行,-表示对应权限的位置没有权限

对应权限的位置没有权限的理解:

例如下图画圈的-,为没有可执行的权限(从左向右依次为是否可读、是否可写、是否可执行)

要分3组看,每3列为1组:

每组的权限依次属于拥有者、所属组和其他人

后面两列依次指的是拥有者和所属组的具体名称

最近创建或修改的时间(下图画框的部分):

练习:描述下图1.c文件的权限

分角色描述即可:

对于拥有者,有可读可写的权限,但没有执行的权限;对于所属组,有可读可写的权限,但没有执行的权限;对于其他人,只有有可读的权限,没有可写和执行的权限;

实验:以其他人的身份修改文件

1.c是guest用户创建的,对于其他人只有可读的权限,则以zhang用户的身份修改1.c文件,会报错

但如果以root身份向1.c文件写入字符串,是可以的,因为root具有最高权限

4.文件权限的修改

chmod指令

能更改文件权限的只有拥有者和root

全称:change mode,注:chmod虽然修改了权限,但对root而言是没有用的.因为root具有最高权

chmod u+或-??? g+或-??? o+或-???

以三个具体的指令来看用法:

cpp 复制代码
chmod u-r--,g-w-,o-rw- 1.c

解释:u,g,o后面都紧跟着一个**-,表示去除权限**

对于拥有者(u),只去除权限r,对于所属组(g), 只去除权限w,对于其他人(o),去除权限r和w

执行结果:

cpp 复制代码
chmod u+rwx,g+rwx,o+rwx 1.c

解释:u,g,o后面都紧跟着一个**+,表示添加权限**

对于拥有者(u),所属组(g), 和其他人(o),都添加权限r、w和x

执行结果:

3.也可以只修改其中某个角色的权限

cpp 复制代码
chmod u+rw- 1.c

*注:有可执行权限不代表文件可执行,是否可执行要看文件本身

结论:+为添加权限,-为去除权限

chmod a+或-???

选项a代表所有人(拥有者、所属组和其他人,即all的首字母),chmod a+或-???代表对所有的"人"操作

现有以下test.txt文件

要对所有人添加可执行权限,可写如下指令:

bash 复制代码
chmod a+x test.txt 

要对所有人去除所有权限,可写如下指令:

bash 复制代码
chmod a-rwx test.txt

使用8进制数值修改权限

遵循以下表操作:

|-----|-----|--------------|
| 八进制 | 二进制 | 权限 |
| 0 | 000 | --- |
| 1 | 001 | --x(只可执行) |
| 2 | 010 | -w-(只可写) |
| 3 | 011 | -wx(可写可执行) |
| 4 | 100 | r--(只可读) |
| 5 | 101 | r-x(可读可执行) |
| 6 | 110 | rw-(可读可写) |
| 7 | 111 | rwx(可读可写可执行) |

有以下test.txt文件

执行指令:

bash 复制代码
chmod 123 test.txt 

123:1为拥有者权限,2为所属组权限,3为其他人权限

查表可知:

|---|-----|------------|
| 1 | 001 | --x(只可执行) |
| 2 | 010 | -w-(只可写) |
| 3 | 011 | -wx(可写可执行) |

对于拥有者,test.txt只可执行

对于所属组,test.txt只可写

对于其他人,test.txt可写可执行

chown指令

作用:修改文件的拥有者(全称: change owner)

格式1:chown 用户名 文件名

guset用户下执行指令:

bash 复制代码
chown zhang test.txt 

但发现服务器拒绝执行:

一般有两种解决方法:

解决方法1:提高权限

bash 复制代码
sudo chown zhang test.txt 

解决方法2:切换到root下执行

格式2:chown 拥有者:所属组 文件名

切换到root下执行以下命令:

cpp 复制代码
chown root:guest test.txt

发现已经修改了拥有者和所属组:

chgrp指令

作用:修改文件的所属组(全称: change group)

和chown一样,一般有两种解决方法:提高权限或者切换到root下执行

*注:other没有单独的指令,chown和chgrp已经间接修改了other

4.权限在进行认证时,只能以一个身份认证

现对test.txt做如下处理:

guest账户下对guest家目录的test.txt处理:

bash 复制代码
chown guest:guest test.txt
chmod u+r-w-x,o+r+w-x test.txt

对test.txt写入数据,看看有什么反应:

发现拒绝访问

奇怪的是拥有者和所属组都是guest,而且所属组具有写权限,为什么不能向test.txt写入数据?

引出以下结论:

结论:权限在进行认证时,只能以一个身份认证,++先看拥有者,再看所属组++.如果拥有者满足,不会看所属组

相关推荐
独行soc27 分钟前
2025年渗透测试面试题总结-2025年HW(护网面试) 01(题目+回答)
linux·科技·安全·面试·职场和发展·区块链
码里看花‌38 分钟前
网络编程简介与Netty实战:从入门到高性能Echo服务器
运维·服务器·网络
独行soc1 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 02(题目+回答)
linux·科技·安全·面试·职场和发展·渗透测试·区块链
海上彼尚1 小时前
NestJS中实现动态Cron任务管理
linux·服务器·ubuntu·node.js
cui_win2 小时前
【内存】Linux 内核优化实战 - vm.max_map_count
linux·运维·jenkins
遗忘妳2 小时前
LVS 负载均衡群集
运维·负载均衡·lvs
problc2 小时前
n8n:轻松自动化您的工作流
运维·人工智能·自动化
guygg882 小时前
Linux 内核源码分析---proc 文件系统
java·linux·服务器
Little-Hu2 小时前
linux使用vscode加cmake代替vim、gcc、gdb、makefile编辑、构建、调试程序
linux·vscode·vim
蚕与禅2 小时前
从零学起VIM
linux·编辑器·vim