【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),则该目录下的文件只能由

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除

相关推荐
追风赶月、9 分钟前
【Linux】线程同步与互斥
linux
Karoku0661 小时前
【docker集群应用】Docker网络与资源控制
运维·数据库·docker·容器
梦游钓鱼1 小时前
pyshark安装使用,ubuntu:20.04
linux·运维·ubuntu
火龙谷1 小时前
CentOS7将yum源更换为国内源教程
linux·centos
战族狼魂1 小时前
CentOS 上安装各种应用的命令行总结
linux·运维·centos
学Linux的语莫2 小时前
ansible变量
linux·运维·服务器·ansible
北京迅为2 小时前
【北京迅为】iTOP-4412全能版使用手册-第十二章 Linux系统编程简介
linux·嵌入式硬件·4412开发板
清源妙木真菌2 小时前
Linux:进程控制
linux
爱吃喵的鲤鱼2 小时前
Linux——文件系统清尾、动静态库
linux·运维·服务器
最数据2 小时前
Linux或者Docker中时区查询和修改(差8小时问题)
linux·运维·服务器·docker·.net