【Linux】权限的概念

一、shell命令以及运行原理

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

什么是shell:

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

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

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

对于shell的理解:

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作

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

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

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

二、Linux用户权限

权限的概念在我们生活中无处不在,对于计算机来说也是如此。

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

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

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

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

在对用户进行切换 时 ,我们可以使用su命令。

当root用户进行切换时可以直接切换到普通用户:

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

注意:

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

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

sudo指令 :

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

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

我们可以用sudo指令暂时提升权限

在我们使用sudo指令时,若出现这种报错,说明该用户没有在白名单

配置sudo用户白名单:

第一步需要我们先切换到root用户

第二步 使用 vim 打开 /etc/sudoers

cpp 复制代码
vim /etc/sudoers

第三步 找到 root ALL=(ALL) ALL一行,在下方插入 你需要设置的用户名 ALL=(ALL) ALL

最后 wq!保存退出即可

三、Linux权限管理

文件的访问者 :

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

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

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

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

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

文件类型和访问权限:

我们使用ls -l指令,可以列出文件详细信息

其中 可以分为两组,第一个字符和剩下九个字符,

分别对应着 文件类型 和 文件访问权限 。

文件类型:

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

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

d:文件夹,目录

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

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

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

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

s:网络套接字socket文件

我们先来编译一段代码

然后我们改一下a.exe 的后缀,可以看得出文件类型和后缀无关。

file 指令:

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

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

常用选项:

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

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

文件访问权限:

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

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

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

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

-:表示不具有该项权限

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

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

更改访问权限:

文件访问权限的修改主要分为对 拥有者、所属组、other权限的更改 和 对文件拥有者的更改 和 对文件所属组的用户的更改。(更改一个文件的权限,必须是文件的拥有者或者是 root 用户。)

chmod 指令:

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

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

常用选项:

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

chmod 命令设置权限的格式:

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

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

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

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

用户符号:

u:拥有者

g:所属组

o:其它用户

a:所有用户

对用户的权限进行更改:chmod 用户 ±权限 文件名

也可以修改多个

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

8进制修改方法

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

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

chown 指令:

**功能:**修改文件的拥有者

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

当前Linux下有两名用户

尝试把test.c的拥有者从swean改成gzx

看到请求被拒绝

因为把东西给别人是需要经过对方同意的,普通用户是无法直接修改文件拥有者,可以用 root 强制把文件拥有者改掉,因为 root 是超级管理员,比如使用 sudo 提权一下,然后强制改掉:

chgrp指令:

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

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

常用选项:

-R 递归修改文件或目录的所属组

跟上面一样 普通用户是无法直接修改,需要root用户或者sudo提权

**补充:**chown指令也可以直接修改两个

无权限的演示:

就算是文件的拥有者,依旧不能读写。

但是 这些并不能约束到root用户。

目录的权限 :

目录权限的功能:

可执行权限 - x : 如果目录没有可执行权限, 则无法cd到目录中.

可读权限 - r : 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

可写权限 - w : 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

如果进入一个目录,只需要一种权限,就是可执行权限 x:

如果进入一个目录,没有 w 权限,则不能在目录中创建文件:

对于目录来讲,在没有r权限的目录下,无法查看当前目录下的文件名和文件属性:

目录文件的 r 读权限不是影响我进入(cd)目录,而是影响我查看(ls)指定目录下的文件内容 ;w 写权限 影响我在当前目录下进行创建(touch),更改(mv),删除(rf)文件。x 权限:是否允许用户进入对应目录。

四、默认权限

权限起始分为三部分:

默认权限:也就是我们看到的文件和目录一创建就有的权限。

起始权限:系统设定的权限。

最终权限:系统为了更好的控制文件权限,系统会有默认的 权限掩码 的概念(umask),起始文件和权限掩码进行计算后得到最终权限。

普通文件权限的起始一般都是666开始,目录文件一般是777。

可以用umask来查看权限掩码:

我们看待权限掩码 0002 时,看后三位002,这三位是八进制序列,一个八进制位是3个二进制位,翻译成二进制序列:000 000 010。

权限掩码特性:在起始权限中,去掉在权限掩码 umask 中出现的权限,不能影响其他任何权限。意思就是说,只要在 umask 中出现的权限,在 最终权限 里就不能出现。

最终权限公式:

最终权限 = 起始权限 & (~umask) (起始权限的值,按位与 取反后的权限掩码)

可以看出我们推测的结果没错

当我们修改一下umask的值

可以看出 最终权限也发生了改变

五、粘滞位

粘滞位出现的背景:在使用 Linux 的时候,未来可能会有一些共享目录,被所有的用户共享,用来保存普通用户产生的临时数据,使用户之间的安全更有保障。

而在 Linux 下,作为一个普通用户,它的家目录是只对自己开放的,从sherry 用户的权限只对 拥有者 有 rwx 权限就可以看出,且 所属组 和 other 没有任何权限。

而对于 共享目录 ,一般是由 root 用户创建,由root将权限放开后,供这台机器上的用户使用,从而满足不同的用户在公共的目录下进行文件的增删查改。

我们先用root在根目录创建一个共享目录并把权限改成777

可是在此目录下,只要有权限就可以随意删除文件,为了防止误删,就出现粘滞位

粘滞位只能给目录添加,root 可以使用 chmod +t share 添加粘滞位:

这就说明我们的 粘滞位 已经添加成功。

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除

相关推荐
道路与代码之旅20 小时前
Delphi - IndyHttpServer接收上传文件
运维·服务器
lybugproducer20 小时前
深入 Linux 文件系统:从数据存储到万物皆文件
linux
烦躁的大鼻嘎20 小时前
【Linux】深入Linux多线程架构与高性能编程
linux·运维·服务器·开发语言·c++·ubuntu
羚羊角uou20 小时前
【Linux】system V共享内存
linux·运维·服务器
林克爱塞尔达21 小时前
Linux入门(二)
linux·运维·chrome
破烂儿21 小时前
Ubuntu Server 安装图形界面和通过Window远程桌面连接服务器(Xrdp)
linux·服务器·ubuntu
Hello.Reader21 小时前
Kafka 运维实战基本操作含命令与最佳实践
运维·kafka·linq
存储服务专家StorageExpert21 小时前
手搓一个 DELL EMC Unity存储系统健康检查清单
linux·运维·服务器·存储维护·emc存储
笑口常开xpr21 小时前
Linux 库开发入门:静态库与动态库的 2 种构建方式 + 5 个编译差异 + 3 个加载技巧,新手速看
linux·c语言·动态库·静态库
小虾米vivian1 天前
达梦:将sql通过shell脚本的方式放在后台执行
服务器·数据库·sql