🧑💻Linux权限 🧑💻
文章目录
一、shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",但我们一般用户,不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
1.1 Shell的定义
Shell是运行在终端中的文本互动程序 。
从技术角度, Shell的最简单定义是命令行解释器主要包含:
- 将使用者的命令翻译给核心(kernel)处理
- 将核心的处理结果翻译给使用者
1.2 为什么要有Shell外壳程序?
- 99.99…%的人不善于直接访问操作系统
- 如果让人直接访问操作系统,操作成本特别搞并会带来不安全因素
1.3 外壳程序的意义
- 是用户和操作系统交换的中间软件层,可以传递请求指令,让OS执行命令,并把执行结果返回。
- 在一定程度上,保护操作系统。让人访问人和操作系统的shell软件层,除了问题也是软件层的问题,不会影响操作系统。
1.4 外壳程序怎么做到的?
- Shell 是对所有外壳程序的统称,通常可以分为两种: 命令行 Shell 与 图形 Shell 。 对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,通过点击从而完成我们的操作。
- Shell之于Linux,也是对我们的指令进行解析,解析指令给Linux内核,反馈结果在通过内核运行出结果,通过shell解析给用户。
- bash是最常用的一种shell ,是具体的一种Shell, 是当前大多数Linux发行版的默认Shell。
- Shell程序本身是一个进程,Shell外壳程序接收到用户的需求后会派生子进程来进行命令行解析以及程序的相关执行。
二、Linux权限的概念
2.1 对人来说
Linux下有两种用户:超级用户(root)、普通用户。
root 只有一个,具有Linux的最高权限,一般不受权限约束,类似于window中的管理员。
普通用户:可以有多个,要受权限的约束。( 👀 Linux是一个多用户操作系统,可以同时存在多个用户,window同样也是)
我们有多个用户,
su 用户名
就可以完成用户的切换,如果我们是普通用户切换到超级用户的时候也可以使用su -
切换。当我们在root和普通用户的身份的时候,其实就是切换当前的权限。
2.2 对角色和文件来说
⭐权限就是由事物的基本属性决定一件事情是否允许某人做。
简言之,权限的核心 = 人 + 事物属性
例如:在Linux下文件的权限有r(read,读取)、w(write,写入)、x(execute,执行),这是Linux下文件的基本属性,而它是否允许特定的人去 r w x 就是权限的存在意义。
⭐文件的属性:
在Linux下有三种角色:
- 所属用户 (文件属于谁)
- 所属组 (文件属于哪一个组 )
- other (不属于上面两种的任何一个,就是other)
当我们在命令行输入 ls-l
时
- 第一个字符,表示该文件的类型(在Linux系统中,不以文件的后缀来区分文件的类型,只是方便我们查看,与Window差别非常大。但是在Linux系统下的软件是不是以后缀来区分还是要看具体的软件)
- 第一个字符为 d 表示目录,第一个字符为 - 表示普通文件,p 表示管道文件,b 表示块设备比如磁盘, c表示字符设备比如键盘显示器等。
- 后面的一串字符三三为一组,表示角色的权限属性,r w x位置的顺序是绝对确定的,没有的话就是 - - - ,r(read,读取)、w(write,写入)、x(execute,执行)。
三、权限的操作
3.1 更改角色的权限
chmod
chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:R -> 递归修改目录文件的权限
说明:⭐只有文件的拥有者和root才可以改变文件的权限
参数
+
向权限范围增加权限代号所表示的权限
-
向权限范围取消权限代号所表示的权限
=
向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
举例:
chmod u+rw myfile.txt
chmod g-r myfile.txt
⭐root不受权限的约束(正所谓刑不上大夫,礼不下庶人正是同一个道理)
简化修改方法:八进制方案
- 要修改权限的角色有三个,每个角色有三个,每个权限的位置也是确定的。
- 当我们把有这种权限设定为1,没有这种权限设定为0 ,三种权限都有就可以表示为111,111转换为八进制就是7,也就表示三种权限都有的时候可以用7表示。
举例:
- 让所有角色拥有读写执行三种权限:
chmod 777 myfile.txt
- 所有角色取消读写执行三种权限
chmod 000 myfile.txt
3.2 更改文件的属性⭐
chown
chown
功能: 修改文件的拥有者
格式: chown [参数] 用户名 文件名
举例: chown -R user1 myfile.txt
说明:⭐ 在root权限下才可以执行,如果用户想执行此命令,需要sudo执行此命令。
- sudo意味着执行后续命令,要以root的权限级别来执行,但是仅限于此条命令。
- 相当于root没来,但是root派了一道圣旨,让用户执行临时以root的权限执行此条命令 。
- 如果用户向执行root,提升权限,需要将该用户添加到信任列表里面,才可以执行sudo,添加用户到信任列表是需要root身份的。打开信任列表文件
vim / etc /sudoers
chgrp
chgrp
功能: 修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组
举例: sudo chgrp user1 myfile.txt
说明: ⭐在root权限下才可以执行,如果用户想执行此命令,需要sudo执行此命令。
3.3 目录的权限⭐
- 可读权限: 如果目录没有可读权限, 则无法用
ls
等命令查看目录中的文件内容。 - 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
- 可执行权限: 如果目录没有可执行权限, 则无法进入到目录中。
💡注意:
- 进入一个目录需要 X (可执行)权限,目录的可执行权限是表示你可否在目录下执行命令; 权限只被认证一次,比如我即使拥有者也是所属组,我在拥有者的时候,没有X权限,我在所属组种有X权限,我仍然进不去此目录。
3.3 umask
Linux默认: 一个目录被创建,起始权限是:777
一个普通文件被创建,起始权限时:666
可是实际上我们创建一个目录和普通文件时会发现并不符合上述的默认权限👇
为什么起始权限是这样的呢❓
答:是因为 umask
umask——权限掩码
功能:查看或修改文件掩码。
新建文件夹默认权限=0666,新建目录默认权限=0777,但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & (~umask)
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限,凡是umask中出现的权限,都不应出现在最终权限。超级用户默认掩码值为0022,普通用户默认为0002。
3.4 粘滞位
为什么要有粘滞位❓
- 一个文件能否被删除,不取决于这个文件本身的属性,而是取决于这个文件所在的目录是否有可执行的权限。
- 这好像不太科学啊, 当所有用户都在一个共同的路径下,对该目录有读写执行的权限,我创建的一个文件, 凭什么能被你删掉。
- 为了解决这个不科学的问题, Linux引入了粘滞位的概念。
⭐粘滞位的作用:
粘滞位既能保证多个用户共享一个目录,在该目录下进行读写,创建删除文件但是自己只能删除自己的,不能删除别人的。
粘滞位的使用
格式: chmod +t mydir
💡注意事项:
- 当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由一、超级管理员删除 二、该目录的所有者删除 三、该文件的所有者删除。
- 粘滞位一般是谁设置,谁才可以取消(root除外)
- 粘滞位只能给目录设置,是限制other的权限的!