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

Linux--权限讲解

文章目录

  • 前言
  • 一、什么是shell外壳程序?
  • 二、为什么有shell外壳程序?
  • 三. Linux的用户基本介绍
  • 四. 用户间的相互转换及权限的索取
  • 五. 什么是权限?
  • 六. 权限的具体分类
  • 七. 文件权限属性的改变和‘人’的改变
  • 八. 为什么要有权限?
  • 九. 显示权限的由来和umask
  • 总结


前言

开始讲权限了,知识点不难,只是需要理解其本质,比如:为什么要有权限?什么是权限?


一、什么是shell外壳程序?

通俗地说是命令行解释器,使得我们和操作系统能够更简便地交互,比如我们可以看到我们输入进去的命令和执行的结果还有命令行的提示;

二、为什么有shell外壳程序?

  1. 用户是不善于和操作系统打交道的,因为我们直接去和操作系统交互操作的话是要有比较大的难度,要专业人员才能够与操作系统更好地交互;要是让我们的手机使用代码操作我们有好的体验吗?
  2. 变相保护操作系统;
    对于非法的指令,shell直接拦截,不会传递给操作系统进行操作,进而变相保护了操作系统;
  3. 而且我们看上去是shell在进行工作,其实是shell的派生子进程进行与用户和操作系统进行交互,也避免了shell出问题进而影响其它指令的进行;这个我们后面会着重讲,现在了解一下;
  4. 我们的shell外壳的命令行和Windows窗口是一样的,只不过是把命令行换成了可视窗口而已,相当于用户操作窗口,而窗口就是shell外壳,直接与操作系统交互,而不是窗口指令转换成命令行的形式再与操作系统交互,这个是错误的想法!!!

三. Linux的用户基本介绍

  1. 超级用户:root;
    可以再Linux下几乎可以做任何事,而不受权限约束;
  2. 普通用户:除了root的所有用户都是普通用户;
    普通用户有权限约束,再Linux下可以做有限的事情;
  3. 超级用户的命令行提示符是“#”,普通用户的命令提示符是“$”。

四. 用户间的相互转换及权限的索取

  1. 普通用户转变成root用户;
    使用su或者 su- 命令;
    两者的区别是使用su- 会直接转换成root用户时直接再家目录上,而使用su则所处目录不变;然后输入完su命令后会要你输入root的密码,注意:这个时候的密码是不外显的,我们什么都看不到,相当于把 * 变成了空格;
  2. root用户转普通用户;
    直接su + 普通用户的名字 (xxx);就完成了,不用密码,就是那么牛逼!!!
  3. 普通用户提权root
    普通用户要有root的权限,但是不转变成root用户该怎么做?
  4. 使用sudo命令,在我们要执行的命令前面加sudo就行了,注意加个空格,不要连在一起了!!!还有就是使用这个命令我们需要输入我们自己的密码;为什么?
  5. 因为这个命令执行后,在几分钟的时间里我们不用再输入密码,直接使用sudo命令执行root权限的命令;和root用户几乎没有差别,那么这样不是谁都可以搞了?所以这个要条件的!!!
  6. 我们要让root相信我们不会乱搞,才可以让我们所以这个命令,所以前提要设置一下root相信我们这个用户;后面会教怎么设置,现在了解一下;设置完成后,为了让我们使用较少的步骤就可以提权,所以输入sudo命令后输入我们自己的密码就提权完成;

五. 什么是权限?

  1. 我的理解就是一些事情是否可以被谁做?这里有两个值得我们注意的:”谁“和”做“两个字;
  2. 权限限制的肯定第一个是一个人或者一些人;这个” 人“ 就是”谁“,而”做“呢?想一想,我们要做的事情本身是否带有属性;比如一个看电影的软件可以买衣服等等其他东西吗?买东西的软件可以打游戏吗?这个就是事物本身的属性,属性之外的谁都没有权限;
  3. 所以权限是 人+ 属性;而Linux下文件的权限就是由人+文件属性组成;

六. 权限的具体分类

1.人具体分的话就是角色的分类,权限在限制人的时候,不是因为你是谁而限制或者不限制你,而是你的身份角色决定了你的权限;
2. 文件中人的角色分成三个:拥有者,所属组,其他人;文件的拥有者,与其他人我们知道,但是这个所属组什么鬼?其实就是拥有者为了放开权限给指定的一个或者一些人也可以看文件操作文件这样的,但是除此之外的人都不可以,所以要这些人都有看和读的权限,这些特性的人也叫做所属组,也就是一些可以相信的人拥有一些特殊权限,和其他人区别开来;
3. 文件的属性也是三个,读,写,执行;
对应的字母是r,w,x;

在这里插入图片描述

  1. 看上面最左边开始的10个字符,第一个代表的是文件的类型,- 表示普通文件,d 代表目录,c代表字符设备文件-键盘,显示器这样的,b代表块设备-磁盘这样的;l 代表链接文件,像可执行文件这样的;p是管道文件,上个Linux博客上介绍过管道;
  2. 这里重要的是 -普通文件,d目录,p管道文件,l链接文件;
    后面会着重讲p,l两种文件类型的哈;
  3. 上面介绍了第一个字符,现在先介绍后面的,前面10个字符还剩下9个后面着重介绍;然后后面的1现在不讲;第一个root是文件拥有者,第二个是所属组;然后是文件大小12,然后是文件最新创建时间或者修改时间;最后是文件名;
  4. 注意:Linux下操作系统是不以后缀区分文件类型的,不像windows的系统文件是以后缀区分文件;但是Linux下的小程序工具比如gcc重要的是以后缀区分的,这两个并不冲突;还有就是有这样一句话:Linux下一切皆文件;

七. 文件权限属性的改变和‘人’的改变

  1. 看左边剩下的9个字符,分成三份,每份三个字符,代表了拥有者,所属组,其他人的权限,每个人的文件权限有三种,读,写,执行;但是具体有没有对应权限还要看文件是怎么定义‘人’的角色权限分配的;

在这里插入图片描述

  1. 像前面三个字符(从第二个字符开始)是拥有者的文件权限,比如test1.txt文件中就是读,写权限,没有执行权限,注意:没有权限就是一个-,然后是所属组的权限,只有读权限,其他人也是一样只有读权限;
  2. 看一下增加或者减少权限的方法;
    chmod u/g/o± rwx +文件名 就是增加或者减少权限的命令;增加权限还得看文件属性,不能把本身没有的属性还增加过去;

在这里插入图片描述

  1. 一起加减权限是:chmod a± rwx 文件名;
    或者分开搞就加逗号就行了;chmod u+w,g-w,g-w test1.txt
  2. 还有一种方法就是一起改变权限的八进制法;
    因为每种角色权限都是三个,而且有的话可以看成1,无就是0,也就是机器语言中的0,1,然后三个权限就组成八进制;比如:
    chmod 777 test1.txt 就是每个角色的每个权限都是1,代表了满权限;
    chmod 444 test1.txt 就是每个角色只有读权限;
    chmod 644 test1.txt 就是拥有者有读和写权限,所属组和其他人就是只有读权限;
  3. 改变文件角色;
    我们可以把文件的拥有者给别人,前提你是拥有者!!!,也可以把所属组给别人,但是没有给其他人的这种操作哈,因为没必要!!!不过这里要注意:把文件给别人是要经过别人同样的,所以我们直接还是提权或者root用户直接给都可以,反正就是强制给,懒得等对方同意;
    sudo chown xxx test1.txt
    sudo chgrp xxx test1.txt
    这样就把文件角色给别人了,当然还可以提权一样的方法要回来的哈;
    还有把拥有者和所属组都给别人就是 sudo chown xxx:xxx test1.txt
    还要注意:test1.txt我这里是具体的,到时候是随便你的文件名的;

八. 为什么要有权限?

因为要对事物的保护和不妨碍其他人的权限利益;
对你的限制是保护事物,要是你不会破坏事物,那么你就有相应的权限,而防止因为你而破坏其他人原有的权限;
总的来说就是:为了我们系统进行安全管理;

九. 显示权限的由来和umask

  1. 我们看到的命令行中的权限是怎么来的?为什么不同我们的权限不同?
  2. 这个需要我们先了解一下umask,这个叫做权限掩码,和初始权限配合使用,在权限掩码有的在最终权限上都没有!!!在c语言里就是&的关系,先让umask取反,再和初始权限&一下就是最终权限!!!
  3. 初始权限:目录是满权限,按照八进制看就是777了,而普通文件就是666,都没有执行权限哈;
  4. 如果umask是0002,这个是八进制的哈,开头一个0代表八进制哈;
    先取反得到umask其他人没有写的权限,然后每个角色的权限都有,然后再和初始权限777或者666&一下得到最终权限;
  5. 这里的umask可以查看,直接使用umask命令就可以看到了;还有就是改umask,直接umask + 自己要定的权限,就改了umask;

在这里插入图片描述

最后一个问题:我们的最初权限为什么目录是777满权限,而普通文件是666呢?
因为我们去权限的时候会发现,对于目录来说,去掉x也就是执行权限的话目录就进不了了,而普通文件是不需要进入执行的,使用初始普通文件是666,因为所有目录被创建出来都是要被能进入的,所以要可进入的执行权限!!!


总结

权限的讲解暂时就到这里,敬请期待后面的知识吧!!!

相关文章:

  • SPRD Android 14 通过属性控制系统设置显示双栏或者单栏
  • ubuntu20 解决网线不能联网 RTL8111/8168/8411
  • Xbar控制图的定义和应用
  • 系统设计 --- E2E Test System
  • java学习笔记1
  • Python | Leetcode Python题解之第46题全排列
  • c# 异常处理
  • 【深度学习】Pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~四维张量;conv3d~五维张量)
  • 【C++】树形关联式容器set、multiset、map和multimap的介绍与使用
  • DR 或CT拍摄中的:平板、控制板、高压之间的关系
  • Prompt 编程的优化技巧
  • lv21 QT对话框3
  • 牛客刷题总结——Python入门:输入输出、字符串、类型转换
  • 【计算机组成原理】原码 反码 补码 移码的转换
  • OpennVINS运行、评估笔记
  • 中国中封、三边封两用制袋机行业市场发展趋势分析
  • 以太坊质押时代到来,开发者机遇何在?
  • JVM之垃圾收集器
  • 第三篇文章:Docker命令
  • 秋招 2022 年面试不用愁,速看 BATJ 最新 Java 面试题整理合集
  • react面试题
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)
  • 人脑能否重启?
  • 【微信小程序】创建自己的小程序
  • Jmeter基于Java请求的二次开发(结合java代码测Dubbo接口)
  • Redis哨兵模式与Redis缓存穿透、击穿和雪崩
  • python——全局解释器锁(GIL)
  • 武汉市服务业领军企业认定条件、流程及申报政策奖励补贴标准
  • 我的第一篇技术博客 —— 梦的开始
  • 变分自编码器VAE的直观理解与原理推导 及 问题记录
  • 【python】准点跑路人必备小程序~ 不信你用不到
  • 10个常见的使用场景,助你从 Vue2 丝滑过渡到 Vue3 !