【Linux】权限管理(上)

简介: 【Linux】权限管理(上)

1.shell 命令以及运行原理

我们都知道Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质上是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面就是我们所说的“外壳程序”。

4eb7d8847c604e94a18ce3a0af489971.png


Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。


而是通过kernel的 外壳程序,也就是所谓的 shell,来与kernel沟通。

shell 是什么?

shell 是包裹在操作系统外部的软件层,所以形象的称之为 外壳程序。


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


将使用者的命令翻译给核心(kernel)处理。

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

那么我们如何理解 shell ?

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

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

如果shell 接受到非法指令,可能会直接拦截,不会让操作系统执行指令,从而达到保护操作系统的目的。

为了防止用户的非法指令导致 shell 自身崩溃,shell 一般都不会去执行对应的指令,而是让子进程去执行。


总结:shell 是外壳程序,包裹在操作系统外层的软件层,为命令行解释/操作解释,将用户的操作解释交给操作系统,让操作系统执行,执行完毕,将结果经过shell再传递给用户。


如果我们在终端输入 ls /usr/bin/bash -a:

eb08cc29b5e048209e9dd4fb02a7c872.png

使用ls /usr/bin/bash -a ,显示的并不是shell而是bash,bash也是一种外壳程序。因为bash是 centos 上的外壳程序,而 shell 是 外壳程序 的统称。


2.Linux的用户权限

1、权限概念引入

生活中, 权限处处存在。比如腾讯视频,有些视频是vip才能看的;打游戏的时候,有些皮肤是需要钱买的,这些都是对人的限制。

有时访问的对象可能天然就没有这种“属性”。比如我想咬一口磁盘上的文件,这是不可能的。因为该事物没有这一层属性。所以我们基本可以得出结论: 权限 = 人 + 事物属性。

了解了基本概念,我们开始学习 Linux 上的权限。

2、用户分类

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

root(超级用户):可以在linux下做任何事情,基本不受权限约束,且一台机器上只有一个root用户。

普通用户:在Linux下做有限的事情,可以有多个普通用户。

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

3、用户切换

命令:su 用户名

功能:切换用户

对于 root用户来说,使用 su 普通用户 可以直接切换到普通用户:

286165721a6a400192063d7b39ecf612.png

但是对于普通用户来说,使用 su 指令时,会要求输入 root 用户的密码:

9aa8aa3b4c0d4524940e6cf185bee0be.png

而对于 普通用户 切换到 超级用户 还有两种方式:

su:从普通用户切换到超级用户,所处工作目录不变化,只单纯地进行身份变化。

su -:从普通用户切换到超级用户,会改变工作目录

对于 su:

b8f1021517654f4d9d5075ef9fbc8c2c.png

对于 su -:

4e6f5cfdd924436fbf62b8b90b689e2b.png

注:如果切换用户后想要退出,可以按 ctrl + d 退出,回到之前的用户。


4、用户提权

使用普通用户时,有时会因为权限不够,而导致某条指令无法执行。

若出现了报错:Permission denied,意思是权限被拒绝。

面对这种情况可以 单条指令进行暂时提权:

407c4feb26b842ab9f3b1daac31bd8af.png

对于提权就要用到 sudo 指令,但是这个需要配置一下,不会配置的同学可以跳转到这篇博客【Linux】普通用户无法使用sudo指令的方法

sudo 指令是让普通用户使用单条指令时暂时拥有 root 用户的权限,使用后需要输入当前普通用户的密码

6b5c9a1085034a4ab5b206208d3119fb.png

注:sudo 的存活期一般为五分钟,五分钟内再次使用 sudo 指令无需输入密码。


3.Linux 权限管理

对于 Linux 的权限管理,我们主要围绕一张图进行学习:

9a071f26a01e4f31b1ef1fd26195978a.png

3.1. 文件访问者的角色划分

对于 Linux 文件的访问者可以分成三类:


文件拥有者:文件和文件目录的所有者,u —— user

文件所属组:文件和文件目录的所有者所在组的用户,g —— group

文件的 other:其它用户,除了拥有者和所属组之外的用户,o —— others


Linux 任何一个文件都一定有文件的 拥有者 和 other,拥有这个文件的就是拥有者,除了拥有者之外的其他用户就是 other。


但是所属组是什么?为什么要存在所属组?


在某个公司当中有两个小组团队(A组、B组)在同一个Linux服务器上进行着同一款项目的开发(赛马机制),而张三是A组当中的一员。

张三写完了代码,组长要看,但是这里Linux不考虑所属组的概念,只有拥有者和other,张三是拥有者,那么组长属于other。给组长开放权限也就是给other开权限,组长可以看了,但是B组也是other就也能看到了,这里也就涉及到了权限安全问题。

所以 Linux 引入了 所属组 的概念,让拥有者为组内成员开放权限,给组里的人看,其他人还是other,其他人看不了。这样子权限安全问题就减少了。更灵活的进行权限配置,满足团队协作。

梳理一下 用户 和 文件访问者的关系:

用户就是 root 和 普通用户,是人。而拥有者、所属组、other 是角色。

人可以扮演不同的角色,但是角色可以一直变化。用户可以是拥有者、所属组、other 中的任意一个,但是角色不可能称为人。

3.2. 文件类型和访问权限

我们之前学习的第一个指令就是 ls 指令,ll 可以列出文件详细信息:

779189946cab4514ae222a9fee1cf2e7.png

那么先开始的一长串10个字符是什么意思呢?就比如:-rw-rw-r--

这10个字符可以分为两组:第一个字符 和 后九个字符。分别对应着 文件类型 和 文件访问权限 。

a、文件类型(后缀理解 + file 指令讲解)

第一个字符为文件类型。可能大家会有些疑惑,文件类型不是由文件后缀来区别的吗?

我们通过样例求证一下,Linux 中文件类型是否是由文件后缀来区别的:

首先,nano 一个 test.c,向其中输入代码,编译运行:

24119f38474845b387965fa4392ed40d.png

程序可以跑过,那么我修改一下 a.out 的文件后缀呢?

34383a15426640f3a14b2e30de37f832.png

程序依然可以跑过,这就证明Linux上文件类型和后缀无关。


但是再修改 test.c 的后缀呢,test.c 还能编译过吗?

e52f4d247b8a40b8b31a6e3acdb7c5e0.png

这里却报错了,是因为我们证明结果错误吗?其实并不是,这是因为在Linux下文件后缀不用来标识文件类型,不代表gcc这个软件不需要后缀。系统不管,但不代表操作文件的软件不关心。

说到这,那么我们怎么理解 Linux 中的 文件后缀 呢?

文件后缀是给用户看的,让用户确定文件是什么类型。将后缀看做文件名的一部分。

文件类型大约被分为如下几类:


-:普通文件,文本,可执行程序,库、归档文件(压缩包)等平常带后缀的文件,在Linux下统一被称为普通文件

d:文件夹,目录

l:软链接(类似Windows的快捷方式)

b:块设备文件(例如磁盘、光驱等)

p:管道文件(用来进行通信的)

c:字符设备文件(例如键盘或显示器)

s:网络套接字socket文件


比如:字符设备文件

11969ed1949f489490f7a74352855310.png

file 指令:


在 Linux 中,file 指令能 辨识文件类型。

语法:file [选项] 文件或目录…

常用选项:


-c 详细显示指令执行过程,便于排错或分析程序执行的情形。

-z 尝试去解读压缩文件的内容。


可执行程序:

b59451ca31844f1dbee96e08310f35f6.png

空文件:

8a7e0106b4d34ba8899fd3f40c546be4.png

b、文件访问权限

后9个字符为 文件访问权限。9个字符,每三个一组,分别代表着 拥有者、所属组、other的权限。


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

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

x —— 可执行:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限,权值为1。

-:表示不具有该项权限


-rw-rw-r–:后九个字符就代表着,拥有者具有读、写权限,不具有执行权限;所属组具有读、写权限,不具有执行权限;other具有读权限,不具有写、执行权限。


在使用文件时,只能用一种身份对文件进行处理,比如:作为拥有者:r-- 作为所属组:rw-;虽然两个身份都是我,但此时我只能作为拥有者只读文件。除非拥有者变成其他人,我才能作为所属组读写文件。


4.文件访问权限的更改

文件访问权限的修改主要分为对 拥有者、所属组、other权限的更改 和 对文件拥有者的更改 和 对文件所属组的用户的更改。


一般来说更改一个文件的权限,必须是文件的拥有者或者是 root 用户。


1. chmod 指令(对拥有者、所属组、other权限的更改)

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


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

常用选项:

R -> 递归修改目录文件的权限

chmod 命令设置权限的格式:

chmod u/g/o/a ±= rwx filename

+:向权限范围增加权限代号所表示的权限

-:向权限范围取消权限代号所表示的权限

=:向权限范围赋予权限代号所表示的权限


用户符号:

u:拥有者

g:所属组

o:其它用户

a:所有用户


字符表示法表:

80b64719a6bd4a7cbde5a7f55addfaea.png

对单个用户的权限进行更改:chmod 用户 ±权限 文件名9e879a8e9aa743e095c72f1dbb06d216.png


对多个用户的权限进行修改:chmod 用户 ±权限,用户 ±权限,…(上限三个,拥有者、所属组、other) 文件名

56cd433b36494e76a2a065006ed87888.png

对全部用户进行权限修改:chmod a ± 用户权限 文件名

0889e4534e164836bb1f13b0a39b34b1.png

对用户进行 = 方式权限修改:例如 u = g,就是让 拥有者获得所属组对等的权限

dc0e0317329f487f9f1da204c30d440c.png

chmod 三位八进制 filename

通常写作 chmod 三位八进制 用户名的形式,每个八进制按顺序分别表示 拥有者、所属组、other,三个八进制组成的序列就可以表示各角色的权限。


r 权限权值为4,w 权值为2,x 权值为1。


八进制数值表示法表:

8a8424fe54a34aaebf369fe820a03505.png

举个例子:614

拥有者:6 = 4 + 2 + 0,设置拥有者有读权限,有写权限,无执行权限。

所属组:1 = 0 + 0 + 1,设置所属组无读权限,无写权限,有执行权限。

other:4 = 0 + 4 + 0,设置other无读权限,有写权限,无执行权限。

相关文章
|
4月前
|
算法 Linux 数据安全/隐私保护
【linux】root大王如何制约普通用户——权限管理
【linux】root大王如何制约普通用户——权限管理
|
6月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
142 0
|
6月前
|
算法 Linux 数据安全/隐私保护
Linux权限管理:深入理解setuid、setgid、seteuid和setegid
Linux权限管理:深入理解setuid、setgid、seteuid和setegid
532 0
|
15天前
|
Linux 数据安全/隐私保护
linux权限管理
本文介绍了Linux系统中的权限管理,包括权限的概念、用户和用户组与权限的关系、文件权限位的说明以及rwx权限的具体含义。同时,详细讲解了如何使用`chmod`和`chown`命令更改文件和目录的权限,并通过多个实验演示了不同权限组合对文件和目录的实际影响。最后,总结了文件和目录权限的一些重要知识点,帮助读者更好地理解和应用Linux权限管理。
41 1
linux权限管理
|
1月前
|
Linux 数据安全/隐私保护
探索Linux操作系统下的权限管理
【8月更文挑战第66天】在数字世界中,操作系统的权限管理就如同现实世界中的钥匙和锁,保护着我们的数据安全。本文将带你深入理解Linux系统中的权限设置,通过实际代码示例,让你掌握文件和目录权限的分配与管理技巧。准备好了吗?让我们开始这场关于权限管理的探险之旅吧!
83 14
|
5月前
|
网络协议 Linux 数据安全/隐私保护
【Linux操作系统】权限管理和粘滞位
【Linux操作系统】权限管理和粘滞位
【Linux操作系统】权限管理和粘滞位
|
5月前
|
安全 Linux Shell
【Linux】权限管理
【Linux】权限管理
49 5
|
6月前
|
运维 安全 Linux
深入理解 Linux 文件系统的权限管理
【5月更文挑战第30天】 在 Linux 操作系统中,文件系统权限管理是维护系统安全与数据完整性的基石。本文旨在深入探讨 Linux 权限模型的核心概念、实现机制及其对系统安全性的影响。通过对用户身份、文件权限和访问控制列表(ACL)等关键元素的剖析,揭示权限管理在实际操作中的应用细节。文章还将讨论如何有效配置权限来优化系统性能和提升安全性,以及解决常见的权限问题的策略。
|
6月前
|
Linux PHP 数据安全/隐私保护
深入理解PHP7的返回值类型声明深入理解 Linux 文件系统的权限管理
【5月更文挑战第30天】在PHP7中,引入了返回值类型声明的特性。这一特性使得开发者可以在函数定义时指定函数应返回的值的类型。本文将详细解析返回值类型声明的用法,以及它在实际开发中的应用,帮助读者更好地理解和使用这一特性。
|
6月前
|
安全 Linux 数据安全/隐私保护
深入理解Linux文件系统的权限管理
【5月更文挑战第24天】 在Linux操作系统中,文件系统权限管理是维护系统安全和用户数据隔离的关键机制。本文将深入探讨Linux文件系统中的权限模型,包括用户、组和其他类别的读、写、执行权限。我们将分析权限位的具体含义,如何通过命令行工具修改权限,以及权限掩码(umask)的作用。此外,我们还将讨论文件系统权限在实际应用中的常见问题及其解决方案,帮助读者构建更为安全且高效的Linux工作环境。