一文知晓Linux文件权限

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨

🐻推荐专栏1: 🍔🍟🌯C语言初阶

🐻推荐专栏2: 🍔🍟🌯C语言进阶

🔑个人信条: 🌵知行合一

🍉本篇简介:>:讲解Linux中权限相关的知识,权限管理,文件掩码,粘滞位等等.
金句分享:
✨你没有走错路,只是在等待风的到来.✨

一、用户介绍

(1) 用户分类

在初始Linux时,我们提到过,当时还讲解如何添加新用户.

Linux环境安装

Linux下有两种用户:

(2)root超级用户:几乎可以在linux下进行任何想要做的事情,为所欲为,不受限制.

(2)普通用户:在linux下进行受很多权限约束的事情.

小知识点:
root超级用户的命令提示符是"#".

普通用户的命令提示符是"$".

每个用户都需要各自的密码,无论是root超级用户还是普通用户.

(2) 切换用户

在学习阶段,我们建议使用普通用户,但是,很多时候,普通用户会受到很多限制.

比如:安装软件或者指令的时候要求使用root账户.

此时我们需要切换到root账户,进行下一步操作.

①从普通用户-->切换到root用户

powershell 复制代码
su root

从当前路径此时我们可以发现,这只是身份切换到了root,并不是以root账户的身份登录的.

切换回来,使用exit或者Ctrl+d.

如果我们想在普通账户身份登录后,切换到root时,是以root账户登录.

切换回去,依旧可以使用exit或者Ctrl + d.

root账户-->普通账户

不要密码,直接su username

牛牛小结:↓

提一句:为了解决指令执行时的权限问题,我们一种方式是切换到root用户,除此之外,我们还可以采用对一条指令进行提权的操作.

powershell 复制代码
sudo command(指令的名称)

此时只需要输入我们普通用户自己的密码就行了.但是这岂不是人人皆可以root了?

其实不是所有的普通用户都可以进sudo + 指令提权,只有被加入到root的信任用户名单的才可以,而一般我们创建的新用户都是不可以的,需要在root那手动配置.

二、权限管理

(1) 文件访问者分类:

C++中,我们对不同的用户分成了三类人:

  1. 所有者:文件或文件目录的所有者 u(全称:user)
  2. 组员:文件和文件目录的所有者所在的组的用户:g(全称:Group)
  3. 其他用户 o (全称:other)

(2) 文件类型分类:

d:文件夹

-:普通文件: 文本文件,可执行文件,库等.

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

b:块设备文件: 硬盘、光驱等

p:管道文件: 用来通信的文件

c:字符设备文件: 键盘、显示器等文件.

s:套接口文件

(3) 文件权限分类:

权限 文件角度 目录角度
r (全称:read) 读取文件内容的权限 查看该目录信息的权限
w(全称:write) 修改文件内容的权限 删除、移动目录内文件的权限
x(全称:execute) 执行文件的权限 进入目录的权限
- 无权限 无权限

① 读权限 (r (全称:read)):

从文件角度来说, 具有读取文件内容的权限.

从目录角度来说, 具有查看该目录信息的权限.

② 写(w(全称:write)):

从文件角度来说, 具有修改文件内容的权限.

从目录角度来说, 具有删除、移动目录内文件的权限.

③ 执行( x(全称:execute)):

从文件角度来说, 具有执行文件的权限.

从目录角度来说, 具有进入目录的权限.

介绍这些基本知识之后,我们可以开始学习权限知识啦!

当我们使用ll指令查询文件详细信息时,是否好奇过前面一大串是什么呢?

(4)修改用户权限:

目录下有一个test1.txt文件,对不同用户的权限如下:

文件名 user group other
test1.txt 可读可写不可执行 可读可写不可执行 只读

这里我们发现,似乎root不受权限的限制,可以自由行事!

(4)修改文件权限

那如果想修改文件对other权限,使其对other的权限

小结:

powershell 复制代码
//对单个用户修改权限
//示例:将test1.txt对other用户添加w权限
 chmod o+w test1.txt

//对多个不同用户进行不同的权限设置,中间用逗号隔开
 chmod u+x,g-rw,o-r test1.txt

//同时对所有用户进行统一操作.
 chmod a-rwx test1.txt

小知识:

还可以采用8进制的方式对文件权限修改.

示例:

(5)修改文件的拥有者

指令: chown 新拥有者名 文件名

全称: change owner

我是一件物品的拥有者,如果我想将它赠送给别人,这也要看别人是否同意.

要么对指令进行提权,要么利用root账户帮忙修改.

(6)修改文件的所属组

指令:chgrp 新组名 文件名

全称: change group

同样,自己是没有权限修改所属组的.

利用root账户进行修改:

三、文件掩码

我们分别创建一个文件和一个目录:

观察它们的文件权限:

很明显,它们的默认权限是

文件夹 文件
0775 0664

可默认权限真的是这样的吗?

(1) 查看文件掩码

指令:umask

不同环境可能有所差异.

(2) 修改文件掩码:

指令:umask 修改后的数值

(3) 文件默认权限计算

将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002

这里的减并不是直接减法,而是权限的减,即文件掩码中出现的权限,最后的文件权限中不得出现

计算公式:

powershell 复制代码
umask & (~umask)

这也就是为什么我们一开始看到的新创建的文件和文件夹的权限是 06640775

.

(4) 文件掩码的作用

Linux下的文件掩码(file mode mask)决定了新建文件或目录的默认权限。它是一种用于限制文件和目录权限的掩码,通过与系统默认权限进行按位与运算来决定最终的文件/目录权限。

默认情况下,新建的文件和目录的权限是非常开放的,因此要通过文件掩码来进行限制,以便确保文件和目录的安全性。文件掩码通常包括三个数字,分别代表所有者、组和其他人的权限。每个数字都由三个位组成,分别代表读、写和执行权限。例如,一个掩码为022的文件表示所有者具有读写权限,组和其他人只具有读权限。

四、粘滞位

粘滞位的引入

目录的权限强调:

  1. 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
  2. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
  3. 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

对于一个共享目录,有的文件我们不希望给其他人(other)看和修改.那other可以删除这个文件吗?

此时出现一个比较尴尬的问题:

对于这个文件,其他人既不能读,也不能写,但是居然可以删除,太离谱了吧,得不到的就毁灭?

为什么可以删除文件呢?

因为文件是否可以删除不是取决于文件本身的权限,而是该文件所在目录的权限,如果目录没有可写权限, 则无法在目录中删除文件.

那我们文件所在目录设置为其他人不可写不就行了吗?

(1)对其他用户去掉写权限;

(2) 再次测试:

是的,这样的确其他人不可读不可写也不可删了,但是目录设置不写以后,连创建文件和文件夹都不行了,这叫共享目录吗?

为了解决这个尴尬的问题,也就是在一个共享目录下,该目录具有对所有用户具有写权限,但是删除目录中的文件,只有两种人:

1、该目录的所有者删除(几乎只有root才可以创建)

2、该文件的所有者删除

(1) 设置粘滞位

指令:chmod +t 目录名

(2) 测试粘滞位:

五、权限的特殊问题

问题1:

文件所有者减去了文件的所有用户权限后,即使自己是所有者,依旧不可读写.

疯起来我连自己都敢打!

问题2;

如果一个用户对于test1.txt文件他既是所属组又是拥有者,但是该文件

拥有者:只读

所属组:可读可写

那该用户到底可不可以对文件进行写操作呢?

答案: 不能!

因为一个人只能是一个身份,第一个识别到是拥有者,则看到的只有读权限,我们可以用 root账户将拥有者改掉,我就是所属组了,就可以读写了.

有关linux权限的知识就讲到这里了,谢谢友友们的观看,我们下期见!

相关推荐
伤不起bb24 分钟前
MySQL 高可用
linux·运维·数据库·mysql·安全·高可用
whgjjim3 小时前
docker迅雷自定义端口号、登录用户名密码
运维·docker·容器
tmacfrank4 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
瀚高PG实验室6 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
QQ2740287566 小时前
Soundness Gitpod 部署教程
linux·运维·服务器·前端·chrome·web3
淡忘_cx6 小时前
【frp XTCP 穿透配置教程
运维
qwfys2006 小时前
How to configure Linux mint desktop
linux·desktop·configure·mint
南方以南_6 小时前
Ubuntu操作合集
linux·运维·ubuntu
一点.点6 小时前
自然语言处理的简单介绍
人工智能·深度学习·自然语言处理
冼紫菜7 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos