Linux的权限管理

ops/2024/9/25 10:39:41/

文章目录

  • 文件权限
    • 文件类型
    • 文件访问者的分类
    • 文件权限的类型
  • 文件访问权限的设置
  • 目录的权限

文件权限

对于每个LInux文件,如果用ll指令查看的话,可以发现每个文件前面都有一串类似的字符:
在这里插入图片描述
这里总共有十个字符,其中第一个字符表示文件的类型,后面九个字符表示文件访问者的权限。

文件类型

LInux的文件类型分为以下几种:

  1. d:文件夹
  2. l:软链接(类似Windows的快捷方式)
  3. b:块设备文件(例如硬盘、光驱等)
  4. p:管道文件
  5. c:字符设备文件(例如屏幕等串口设备)
  6. s:套接口文件
  7. -:普通文件

显然我们上面那个文件就是一个文件夹。
此外,在众多文件类型中,最常见的是文件夹类型和普通文件类型。

文件访问者的分类

在Linux操作系统中,我们通常将访问者分为三类;

  1. 文件的所有者:u---User
  2. 文件所在的组:g---Group
  3. 其他用户:o---Others

值得注意的是root用户凌驾于所有访问者之上。root不受权限的约束。

文件权限的类型

一个文件的权限共有三个:

  1. r---读权限
  2. w---写权限
  3. x---执行权限

前面提到的十个字符,第一个表示的是文件的类型。剩下的九个字符中,前三个是u的权限,中间三个是g的权限,后面三个是o的权限。

  • 也就是说,三个字符代表了访问者的三个权限。三个权限的顺序为rwx。如果没有这个权限即为-。
  • 例如:r--为只读权限;rw-为读写权限;---为无权限。
  • 关于执行权限需要特别说明一下:文件被执行需要满足的条件,访问者具有执行权限,文件是可执行文件

文件访问权限的设置

chmod [参数] 权限 文件名

常用选项:

  • R->递归修改目录文件的权限。
  • 注意:只有文件拥有者和root才能修改文件的权限。

我们可以通过u/g/o/a(所有人) +-= rwx来修改权限。
在这里插入图片描述
# chmod u+x test.c
在这里插入图片描述
# chmod u=rw test.c
在这里插入图片描述
此外,如果将有权限看成1,无权限看成0.则rwx对应了111这样一个三位的二进制数。我们可以通过输入对应的十进制数来设置访问权限。
# chmod 000 test.c
在这里插入图片描述
# chmod 664 test.c
在这里插入图片描述
其中,6对应的二进制是110,对应的权限为rw-;4对应的二进制为100,对应的权限为r--。

chown [参数] 用户名 文件名

能够改变文件的拥有者。

chgrp [参数] 用户组名 文件名

能够修改文件的所属组。

umask 权限值

  • 单独使用umask时,能够查看文件掩码。
  • 加上权限值时,能够设置文件掩码

我们新建的文件默认权限为0666,目录的权限为0777.
但细心的读者可以发现,我们平时新建的普通文件权限明明就是-rw-rw-r--,新建文件夹的权限是drwxrwxr-x。
这似乎和我们的默认权限不太吻合啊!
实际上新建文件时设置的权限,会消掉umask(文件掩码)对应的权限。
普通用户umask的默认值为0002,root用户umask的默认值为0022.
这就是为什么当我们用普通用户创建一个普通文件时,权限为-rw-rw-r--,因为others的权限中的w被掩码给过滤掉了。

file [选项] 文件

能够辨识文件类型。
常用选项:

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z 尝试去解读压缩文件的内容。

# file test.c
在这里插入图片描述
# file -c test.c
在这里插入图片描述

此外,我们还可以使用sudo来分配权限。

目录的权限

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

换言之,我们只需要拥有文件夹的w权限就能随意删除文件夹里面的文件,即使这些文件的所有者不是我们。这显然对所有者来说时不公平的。
为了解决这个问题。

Linux引入了粘滞位的概念。

chmod +t 目录名

经过上面的指令操作,就可以将目录加上粘滞位。
那么一个目录被设置了粘滞位,那么这个目录下的文件只能由

  1. root
  2. 目录user
  3. 文件user

删除。


http://www.ppmy.cn/ops/30719.html

相关文章

美国站群服务器上常见的操作系统选择指南

美国站群服务器上常见的操作系统选择指南 美国站群服务器的选择操作系统对于服务器的性能和功能至关重要。本文将为您介绍在美国站群服务器上常见的操作系统选择指南,以帮助您做出明智的决策。 在选择美国站群服务器时,选择合适的操作系统是至关重要的…

海外IP代理中的HTTP/SOCKS5协议都有哪些区别?

随着互联网大数据的兴起,代理ip也成为了很多用户完成任务时不可缺少的部分,代理ip随着出现的主要作用是变换ip,突破ip限制等问题,使用过代理ip的用户都知道,代理ip分为很多种,长效,短效及不同协…

数据结构(C):玩转顺序表

🍺0.前言 言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享数据结构知识的小赵同学,今天要分享的数据结构知识是顺序表,在这一章,小赵将会向大家展开聊聊顺…

使用Github Action实现Hexo博客自动化部署

本文参考自 Akilar,原文地址:https://akilar.top/posts/f752c86d/ 每次部署Hexo都需要运行指令三件套,随着文章越来越多,编译的时间也随之越来越长,通过Github Action,我们只需要在每次完成博客的编写或修…

QT:label标签/进度条的使用

文章目录 设置不同格式的文本显示图片文本对齐/自动换行/缩进/边距LCDNumber倒计时 ProgressBar进度条 设置不同格式的文本 在文本格式中,存在富文本,makedown格式的文本,还有纯文本,下面就依据这三个进行举例 #include "w…

DAO是什么?有什么用途?

DAO(Decentralized Autonomous Organization,去中心化自治组织)是一种基于区块链技术的组织形式,它没有中央管理层,而是通过智能合约和区块链上的代码来运作。DAO 的决策过程是透明的,通常由组织的成员通过…

学习 Rust 的第十四天:如何使用HashMap

大家好, 今天我们来看一下哈希图,由于意外情况,我昨天没能上传,所以现在补上。让我们直奔主题。 简介 哈希图存储键值对,并使用哈希函数来确定放置键/值的位置。 哈希图是 std::collections 模块的一部分。 创建 …

【Flask 系统教程 4】Jinjia2模版和语法

Jinjia2 模板 模板的介绍 Jinja2 是一种现代的、设计优雅的模板引擎,它是 Python 的一部分,由 Armin Ronacher 开发。Jinja2 允许你在 HTML 文档中嵌入 Python 代码,以及使用变量、控制结构和过滤器来动态生成内容。它的语法简洁清晰&#…