Linux -权限

发布于:2024-12-21 ⋅ 阅读:(16) ⋅ 点赞:(0)

博客主页:【夜泉_ly
本文专栏:【Linux
欢迎点赞👍收藏⭐关注❤️

在这里插入图片描述

前言

本文主要内容:
在这里插入图片描述

👥 用户分类

Linux中,有两种用户:

  • root:超级用户
  • 普通用户:root adduser 添加的用户

root基本不受权限的约束,普通用户受权限约束。

这两个用户是可以相互切,不过从普通用户到root需要密码。

  • 普通用户 -> root :使用 su 或者 su -

    首先我们要知道:Linux中所有用户都要有对应的密码。
    比如我的 root账号 的密码是在云服务的控制台设置的,
    而 root 在创建普通用户时,也一定会设置普通用户的密码。

    当普通用户输入 su 并回车:
    在这里插入图片描述
    此时要求输入的密码就是 root 账号的密码。
    输入密码后,身份切换,但是所处的位置不变。
    比如这里还是在之前用户的家目录:
    在这里插入图片描述
    如果要回退到普通用户,可以输入 exit ,也可以使用 Ctrl D
    在这里插入图片描述

    如果说 su 是单纯的身份变化,那么 su - 就是身份变化加位置变化,
    相当于root 的身份重新登录
    在这里插入图片描述

  • root -> 普通用户: 使用 su <用户名>
    root用户如果想切换到其他用户,可以直接 su 加用户名,不用密码:
    在这里插入图片描述

  • 普通用户 -> 普通用户su 对应用户名
    普通用户切换到其他普通用户,需要对应用户的密码。

🔓 提升指令权限

普通用户,如果想要对某条指令提高权限,可以在前面加上 sudo
在这里插入图片描述
很明显,这里让我们输的是当前用户的密码,而不是 root 的密码。
那岂不是人人都是 root ?当然不是:
在这里插入图片描述
只有加进了这个 sudoers file 的普通用户才能进行 sudo
相当于是系统的白名单。

🛡️ 什么叫做权限

一件事是否允许被你做,这就是权限。
1.权限认证的是身份,即权限和‘谁在用’有关。
2.权限也和事物的‘属性’有关
比如文件权限,一般包含可读、可写、可执行等等。
在这里插入图片描述
当使用 ls -l 列出文件的详细信息时,最前面的是十个符号:
drwxrwxr-x
-rw-rw-r--

第一个字符表示文件的类型。
drwxrwxr-x
-rw-rw-r–

有人可能会想:
欸,不对啊,Windows中文件类型不是由后缀决定的吗?
你也知道那是Windows。。。
并不是所以操作系统都和Windows一样。

这里需注意,Linux系统中文件名后缀没有直接的意义。
而第一个字符代表的才是文件类型,
这里重点关注两个:

-: 普通文件(源代码,可执行程序,库等)
d: 目录文件

了解:
b: 块设备文件(磁盘文件)
在这里插入图片描述

c: 字符设备文件(键盘、显示器文件等)
在这里插入图片描述

p: 管道文件
在这里插入图片描述
管道文件可以用来进行通信:
在这里插入图片描述

剩下九个字符表示对应位置的权限:
drwxrwxr-x
- rw-rw-r--

一般由下面这四个字符组成:

  • r: 可读
  • w: 可写
  • x: 可执行
  • -: 对应的权限位置,没有权限

把具体的用户当作人,那么权限身份就是每个人所扮演的角色。
权限身份有三个:
拥有者、所属组、其他人
拥有者:
drwxrwxr-x 2 ly ly 4096 Dec 1 14:34 empty
-rw-rw-r-- 1 ly ly 0 Dec 1 08:29 test.txt
所属组:
drwxrwxr-x 2 ly ly 4096 Dec 1 14:34 empty
-rw-rw-r-- 1 ly ly 0 Dec 1 08:29 test.txt
其他人:不是拥有者,也不是所属组,就是其他人。

此时,了解了权限身份,就可以把刚刚的九个字符分成三组来看:
drwx rwx r-x
-rw- rw- r--
前三个,代表拥有者权限。
中间三个,代表所属组权限。
后三个,代表其他人权限。

单独的看一组:

  • 什么位置是什么含义,这是确定的。
  • 每一个位置只有是或者否,具有指定的权限。
r/- w/- x/-
有/无读权限 有/无写权限 有/无执行权限

⚙️ 权限的修改

chmod(change mode)用来改权限:
在这里插入图片描述
在这里插入图片描述
可以用字符表示,不过有点麻烦:
人:u(拥有者)、g(所属组)、o(其他)、a(所有)
操作:+(加)、-(删)、=(设置)
权限:rwx

我比较喜欢用他的八进制修改方式。
单独拿出一组来看:
r/- w/- x/-
很明显,三个位置分别对应两种情况(有 / 无),
总共 2 * 2 * 2 = 8种情况。
因此每一组都可以用一个八进制数字(0 ~ 7)表示。
而每一组权限的值由 4 个标志组成:
r:读,值为 4
w:写,值为 2
x:执行,值为 1
-:无,值为 0
如果我想把权限全部放开,就直接chmod 777 <文件名>
想把所属组、其他人的权限关闭,就chmod 700 <文件名>

root可以更改文件拥有者和所属组:
chown更改文件拥有者:
在这里插入图片描述

chgrp更改文件所属组:
在这里插入图片描述

chown也可以同时改变文件拥有者和所属组:
在这里插入图片描述

📝 补充

📜 文件权限的判断流程

当权限为: r–rw----
即拥有者不可以写,所属组可以写。
如果既是拥有者,又是所属组,那么可以写吗?
不可以,因为只会对应一个权限身份:

Start
 |
 v
用户发起操作(如访问文件/执行程序)
 |
 v
查身份(UID)
 |
 |-- 是 root(UID=0):直接允许操作 --> End
 |
 v
查目标对象权限(文件、目录等)
 |
 v
当前用户是不是目标对象的所有者?
 |
 |-- 是 --> 查所有者的权限位(rwx)
 |         |
 |         |-- 有权限 --> 允许操作 --> End
 |         |-- 无权限 --> 拒绝操作 --> End
 |
 v
当前用户是不是目标对象的所属组?
 |
 |-- 是 --> 查所属组的权限位(rwx)
 |         |
 |         |-- 有权限 --> 允许操作 --> End
 |         |-- 无权限 --> 拒绝操作 --> End
 |
 v
检查其他用户权限位(rwx)
 |
 |-- 有权限 --> 允许操作 --> End
 |-- 无权限 --> 拒绝操作 --> End

🛠️ 权限掩码

为什么我们创建文件的默认权限是我们所看到的样子?
比如普通文件是664,目录文件是775?
我们首先得知道,文件和目录的起始权限:
文件:666 (rw-rw-rw-
目录:777 (rwxrwxrwx
而最终变成我们看到的默认权限,是因为这里还有一个东西,
权限掩码 umask
在这里插入图片描述
权限掩码:凡是在umask中出现的权限,不会在最终的文件权限中出现。
这里有个计算公式:

最终权限 = 起始权限  & ( ~umask)

单看公式比较抽象,举个例子吧:
比如上面,umask值为2,
对文件:

起始权限:666 (rw-rw-rw-)
umask : 002 (-------w-)
取个反:~002 = 775 (rwxrwxr-x)
最终 = 666 & 775 = 664 (rw-rw-r–)

。。。
好像还是很抽象。。。

画个图:

在这里插入图片描述

简单讲,
umask中出现过的最终一定不会出现,
umask中没出现的最终不一定会出现。

🗂️ 目录权限与粘滞位

目录权限刚刚一直在讲,而具体作用在此处补充:

  • r : 是否允许我们查看指定目录下的文件内容。
  • w :是否允许我们在当前目录下进行创建,更改,删除。
  • x :是否允许我们进入目录。

当不同用户需要相互协作时,
可以让root在根目录下建个共享目录:
在这里插入图片描述

但这时,有个问题出现了。
当A在此目录建立了自己的文件,并设置该文件权限为700。

而此时,我们已经可以知道,
一个文件能否被删除,不由文件属性决定,由文件所处目录决定。
shared目录让所有人都有了 w 权限,
等同于所有人都可以在当前目录下进行创建,更改,删除。

那么对B来说,
不能读、不能看、也不能修改A的文件,但可以删!?

针对这个问题。。。
粘滞位:给目录设置。
内容只有拥有者和root能删。

是的,搞个特殊就行了:

在这里插入图片描述
在这里插入图片描述
drwxrwxrwt,这个 t 就是粘滞位

在这里插入图片描述


希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!