【Linux】--- Linux权限概念

简介: 【Linux】--- Linux权限概念

一、shell命令以及运行原理

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

从技术角度,Shell的最简单定义(是什么?):介于用户和操作系统之间的软件,即命令行解释器command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

为什么 要有外壳程序shell呢?1. 用户不善于和OS之间交互;2. shell外壳的存在,可以对请求进行合法性检查,变相的保护OS

那么是怎么做到的呢?bash(具体的一款外壳程序)基本都会给我们创建一个子进程,让子进程帮用户进行命令行解释(即使失败了,也不会影响bash),真正的bash只要进行等待即可。即创建子进程,让子进程进行执行。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

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

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

二、Linux权限的概念

2.1 什么是权限

现实生活中权限的例子,即vip,门禁…。其作用就是,通过一定的条件,拦住一部分人,给另一部分人权力,来访问某种资源。 决定的是有无,或者能还是不能的问题!

2.2 权限的本质

基于权限的性质,那么权限一定和人有关,权限还和事物的属性有关(就像我们有腾讯视频vip,但是我们不能在上面刷题是一个道理)。所以可以得出这么一个结论:权限 = 人(角色) + 事物的属性。权限不是限制某一个人的,而是限制某一种角色的,(就像学校门禁,不是因为你叫XXX,才让你进去,而是因为你是这个学校的学生(角色),才让你进去的)。

2.3 Linux中的用户

Linux下有两种用户:超级管理员(root)、普通用户。

  • 超级管理员(root):可以再linux系统下做任何事情,不受权限约束
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

指令介绍: su指令,作用是切换用户

  1. 从普通用户切换为超级管理员:1. 直接su,身份切换为root,但当前路径不变/home/XXX;2. su -,不光身份切换为root路径也改变了,即变为/root。在切换为root时,要输入root密码。
  2. 超级管理员切换为普通用户su + 用户名root切换为普通用户时无需输入密码。

以上面这个文件为例,经过前面的介绍,我们都知道这些内容是一个文件的属性。root.txt被称为文件名Feb 19 20:13被称为,这个文件被创建的时间(or最近一次修改的时间);时间前面的数字被称为,文件的大小。(其余下面介绍)

Linux中有三种角色(文件访问者的分类):拥有者,所属组,other。文件大小前面的两个字符串,第一个则为文件的拥有者,第二个则为文件的所属组。other则是匹配完拥有者和所属组之外的人,在上图中未显示。Linux具有组的概念,主要是在多人协作的时候,更好的进行权限管理!(例:zhangsan为一个文件的拥有者,此时和lisi是竞争关系,当zhangsan的上司wangwu想看文件时,zhangsan为了不让lisi也看到,便可将wangwu加进所属组。注意:默认zhangsan也在所属组中)。

我们前面所说的两种用户(root和普通用户)与Linux中三种“人”(拥有者,所属组和other)冲突吗?事实上并不冲突,还起到了互相补充的关系。用户相当于具体的人,而拥有者,所属组和other相当于角色,Linux中具体的角色是需要具体的人来扮演的! (即root既可以是拥有者的角色,也可以是所属组,当然也可以是other)


如何创建一个普通用户?

  1. 打开终端并以root用户身份登录到CentOS服务器。
  2. 运行以下命令来创建新用户: useradd -m username这将创建一个新的用户,并自动为其创建一个主目录(拥有者和所属组默认为username)。

  1. 如果您希望将新用户添加到特定的用户组中,可以使用以下命令: usermod -aG groupname username "username"替换为您要创建的新用户的用户名,将"groupname"替换为您要将新用户添加到的用户组的名称
  2. 设置新用户的密码: passwd username这将提示您输入新用户的密码(只有是root身份才能创建密码),并要求您确认密码。

  1. 现在,您可以使用以下命令切换到新创建的用户账户: su + 用户名这将使您以新用户的身份登录到系统。

2.4 Linux中文件的权限

经过上面的介绍,一个文件的属性还剩下一些:

第一个字符表示文件的类型;第2~10字符表示文件的属性权限,三三为一组,分别对应拥有者,所属组,other,且由root或普通用户承担这三个角色·。

基本权限:

  • 读(r): Read对文件而言,具有读取文件内容的权限;
  • 写(w): Write对文件而言,具有修改文件内容的权限;
  • 可执行执行(x): execute对文件而言,具有执行文件的权限;
  • “-”:表示不具有该项权限

文件属性小结:

2.4.1 快速掌握修改权限的做法

那么一个文件的权限,谁能修改呢?1. 文件的拥有者;2. root。 chmod指令,作用是改变一个文件的权限。chmod u+(权限),g+(权限),o+(权限) filename,不仅可以修改一个人的一个权限,还可以修改多个人的多个权限(u->拥有者,g->所属组,o->other)。如果想将所有角色都去掉r权限,即可写成chmod a-r filename(a->所有角色)。

2.4.2 对比权限有无,表现

对于普通用户,自身也要受到权限的约束!即便这个文件是自己的! 此处先匹配拥有者的权限(为---)。root不受权限约束!!!

权限存在的意义:保护普通用户的文件的安全性!


权限与角色的匹配问题: 对用户身份的识别,只识别一次! 首先想要操作一个文件,系统就必须认识你的身份(角色),然后保存到特定文件的属性中。一旦一次将身份和文件拥有者匹配成功了,那么就只看拥有者的权限。所以当拥有者和所属组同为一个用户时,拥有者(lzw)无rw权限,但所属组(lzw)有rw权限,系统也不会识别(只匹配拥有者的权限)。如下:

验证: chown指令,作用是更改拥有者;chgrp指令,作用是更改所属组(-R选项:递归修改文件或目录的拥有者/所属组,例:chown -R user1 filegroup1)。(同时改拥有者,所属组,例:chown root:lzw filename)如果我们使用chown root filename将拥有者改为root(只有超级管理员root才可以这样操作,且把文件给别人是强制给的),那么此时再访问文件会发生什么呢?如下:

拥有者为rootlzw匹配进所属组,具有rw权限。

2.4.3 修改权限的第二套做法

权限 = 用户角色(具体的人) + 文件权限属性2.4.1是对文件权限属性的更改,下面的介绍,侧重于对用户角色的修改。与2.4.2相似,可以通过chownchgrp指令,对文件拥有者和所属组进行修改,从而获得相应权限。我们无需修改other,因为它是随其余两个变化而变化的


第二套做法: 如果将有某种权限用1表示,没有则用0表示,那么rw-便可表示为110,即6。于是乎,我们便可用八进制的664表示rw-rw-r--。便有了这样修改权限的写法:chmod 八进制 filename,如下:

2.4.4 文件类型

windows中,通过后缀名区分文件类型。而在Linux中不通过后缀区分文件类型!但并不是说Linux不用后缀。 那通过什么区分呢?ls -l第一个属性列。 Linux文件类型:

  • -:普通文件。(文本文件,可执行程序,库等都叫做普通文件)
  • d:目录文件。
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如磁盘(磁盘在以下路径:/dev/vda)、光驱等)
  • p:管道文件
  • c:字符设备文件(显示器本质就是字符设备,在路径/dev/pts下。每当我们多打开一个终端,便会在此路径下,创建一个以数字命名的文件。那我们便可完成以下操作,实现不同终端间的交流:)

  • s:套接口文件

我们上面不是说了,Linux不区分文件类型的吗,那为什么现在这个文件编不过去呢?很简单一个道理,Linux系统不以文件后缀作为区分文件类型的依据,但并不代表gcc不需要,Linux系统 != gcc (即Linux上面的工具可能需要区分后缀)


如何理解x(可执行权限 vs 可执行)? 能执行 = 具有可执行权限 + 你是一个可执行文件,如下图:

2.5 Linux中目录的权限

2.5.1 问题一

如果我们进入一个目录,需要什么权限? x权限

目录的r权限:用户能否查看指定目录内的文件信息;

目录的w权限:决定用户能否在指定目录内新建,修改,删除文件;

目录的x权限:决定用户能进入指定目录;

事实上,目录也是一个文件,而文件 = 内容 + 属性。目录的属性就是ls -l后的内容,而目录的内容是该目录里面的所有的文件信息详细数据。 如:目录就相当于一个档案袋,我们把文件放到档案袋中,权限r就相当于,查看档案袋内容;权限w就相当于,拿走或新增一些文件(如果一个目录无x权限,里面的文件或目录也是不可以删的;但如果目录只是无r权限,只要我们能记住目录里面文件的名字,同样是可以删掉的。默认具有w权限)。


2.5.2 问题二

Linux创建文件的时候,为什么好像有默认权限?且为什么是我们看到的样子?

这是因为,创建的普通文件,起始权限是:666,去掉x的;创建的目录文件,起始权限是:777,包含x的。 然后经过权限掩码的作用,就成了我们看到的样子。权限掩码:创建文件的时候,要从起始权限中过滤掉(不是简单的减法)在umask中出现的权限。

umask指令,作用是查看或修改文件掩码。 在我的电脑中默认的权限掩码为0002,所以会是上图所示那般,那如果我们将权限掩码修改为0呢?如下:

最终权限 = 起始权限 & (~umask)。例:普通文件起始权限666 -> 110 110 110,权限掩码000 000 010~umask -> 111 111 101,两者&得:110 110 100(即664 -> rw-rw-r--)。


2.5.3 问题三

为什么我们普通人竟然能删掉别人的文件(包括root)?删掉一个文件和目标文件有关系么?

没关系,取决于当前所处目录的w权限! 不取决于目标文件。所以即使root.txt本身无w权限,但如果当前目录有w权限,则仍可以被普通用户删除。


那么如果我们想在Linux下,由多个用户建立一个共享文件来被大家共同访问,怎么办?

首先这个文件,不能在我们各自的家目录下创建,因为一般家目录是只对拥有者开放的(参考上面创建家目录后的权限,如:drwx------ 4 lzw lzw 4096 Feb 21 10:09 lzw),其他人都进不去,也就达不到共享的效果了。于是乎,我们便可在系统的非用户目录下创建!(如根目录/,创建与家目录同一级别共享文件)

那么便可以使用超级管理员用户,在根目录下新建一个共享文件(以shared为例),并将其other权限设为rwx,以便共享。那么新的问题又来了,既然w权限放开了,那么岂不是所有用户都可以随便删里面的文件了? 这时就引入新的概念,粘滞位。当一个目录被设置为“粘滞位”(使用chmod +t filename指令),则该目录下的文件只能由:1. 超级管理员(root)删除;2. 该目录的所有者删除(一般也为root);3. 该文件的所有者删除。

目录
相关文章
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
10月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
428 16
|
10月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
203 20
|
10月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
550 3
|
9月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
170 0
|
9月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
231 0
|
安全 Unix Linux
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
25000多字详细讲解,深度剖析权限管理核心。从基础权限到复杂的特殊权限,逐一拆解,无论你是零基础小白还是经验丰富的运维人员,都能在这里找到提升技能的关键知识,全面掌握 Linux 权限管理。还不快来看看?
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
|
12月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
452 4
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
733 6
|
安全 Linux 数据安全/隐私保护
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
675 6