【Hello Linux】 Linux的权限以及Shell原理(上)

简介: 【Hello Linux】 Linux的权限以及Shell原理

Shell的运行原理

Linux 从广义上来理解它是一个操作系统 而从狭义上来理解它则是一个核心 (kernel)

针对Linux这个核心 程序员或商业公司们制作出各种不从的发行版本 比如说 centos retcap ubuntu kail等等

所以说我们用户在操作的时候并不是直接操作Linux kernel 而是通过kernel的外壳程序来和kernel沟通

1126a7d910a949939b1345a4f349fe73.png

shell是什么?

shell的中文翻译是外壳 我们一般认为它是一个命令解释器 用来连接用户和 linux kernel

为什么要设置一个shell外壳而不让用户直接来和 linux kernel沟通呢?


我们下面使用一个小故事来帮助理解一下

你(用户)是一个害羞的程序员 那shell就像媒婆 linux kernel就是让你心动的妹妹 假设她的名字叫小花 你不好意思开口向人家表白 那你就让你家人找媒婆帮你提亲 所有的事情你都直接跟媒婆沟通 由媒婆转达你的意思给小花

那么我们为什么要设置一个shell外壳的原因就很明显了


因为用户不擅长直接和 linux kernel进行沟通

同样的对于小花来说 她根本不清楚你是一个什么样的人 有了媒婆的信任背书 能够保护她的安全

所以说我们这里总结下设置shell的两点原因

  • 因为用户不擅长直接和 linux kernel 沟通 所以设置shell方便用户操作
  • 保护 linux kernel

shell的原理是什么

shell的原理部分涉及进程相关知识 在我们学习到相关内容后会再做解释

此外shell是对于所有外壳程序的统称 在centos中这个外壳程序是 bash

shell和bash之间的关系就像是程序员和你之间的关系 它是对于一个抽象概念的实例化


权限

Linux中权限的概念

Linux系统中有两种用户 它们分别是超级用户(以下简称root)和普通用户

  • root的权限非常高 几乎可以在linux系统下做任何事情
  • 普通用户可以在linux系统下做有限的事情


我们可以用命令提示符来区分这两个用户

root的命令提示符是 ‘#’

b40ddf7a1d2d4c65b05087a7ce8c0e8f.png

普通用户的命令提示符是 ‘$’

b4e10565a3b641f38888f61cee6904f7.png


如何切换用户

切换用户的情况分两种

  • 从root切换为普通用户
  • 从普通用户切换为另外的用户(包括root)

root用户切换为普通用户只需要 su + 用户名就好了

022e51427de8410198e66559b5ff94e2.png

普通用户切换为其他用户需要输入其他用户的密码

447a045f2ae740dd8a11a02e50c8e81e.png


如何提升当前操作的权限

我们可以使用sudo命令来提升当前操作的权限 即使用root权限来执行当前操作

a0018689a4704fccaca8b941e74f9340.png在通常情况下普通用户是没有权限去修改其他用户的密码的

但是我们这里使用了sudo命令 即这条命令是用root权限去操作的

敲完这行命令之后系统提示要我们敲出自己的密码

2d706892e9954455807e59ecf20a7329.png但是敲完之后我们发现 我们并没有被添加至信任名单当中 也就无法执行sudo操作

这个信任名单系统显然是合理的 因为如果我们不设置它 人人都能使用sudo操作 那么系统就要乱套了

那么我们应该如何添加这个信任关系呢?


如何添加信任关系

首先我们需要将我们的用户切换至超级用户 因为只有超级用户才具有这个权限

接着我们需要敲出下面的指令

vim /etc/sudoers

打开文档之后我们跳到100行左右的位置

e478c89159e74653af6070e536c210aa.png

接下来我们只要按照第一行的格式 将需要添加信任关系的用户名添加进去就好了


权限管理

文件访问者的分类 (人)

权限可以将用户分为三大类

  • 文件和文件目录的所有者 : u - user
  • 文件和文件目录的所有者所在的组的用户 : g - group
  • 其他人 o - others

文件的访问者分类和我们上面提到的两种用户有什么分别嘛?


实际上文件的访问者是一种身份 而我们说的用户一般特指一个人

拿现实生活来比较 一个人可以是爸爸身份 可以是老师身份 也可以是学生身份

对应到这里 用户可能是文件的所有者 所属组 或者是others

为什么要设置文件的所属组


在某些大厂内部 针对同一个业务 可能有两个不同的工作室做出不同的产品来竞争这条业务线

而这两个工作室可能共用一个linux服务器

当组长创建了一个文件的时候 他可能有这样子的一个需求


想要自己和组内的人员能够看到这份文件 但是对于其他人来说不可见

很显然如果没有所属组这一概念的话 我们就无法完成这一需求了

有什么办法来区分others呢?

既不是所属组又不是所有者就是others


文件类型和访问权限 (事务)

我们离开文件单纯讨论人的权限并没有意义

文件的权限有三种

  • 是否可读
  • 是否可写
  • 是否可执行


映射到三种不同身份上就有九种组合

那么我们怎么能看到这九种组合呢?

我们敲出ll指令 可以发现最前面有一串字符 这一串字符就代表着文件的类型和属性

3a53b762fd114446872793fc9b6a3b6f.png

这一串字符由十个字符组成 我们可以将这十个字符分为两部分

其中第一个字符为一部分 后面九个字符为一部分

dc8f8528c9664c10b561f90f74e016e3.png如上图所示 第一个字符标识文件类型 剩下九个字符标识三种身份的三种权限是否存在

第一个字符代表文件类型 大致有以下几种 其中最前面两种尤其重要 需要记住

  • -:代表普通文件
  • d:代表目录
  • l:代表链接文件(类似于Windows当中的快捷方式)
  • b:代表块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件
  • s:套接口文件


而剩下的九个字符 三个为一组 分别代表该文件相对于其拥有者 所属组以及other是否拥有某种属性

其中各个字符的解释如下

  • r 代表读权限
  • w 代表写权限
  • x 代表执行权限
  • -符号 代表没有该权限


注意 这里的rwx顺序不能乱!!

cc12804ea7dd4dcd86aeb4d84a9615c2.png

还是以上面的图为例来分析

首先这是一个普通文件

他的所有者具有读写执行权限

他的所属组具有读写执行权限

其他人具有读和执行权限 并没有写权限


文件权限值的表示方法

文件权限的表示方法一共有两种 我们下面使用两张表来表示

字符表示法

字符表示法 说明
r - - 仅可读
- w - 仅可写
- - x 仅可执行
r w - 可读可写
r - x 可读可执行
- w x 可写可执行
r w x 可读可写可执行
- - - 无权限


八进制数值表示法

字符表示 二进制 八进制 说明
r - - 100 4 仅可读
- w - 010 2 仅可写
- - x 001 1 仅可执行
r w - 110 6 可读可写
r - x 101 5 可读可执行
- w x 011 3 可写可执行
r w x 111 7 可读可写可执行
- - - 000 0 无权限


相关文章
|
3月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
68 2
|
4月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
2月前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
51 1
linux特殊权限!!
|
2月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
48 0
Linux 如何更改默认 Shell
|
2月前
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
3月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
83 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
运维 监控 安全
Linux_权限理解(详细PLUS)
【10月更文挑战第3天】本文介绍了Linux系统中的权限管理基础,包括文件系统对象与权限关联、权限的继承性、字符与数字表示法的解读,以及用户、组与权限的动态交互。详细解析了`chmod`命令的高级用法和权限修改的风险,探讨了SUID、SGID和Sticky Bit等特殊权限的作用机制,并提出了基于角色的权限分配和定期权限审计的最佳实践。
85 11
|
4月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
41 0