【Linux】shell 及权限理解(上)

简介: 【Linux】shell 及权限理解(上)

👉shell命令以及运行原理👈

4b90369e6a2d4b78a9fb95e60a0de574.png


其实,我们平时敲的指令都是可执行程序,都是用 C语言或 C++ 代码写的。那这些指令是什么在 shell 上运行起来的呢?shell 又是什么呢?


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


从技术角度, shell 的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。
  • e40fc516ac5443278c6f0d7701d6f82c.png
  • 对比 Windows GUI,我们操作 Windows 不是直接操作 Windows 内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符或者运行起来一个应用程序)。


而 shell 对于 Linux,也有着相同的作用,主要是对我们的指令进行解析,将指令解析给 Linux 内核。Linux内核运行的结果通过 shell 解析给用户。


帮助理解:假如你是一个闷骚且害羞的程序员张三,那 shell 就像媒婆,操作系统内核就是你们村头漂亮的且又让你心动的姑娘如花。你看上了如花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给如花,而我们找到媒婆姓王,所以我们叫她王婆,她对应我们常使用的 bash。张三不能和如花直接沟通,就如同用户不善于和操作系统打交道,也不能直接和操作系统进行交互。

shell 除了降低用户和操作系统交互的成本,还有一个作用就是变相保护操作系统。因为当用户输入一些非法指令时,shell 就会拒绝执行该指令,这样就起到保护操作系统的作用了。

22a79021f2b74f9baca5c26fb4cbc902.png


一般而言,shell 本身并不执行对应的指令,而执行指令是通过派生子进程的方式执行用户的指令。这样做是为了保护 shell。shell,是命令行解释其的一个统称,而 Centos 7 采用的命令行解释器是 bash。当用户登录成功后,第一个在系统上跑起来的程序就是 bash。


a6f99b58e2304868a325a8ce9f0f210f.png

一个标准的 shell 命令提示符的组成格式

38a5652e8f8c4dce9267bcc80f493710.jpgf3c03afc104b4ab9b536f7576025bec8.jpg


👉Linux权限的概念👈


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

超级用户:可以在 Linux 系统下做任何事情,不受限制

普通用户:在 Linux 系统下做有限的事情,受权限的约束

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

命令: su [用户名]

功能:切换用户。 例如,要从 root 用户切换到普通用户 user,则使用 su user。

要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

90064c40d9ae4eac8c1b6de9a5ddb85f.png


注:当从普通用户切换到 root 用户(su、su root 或者 su - 指令),需要输入 root 用户的密码;而当 root 用户切换到普通用户(Ctrl + d 或者 su 普通用户名),则不需要输入普通用户的密码。因为 root 用户的权限是最高的。su 和 su root 指令切换到 root 用户的时候,并不会改变所处的路径,而su - 指令切换到 root 用户的同时将路径改为 root 的家目录,即 /root

8263b5113ae146a5b9f405bfbb9b8ab4.png


当我们是 root 用户时,输入 ls /home 可以查看所有的普通用户。


dcb92c2769cc4553b90cc36405105dae.png


当我是普通用户,我想要 root 用户的身份执行一条指令,但不想变成 root 用户,怎么办呢?那么我们可以使用 sudo 指令,该指令的使用需要改配置文件。当我们学了 vim 工具,再来做这个操作。


7a9a7b97e0d84f48a3931d45d56d0d45.png


当我们第一次使用 sudo 命令时,是需要输入普通用户的命名的;当使用 sudo 命令时间间隔较短时,就不再需要输入普通用户的密码了。


没有将普通用户添加到配置文件中的情况

8d5cb47792564b49a38d0210a41925c7.png


这种情况就相当于系统不信任这个用户,那么如何解决这种情况呢?我们需要将当前用户添加到配置文件 /etc/sudoers 中,现在我们暂时不配置,先使用 root 用户来进行操作。


97fc8e105d894dba96554dbb7e46a00a.png


那我们使用 sudo 指令进行提权的时候,让我们输入自己的密码,这是为什么呢?这是给受信任的普通用户提供最少的执行障碍,保护操作系统。


什么是权限?


  • 权限是约束人的(某一个人或者某一类人)。例如:非会员不能看需要会员才能看的电影,不能听会员才能听的音乐等等。
  • 目标对象(电影网站、音乐APP等)本来就没有对应的属性(业务)。例如:你不可能在电影网站上做 OJ 题。因为电影网站没有这样的业务,那么你也就没有在电影网站上面做 OJ 题的权限。

通俗来说,权限就是一件事情是否允许被谁做。例如:Linux 的文件权限 = 人(角色) + 文件属性。


👉Linux权限管理👈


文件访问者的分类(角色)


一个人能做什么事,并不取决于这个人的名字是什么,而是取决于这个人的角色。比如:张三是某个学校的校长,他能够进入校长办公室,是因为他名字是张三就能够进入校长办公室吗?并不是,是因为他的角色是校长,所以他能够进入校长办公室。换了另一个张三,就不能进入校长办公室了。


那文件的访问者(角色)的分类有什么呢?


文件和文件目录的所有者: u—User(拥有者)

文件和文件目录的所有者所在的组的用户: g—Group(所属组)

其它用户: o—Others (其他人)

那普通用户和上面的三类访问者是冲突的关系吗?并不是,某个用户可能是一个文件的拥有者,也有可能是另一个文件的所属组或者其他人。文件的访问者是一种角色,或者说是一种身份,普通用户可以被赋用不同的角色(省份)。而操作系统约束的就是角色,并不是特定的普通用户(人)。


那么文件的三个角色究竟在哪呢?我们来看一下:


ef7724941c904a55a9e86663e5a0af38.png

注:不属于拥有者和所属组的用户就是其他人。


为何要存在所属组?


在一个公司里,会存在两个团队做一个项目,那么谁把这个项目做更好,这个项目就归属于谁。那么团队 A 有团队 A 的代码目录,团队 B 也会有团队 B 的代码目录。这时候,就肯定需要所属组这样的概念。如果没有所属组这样的概念,那么其他团队的成员也能够看你们团队的代码了。所以所属组的概念也就必须存在。


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


52dcd7f5f2f440f3bda5a84dacf2f6ce.png


文件 = 文件内容 + 文件属性。文件的属性包括读权限(r)、写权限(w)和可执行权限(x)。

那么,我们输入ll指令,显示器上显示的都是文件的属性。

418f46f70a7c49eda9dafb55193db3a2.png


1.文件类型


  • d:文件夹
  • -:普通文件
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件


各种文件的例子

f2192b0dfd4c41c8b2f3af8deab9e9cd.png

虽然说 Linux 系统不以文件后缀来区分文件,但是这并不代表Linux 下的工具(如:gcc)可能会对文件后缀有要求。


7946ae4915d5436094b2ec931969b467.png

刚才我们学习的一个字符是文件的类型,那么剩下的九个字符是文件的访问权限,那这是如何对应起来的呢?我们来学习一下。


2.基本权限


读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

写(w/2): Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

执行(x/1): Execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

“-”表示不具有该项权限


剩下的九个字符三三为一组,第一组是拥有者的权限,第二组是所属组的权限,最后一组是其他人的权限。

e46d521bec974e608bc163ffffe1e500.png


如何描述文件的权限


bfb72375ce80484785eb2408bdacfae8.png


以目录文件 dir 为例,dir 这个文件的拥有者是 Joy,所属组是 Joy。拥有者具有读权限、写权限和可执行权限,所属组具有读权限、写权限和可执行权限,其他人具有读权限、没有写权限和具有可执行权限。


文件权限值的表示方法


1.字符表示方法


f2342917fc324153bb5d75721dcb90df.png


2.8进制数值表示方法


e620c056c74e474fb26841e243d3494d.png


文件访问权限的相关设置方法


如何操作权限呢?


操作文件的权限有两种:一是设置文件属性(chmod),而是设置文件所属角色(chown 或者 chgrp)。


注:当你是 root 用户或者是文件的拥有者时,才能更改文件的属性。


chmod

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

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

常用选项

  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限


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


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


chmod u-r 文件名 #去除文件拥有者对该文件的读权限
chmod u+x 文件名 #给文件拥有者加上对该文件的可执行权限
chmod u-rwx 文件名 #去除文件拥有者对该文件的所有权限
chmod u+rw 文件名 #给文件拥有者加上对该文件的读权限和写权限
chmod g-rw 文件名 #去除所属组对该文件的读权限和写权限
chmod g+rwx 文件名 #给所属组加上对该文件的所有权限
chmod o-rwx 文件名 #去除其他人对该文件的所有权限
chmod u-rwx,g-rwx 文件名 #去除拥有者和所属组对该文件的所有权限
chmod a+rwx 文件名 #给所有人加上对该文件的全部权限
chmod a=rwx 文件名 #给所有人加上度该文件的全部权限

4142b193540e4aea9059b6c21a236016.png


9084629adb48478e8016898f325b3503.png

364380f356d64625a23b65d17ab550e7.png


有和没有普通文件权限的样子


2e534cc5f824437a8ca0b0bb73d46377.pngc936764e66c64c3aaaa8651f2cd60aad.png







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