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

【Linux学习】(4)Linux权限

前言

  1. 了解shell命令及运行原理
  2. 理解Linux权限管理

一、shell命令及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。

问题1:如何理解?为什么不能直接使用kernel?

我们所有的指令,最终都要在OS内部运行,但是OS使用难度比较高。所以我们用户不能直接和OS打交道,而是直接与图形化界面或命令行解释器(Linux的bash命令行)打交道。

tip:

  • 帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

问题2:命令行解释器存在的意义?

  • 进行命令行解释(将使用者的命令翻译给核心(kernel)处理,同时,将核心的处理结果翻译给使用者。)
  • 保护OS,对于用户的非法请求,直接拦截!

问题3:命令行解释器,bash/sh,shell?

  • 命令行解释器是一个统称,在Linux下可以叫做命令行、bash、sh、shell;在Windows下叫做图形化界面。
  • Linux下有各种命令行解释器,shell是所有符合命令行解释器性质的统称,bash/sh是具体的命令行解释器在这里插入图片描述
  • bash命令行:在这里插入图片描述

二、Linux权限管理

1、认识Linux下用户的分类

Linux下的用户分为两类:

  • root:超级用户,在Linux系统下可以做任何事情,不受权限的限制
  • 普通用户:在Linux下做有限的事情,受权限的限制

tip:

  • 普通用户是由我们root用户自己新建的
  • 创建新的普通用户:adduser 用户名
  • 设置用户密码:passwd 用户名(注:Linux下输入密码是不回显的)
  • root的家目录:/root
  • xxx普通用户的家目录:/home/xxx
  • Centos系统中,所有的普通用户,用户账号都会统一放在/home
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

问题1:超级用户与普通用户两者之间差别是什么?

root基本不受权限的约束,普通用户是受权限约束的。

问题2:用户之间是如何切换的?

命令:su [用户名]

功能:切换用户

使用示例:

  • 从普通用户user切换到root用户,则使用su root(root可以省略)或者使用su -在这里插入图片描述

  • 从root用户切换到普通用户user,则使用su user在这里插入图片描述

  • exit/Ctrl+d退出用户的切换

  • 从身份的切换我们也可以看出root不受权限的限制,普通用户受权限的限制的特点——root切换普通用户,不需要输入密码,普通用户切换其他用户,需要输入切换用户的正确密码

  • Linux中所有的用户,都要有密码,无论是root还是其他,即便是多个普通用户,也都要设置密码。(注:root账号的密码和普通账号的密码不要一样)

问题3:如何对一条命令暂时进行提权?

  • 如果我们想暂时的对一条命令进行提权,则使用sudo command
  • 注意:目前我们用adduser新建的普通用户,没有办法执行sudo,系统不信任你。除非将普通用户,添加到系统的信任白名单里面(/etc/sudoers)

2、什么叫做权限

权限:通俗的说,就是一件事情是否允许你去做!

  • 权限认证的是身份(权限和“人”有关),例如腾讯视频有一些就需要你是会员的身份才能看。
  • 权限也和事物的“属性”有关,例如书本的属性有可写,但是没有可吃的属性。

3、文件访问者的分类(人的身份)

  • 拥有者:文件的所有者:u——User
  • 所属组:文件的所有者所在的组的用户:g——Group
  • 其他人:其它用户:o——Other

问题1:我们这里文件访问者与前面的用户是什么关系?

它们两者并没有冲突,是互补的。

在这里插入图片描述


理解:例如,我们一个人在不同的场景有不同的权限身份,在学校是学生等。

问题2:为什么还要有所属组?

理解:在同一台Linux机器中,有三个人,王五是组长,张三是A组打工人,李四是B组打工人。现在组长叫张三和李四做同一个任务,谁做得好用谁的。如果只有两个角色拥有者和其他人,张三写的代码好,不想让李四看到,就不让身份是其他人的用户有任何权限,但是这时组长王五想看张三的进度了,身份也是属于其他人看不到,所以Linux添加了一个所属组的身份,这时王五是所属组的身份就可以看了。

4、文件类型和访问权限(事物属性)

我们可以通过指令ll查看文件的详细属性:在这里插入图片描述
在这里插入图片描述
问题1:前十个字符的含义?

第一个字符代表文件类型,剩下的代表文件的权限属性。

这十个字符,去掉第一个字符,剩下9个字符从左到右三三为一组,依次对应拥有者权限、所属组权限、other权限。

问题2:每一组权限位置含义?

  1. 位置是什么含义是确定的!
  2. 每一个位置具有指定的权限,只有有或者否两种选择(即对应权限位置,要么具有该指定权限,要么没有权限)在这里插入图片描述

问题3:我们在文件属性看到了拥有者、所属组,那other呢?

任何一个人想要访问Linux中的文件,一定是需要先登陆的,只要登陆上了他就有自己的用户名。所以当他这个用户想去访问这个文件时,他只需要去和这个文件属性当中的拥有者和所属组对比,发现既不是拥有者又不是所属组,这个时候就为other了。

它是一套if……else的逻辑,对比你的身份是不是为拥有者、所属组,都不是就为other了。

问题4:当一个用户既为拥有者又为所属组时,它的身份是什么?

用户在进行认证的时候,只能选择一个角色进行认证!

在进行认证时先对比是不是为拥有者,不是再对比是不是所属组,既不是拥有者也不是所属组时就为other了。

问题5:在谈文件权限时需要注意什么?

需要注意以下三点:

  • 你是谁
  • 文件的拥有者、所属组是谁
  • 拥有者、所属组、other分别对应的权限是什么

(1)文件类型

  • d:目录文件
  • -:普通文件(文本,可执行程序,库基本都属于普通文件)
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件(用来进行通信的)
  • c:字符设备文件(键盘,显示器文件等)
  • s:套接口文件

文件类型:Linux系统中文件名后缀没有直接的意义。例如可执行程序。

Linux的文件后缀名没有意义,不代表Linux系统上运行的其他软件不需要后缀。例如gcc编译器软件。

Linux中如何看待后缀,取决于用户的需求。(建议我们一般带后缀)

(2)基本权限

  • 读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • 写(w):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • 执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • “-”表示不具有该项权限

5、文件权限值的表示方法

  1. 字符表示方法
Linux表示说明Linux表示说明
r - -只读- w -仅可写
- - x仅可执行rw -可读可写
- wx可写和可执行r - x可读和可执行
rwx可读可写可执行- - -无权限
  1. 8进制数值表示方法
权限符号(读写执行)八进制二进制
r4100
w2010
x1001
rw6110
rx5101
wx3011
rwx7111
- - -0000

因为每一组权限的每一个位置具有指定的权限,只有有或者否两种选择,所以可以用二进制来表示有或者否两种选择,1表示具有该指定权限,0表示没有权限。

八进制——000~111

6、权限的修改问题

(1)chmod

功能: 设置文件的访问权限

格式: chmod [参数] 权限 文件名

常用选项:

  • R:递归修改目录文件的权限
  • 说明:只有文件的拥有者和root(root不受权限的约束)才可以改变文件的权限

chmod命令权限值的格式有两种:

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

  • 用户符号:
    • u:拥有者
    • g:所属组
    • o:其它用户(other)
    • a:所有用户
  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

示例:在这里插入图片描述

②三位8进制数字

示例:
在这里插入图片描述

(2)chown

功能: 修改文件的拥有者

格式: chown [参数] 用户名 文件名

说明: 把文件给别人,需要别人的同意才能完成,但是我们可以sudo提权或者root登录了chown修改文件的拥有者,这样就可以直接修改了,不需要别人的同意。

示例:
在这里插入图片描述
补充:同时修改文件的拥有者与所属组。在这里插入图片描述

(3)chgrp

功能: 修改文件或目录的所属组

格式: chgrp [参数] 用户组名 文件名

常用选项: -R 递归修改文件或目录的所属组

说明: 文件的拥有者可以修改文件的所属组,root不受权限约束也可以
示例:
在这里插入图片描述

(4)umask

预备:

  • 新建文件夹默认权限=0666
  • 新建目录默认权限=0777


问题:为什么我们创建的普通文件的默认权限为664,创建的目录文件的默认权限为775?在这里插入图片描述
答:原因权限掩码——凡是在umask中出现的权限,不会在最终的文件权限中出现!在这里插入图片描述

功能: 查看或修改文件掩码

格式: umask 权限值

说明:

  • 创建文件或目录的时候要受到umask的影响。假设默认权限是mask,则实际创建出来的文件权限是:mask &(~umask)
  • 超级用户默认掩码值为0022,普通用户默认为0002

实例:在这里插入图片描述

7. 目录的权限

(1)目录权限

  • 可执行权限:如果目录没有可执行权限,则无法cd到目录中
  • 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容
  • 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件在这里插入图片描述

(2)共享文件&粘滞位

问题1:需要共享的文件,建立在哪里?

在这里插入图片描述
普通用户自己的家目录权限是700,即我在我的家目录创建的文件,别人都看不到!

所以我们所建立的共享文件,不能在任何一个人的家目录下,而是将共享文件创建在根目录下的!

问题2:文件的删除由谁决定?

一个文件能否被删除,并不由文件本身决定,由这个文件所处的目录决定!

问题3:只要用户具有目录的写权限, 用户就可以删除目录中的文件,即使该文件不是我创建的,我们如何解决该问题?

如果我们去掉了共享目录的w权限可以吗——不可以,没有w权限,我们也同时无法创建文件了!共享目录的共享就不能体现了!

所以Linux引入了粘滞位。

粘滞位:给目录设置,一般是共享目录,大家可以在目录进行各自文件的增删改查,只允许文件拥有者或者root才能删除这个文件,其他人一概不允许,t是一种特殊的x权限!

小结:

  • 家目录权限700,只有自己可以访问,所以共享文件创建在根目录下
  • 因为/是root创建的,所以共享文件由root创建
  • 设置粘滞位,保证文件只能被文件拥有者和root删除,不能被别人删
  • 粘滞位格式:chmod o+t 目录
  • Linux有一个自带的共享文件tmp

http://www.mrgr.cn/news/58010.html

相关文章:

  • 好用的AI工具
  • Aatrox-Bert-VITS2部署指南
  • gin入门教程(2):go安装以及初始目录构建
  • 纪念2024.10.24
  • qemu参数解析过程
  • Redis 客户端简述
  • MyBatis-Plus(三):使用自定义目录下的xml时踩坑记录
  • CMake中的List关键词:详细指南
  • 数据结构与算法——Java实现 46. 从前序与中序遍历序列构造二叉树
  • 【多线程和高并发】多线程和高并发提纲
  • Gradle核心概念总结
  • 论软件著作权
  • 线性可分支持向量机代码实现
  • Python 代码的主要功能是从给定的日志文件和设备列表中提取特定设备(华为和华三)的用户账号信息
  • Java 开发——(下篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus
  • AI基础:传教士与野人
  • Python如何处理zip压缩文件(Python处理zip压缩文件接口源码)
  • SLAM:未来智能科技的核心——探索多传感器融合的无限可
  • [蓝桥杯 2024 省 C] 回文数组
  • LeetCode199. 二叉树的右视图(2024秋季每日一题 47)
  • Linux 权限的理解
  • 前端发送请求格式
  • 1024——视触觉传感器GelSight的前世今生
  • 系统移植相关概念总结
  • 力扣周赛第420场 中等 3325.字符至少出现k次的子字符串 I
  • C语言程序设计:现代设计方法习题笔记《chapter4》