当前位置: 首页 > news >正文

Linux的权限概念

Linux的权限概念

一:Linux下的用户

1. 用户分类:

在Linux下存在两种用户:超级用户(root)和普通用户(user)。

  1. 超级用户(root):可以在Linux下做任意事情,基本不受限制。
  2. 普通用户(user):在Linux下做有限的事情,会受到很多限制。
  3. 在Linux中超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

2. 用户切换:

在Linux中通过 su 命令来实现用户的切换。
原则:若想要从超级用户切换到普通用户,直接 su + user 就行,但是若想要从普通用户切换到超级用户还需要超级用户的密码。
注:但是这里我在学习的时候,直接 su的话,在切换用户的时候,工作路径有时候会切换不过来,在通过大模型的查询之后,建议在切换用户的时候 加上 - 来确保更新工作路径。

二:Linux权限管理

前置认识:

在学习权限之前,我们先对Linux下的权限有一个刻板认识:
权限 = 人(用户) + 文件属性(事物属性)

1. 文件访问者的分类(人)

  1. 文件和文件目录的所有者:u-User(拥有者)
  2. 文件和文件目录的所有者所在的组的用户:g-Group(小组)
  3. 其它用户:o—Others(其他人)

2. 文件类型和访问权限(事物属性):

(1)文件类型:
  1. d:文件夹。
  2. -:普通文件。
  3. l:软链接。(类似Windows的快捷方式)
  4. b:块设备文件。(例如硬盘、光驱等)
  5. p:管道文件。
  6. c:字符设备文件。(例如屏幕等串口设备)
  7. s:套接口文件。
(2) 基本权限:
  1. 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
  2. 写 (w/2):Write对文件而言,具有修改文件内容的权限;对目录来说,具有新增、删除、修改目录下文件名的权限。
  3. 执行 (x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入到该目录的权限。
  4. – :表明不具有该项权限。
(3)文件权限值的表示方法:
a. 字符表示方法:

符号表示法的组成规则:

  1. 第 1 个字符:文件类型(-、d、l等)。
  2. 第 2-4 字符:所有者(user)权限。
  3. 第 5-7 字符:组用户(group)权限。
  4. 第 8-10 字符:其他用户(others)权限。

在这里插入图片描述

b. 八进制数值表示法:

八进制权限计算规则:
每位数字由 r(4)、w(2)、x(1)相加:

  1. 0:—(无权限)
  2. 1:–x(仅执行)
  3. 2:-w-(仅写)
  4. 3:-wx(写 + 执行)
  5. 4:r–(仅读)
  6. 5:r-x(读 + 执行)
  7. 6:rw-(读 + 写)
  8. 7:rwx(读 + 写 + 执行)
    在这里插入图片描述
(4)文件访问权限的相关设置方法:
1. chmod
a. 功能:

修改配置文件的访问权限

b. 格式:

chmod + 参数 + 针对用户 + 文件名

用户表示符+/-=权限字符

  1. +:向权限范围增加权限代号所表示的权限
  2. -:向权限范围取消权限代号所表示的权限
  3. =:向权限范围赋予权限代号所表示的权限
  4. u:拥有者
  5. g:同组用户
  6. o:其它用户
  7. a:所有用户
c. 实例:

chmod u+x hello.txt :为所有者(User)添加执行权限
chmod g-w hello.txt:移除组用户(Group)的写权限​
chmod o=r hello.txt :为其他用户(Others)设置只读权限​

chmod 644 hello.txt
6(所有者):rw-(读 + 写)
4(组用户):r–(只读)
4(其他用户):r–(只读)
chmod 755 hello.txt
7(所有者):rwx(读 + 写 + 执行)
5(组用户):r-x(读 + 执行)
5(其他用户):r-x(读 + 执行)

2. chown
a. 功能:

修改文件的拥有者。

b. 格式:

chown + 用户名 + 文件名

c. 实例:

sudo chown newuser hello.txt:将 hello.txt的所有者改为 newuser,所属组不变。
sudo chown :newgroup hello.txt:将 hello.txt的所属组改为 newgroup,所有者不变。
sudo chown newuser:newgroup hello.txt:将 hello.txt的所有者改为 newuser,所属组改为 newgroup

3. chgrp
a. 功能:

更改文件的所属组。

b. 格式:

chgrp + 用户组名 + 文件名

c. 实例:

sudo chgrp developers hello.txt:将 hello.txt的所属组改为 developers(所有者不变)。
sudo chgrp admins file1.txt file2.log:将 file1.txtfile2.log的组均改为 admins

4. umask
a. 功能:
  1. 查看或修改文件掩码
  2. 新建文件夹默认权限=0666
  3. 新建目录默认权限=0777
  4. 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建⽂件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是:mask&(~umask)
  5. 超级用户的默认掩码值为:0022
  6. 普通用户的默认掩码值为:0002
b. 格式:

umask + 权限值

c. 实例:

umask:查看Linux下的默认掩码值
umask 666(权限值):设置默认掩码值为666
注:不用担心自己设置的umask有什么不妥,下次登陆的时候Linux的umask值还会回到初始值,因此我们自己设置的掩码值是暂时性的。

三:目录的权限:

  1. 可执行权限:如果目录没有可执行权限,则无法cd到目录中。
  2. 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容。
  3. 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件以及在目录中修改文件名。

关于目录权限的小总结:

  1. 目录的可执行权限是表示你可否在目录下执行命令。
  2. 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录,即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进⼊目录读取目录下的文件)
    (其实可以这样理解:你有某个小区房子的钥匙,你是可以进入这个房子的,但是小区保安连小区们都不让你进,因此你也就进不去这个房子了)
  3. 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
  4. 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

四:粘滞位

先来思考一个问题?假如我们想实现不同用户之间的文件共享,要怎么做呢?

首先肯定不可能在某一个用户的家目录下,因为对于不同普通用户之前是不能进去其家目录的,只有超级用户才能进入,因此该方法行不通。
其次有人会想到在超级用户的系统路径下弄一个共享目录,那我们来看一下这样行不行得通。

在这里插入图片描述
首先我们在root的系统路径中建立了一个share的共享目录,
在这里插入图片描述
然后我们又增加了w权限来让其他普通用户可以在目录里面增加新的文件,以此实现文件共享。
接着让两个用户来进行文件共享操作:
在这里插入图片描述
在该共享目录中实现了不同用户创建的文件共享,但若此时有第三者进入,并且恶意删除你的文件呢?
在这里插入图片描述
请问这合理吗?你和其他一个用户共享的文件被第三者恶意删除了,在技术层面是合理的,因为在创建share目录的时候是让other都对该目录有w的权限,因此就可以对该目录下的文件进行删除操作,但是在逻辑层面上不合理的,换句话说这跟我们想要达到的效果相悖,因为我们是想要实现不同用户间的文件共享,但是此时出现了恶意删除共享文件的情况,因此Linux就推出了粘滞位这一概念来解决这一问题。

当一个目录被设置为"粘滞位"(用chmod +t ),则该目录下的文件只能由

  1. 超级管理员删除
  2. 该目录的所有者删除
  3. 该⽂件的所有者删除

在这里插入图片描述
可以看到在root的系统路径下其实就存在着这样一个目录,它具有t属性,可以用来实现文件共享。

在这里插入图片描述
在引入粘滞位之后就避免了第三者恶意删除共享文件的情况。

http://www.dtcms.com/a/312660.html

相关文章:

  • 关于Web前端安全之XSS攻击防御增强方法
  • 【视频内容创作】PR的关键帧动画
  • 机器学习第三课之逻辑回归(三)LogisticRegression
  • Python-初学openCV——图像预处理(五)
  • 团队独立思考的力量
  • 论文阅读:DMD蒸馏 | One-step Diffusion with Distribution Matching Distillation
  • Python 动态属性和特性(定义一个特性工厂函数)
  • 「源力觉醒 创作者计划」_文心大模型4.5系列开源模型, 从一行代码到一个生态:聊聊开源战略那些事儿,顺便扯扯文心大模型 4.5 的使用心得
  • zookeeper分布式锁 -- 读锁和写锁实现方式
  • gpu instancer crowd 使用自定义材质并且只修改单个物体的材质参数
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 渗透高级-----应急响应
  • 机器翻译的分类:规则式、统计式、神经式MT的核心区别
  • 新电脑上GitHub推送失败?全面排查与解决指南
  • 第三章-提示词-高级:开启智能交互新境界(13/36)
  • Flutter Dart类的使用
  • WebMvc自动配置流程讲解
  • 【MySQL】MySQL的安全风险与安装安全风险
  • GraphRAG:基于知识图谱的检索增强生成技术解析
  • OSPF HCIP
  • RAG 中常见的文本分块(chunk)方法及实战代码示例
  • 基于开源AI智能客服、AI智能名片与S2B2C商城小程序的餐饮行业私域流量运营策略研究
  • JavaEE初阶第十三期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十一)
  • 最新Android Studio汉化教程--兼容插件包
  • 日产轩逸全面评测:可靠性高十万公里无大修,科技配置落后
  • Starrocks ShortCircuit短路径的调度
  • c++类和对象(0基础也能懂)
  • ThinkPHP8学习篇(一):安装与配置
  • 力扣 hot100 Day64
  • Unity_数据持久化_XML序列化与反序列化