深入理解 Linux 权限管理:从 Shell 到文件权限

🌼🌼 在 Linux 系统中,权限是保障系统安全与稳定的核心之一。每个操作都可能涉及权限的管理和控制,特别是当你开始以不同用户的身份进行操作时。本文将通过生动的比喻与详细的技术解析,带你一起深入理解 Linux 权限系统的运作原理。

📖 什么是 Shell?

Shell 是 Linux 操作系统中的一个中间层,类似于一个桥梁,连接了用户与操作系统的内核(kernel)。我们平时通过命令行输入的指令,都是通过 Shell 来传递给内核执行的。你可以把它想象成一个助手,它帮你传达命令并把执行结果反馈回来。

Shell 比喻:小明和王婆的故事

假设我们有以下人物:

  • 小明:用户,想要完成一些操作。

  • 王婆:Shell,作为一个中介,负责传递小明的需求。

  • 小美:操作系统,最终接收命令并执行。

  • 小王:权限限制,可能会阻止命令的执行。

  • 村长:超级用户(root),可以直接进行任何操作。

场景一:命令执行成功

小明让王婆去做媒,王婆派出实习生去找到小美,小美同意了,任务完成。这里,小明的操作没有受到任何权限限制。

场景二:命令执行失败

小明让王婆去做媒,但小美已经和小王在一起了。王婆知道此事不能成,因此拒绝了命令并反馈“Permission Denied”(权限拒绝)。在 Linux 中,这种情况类似于普通用户没有足够权限去操作系统中的文件或资源。

场景三:超级用户的特权

小明非常喜欢小美,他求助于村长(root)。村长派王婆去做媒,这次王婆不受限制,能够顺利完成任务。这里的超级用户(root)可以无视所有权限限制,执行任何操作。 

📃 Shell 的作用

Shell 作为操作系统与用户之间的中介,承担了以下几项重要任务:

  1. 命令传递:Shell 将用户输入的命令传递给内核,并返回执行结果。

  2. 创建子进程:Shell 在执行命令时会创建子进程,确保操作不直接影响主进程。

  3. 权限管理:Shell 基于用户的权限,决定是否可以执行某个命令。

通过 Shell,Linux 系统能够根据用户的不同权限,决定是否执行某些操作。

Linux下有两种用户:

超级用户(root)普通用户。

超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

命令:su [用户名]

功能:切换用户。例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令

 

用户分类:User, Group 和 Others

在 Linux 中,文件和目录的权限是针对不同用户角色设定的。主要有三种用户分类:

  • User(u):文件的拥有者。通常,文件的创建者是该文件的拥有者。

  • Group(g):文件所属的用户组。用户可以通过将文件与特定组关联,给组内成员设置权限。

  • Others(o):除了文件拥有者和所属组外的所有用户。

每个用户角色可以被分配不同的权限(读、写、执行),通过这种权限组合来控制文件和目录的访问。以下是常见的权限组合表示:

  • rwxr-xr--:表示文件拥有者具有读、写、执行权限;组用户具有读、执行权限;其他用户只有读权限。

文件权限

在 Linux 系统中,文件权限决定了用户对文件的访问权限,包括读取文件内容、修改文件内容和执行文件。文件权限主要有三种:读权限(r)、写权限(w)和执行权限(x)。

1. 文件权限的三种类型
  • 读权限(r)

    • 作用:允许用户查看文件内容。

    • 适用:当文件具有读权限时,用户可以使用 catless 等命令查看文件内容。

  • 写权限(w)

    • 作用:允许用户修改文件内容。

    • 适用:当文件具有写权限时,用户可以编辑文件、添加内容或删除内容。

  • 执行权限(x)

    • 作用:允许用户执行文件(如脚本或程序)。

    • 适用:当文件具有执行权限时,用户可以通过命令行运行该文件(如执行 .sh 脚本或二进制文件)。

2. 文件的权限表示

文件的权限使用 rwx 表示,其中:

  • r(read)表示读权限。

  • w(write)表示写权限。

  • x(execute)表示执行权限。

例如,文件权限 rwxr-xr-- 表示:

  • 文件拥有者(User)具有读、写、执行权限(rwx)。

  • 所属组(Group)具有读、执行权限(r-x)。

  • 其他用户(Others)具有读权限(r--)。


目录权限

目录的权限控制与文件略有不同。目录权限决定了用户能否访问目录以及在目录中执行哪些操作。

1. 目录权限的三种类型
  • 读权限(r)

    • 作用:允许用户列出目录中的文件。

    • 适用:当目录具有读权限时,用户可以使用 ls 命令查看目录中的文件名。

  • 写权限(w)

    • 作用:允许用户在目录中创建、删除和重命名文件。

    • 适用:当目录具有写权限时,用户可以在该目录内添加或删除文件,修改目录中文件的名称。

  • 执行权限(x)

    • 作用:允许用户进入目录,进行文件查找和访问。

    • 适用:当目录具有执行权限时,用户可以使用 cd 命令进入该目录并访问该目录中的文件。如果没有执行权限,用户即使知道目录中的文件名,也无法访问该文件。

    • 没有读权限不能使用ls系列列出目录的文件,没有写权限不能在目录中创建,删除文件,没有执行权限就不能进入目录。

2. 目录权限与文件权限的差异
  • 对于文件,执行权限 使文件可以被运行或执行;

  • 对于目录,执行权限 使用户能够进入目录并访问目录中的文件,没有执行权限 时,用户不能进入该目录。

例如:

  • 如果一个目录的权限是 r--rw-,并且没有执行权限,则用户无法进入该目录,即使知道目录中的文件名;

  • 如果一个目录的权限是 --x,即便没有读权限,用户仍然可以进入目录,并通过文件的完整路径访问其中的文件,但无法列出目录中的文件名。

权限掩码(umask)简介

权限掩码(umask)是一个用于控制新创建的文件或目录的默认权限的工具。它通过掩蔽(屏蔽)掉默认的权限值,来决定文件或目录在创建时所能获得的权限。

什么是权限掩码(umask)

umask用户文件创建权限的屏蔽值,其作用是限制或关闭某些权限位。umask 并不是直接赋予文件或目录某种权限,而是通过对默认权限进行屏蔽来减少一些权限。

每个文件或目录在创建时,都会先有一组默认的权限(通常文件是 666,目录是 777),然后根据当前设置的掩码值(umask)来决定实际的权限。掩码值(前取反)通过 按位与运算(AND)与默认权限相结合,从而决定最终的权限。

默认权限和掩码
  1. 文件默认权限666(即 rw-rw-rw-),表示创建文件时,所有用户角色都有 权限,但没有 执行 权限。

  2. 目录默认权限777(即 rwxrwxrwx),表示创建目录时,所有用户角色都有 执行 权限。

掩码(umask)值

umask 值是一个 三位八进制数,每一位数字代表不同角色的权限屏蔽情况。它控制着默认权限中哪些权限被禁止。

  • 第一个数字:文件拥有者的权限

  • 第二个数字:文件所属组的权限

  • 第三个数字:其他用户的权限

掩码值的每一位可以是 07 之间的数字,对应以下权限屏蔽情况:

  • 0:不屏蔽任何权限

  • 1:屏蔽 执行 权限

  • 2:屏蔽 权限

  • 3:屏蔽 执行 权限

  • 4:屏蔽 权限

  • 5:屏蔽 执行 权限

  • 6:屏蔽 权限

  • 7:屏蔽 执行 权限

如何计算掩码

掩码是对默认权限进行 "屏蔽" 的值。默认权限为 666(文件)和 777(目录)。掩码通过 "取反" 和 "按位与运算" 来决定实际的权限。

举个例子:

  • 掩码值:022(一般的默认掩码值)

    • (默认文件权限:666(即 rw-rw-rw-

    • 默认目录权限:777(即 rwxrwxrwx

    掩码取反:

    • 掩码 022 取反为 755

    按位与运算计算文件权限:

    默认文件权限(666): rw-rw-rw- 掩码取反(755): rwxr-xr-x 计算结果:rw-r--r--

    结果是文件权限为 rw-r--r--(644即文件拥有者有读写权限,所属组和其他用户只有读权限)。

    按位与运算计算目录权限:

    默认目录权限(777): rwxrwxrwx 掩码取反(755): rwxr-xr-x 计算结果:rwxr-xr-x

    结果是目录权限为 rwxr-xr-x(755,一般目录的初始权限(即目录拥有者有完整权限,所属组和其他用户有读和执行权限,但没有写权限)。

查看和设置掩码
  • 查看当前掩码: 你可以使用命令 umask 来查看当前的掩码值。它会返回一个三位八进制数,例如 022

    umask

  • 修改掩码值: 使用 umask 命令加上新的掩码值来修改它。修改后的掩码会在当前会话中生效。如果要永久修改掩码,需要将它添加到用户的 shell 配置文件(如 .bashrc.bash_profile)中。

    umask 027

    这将屏蔽掉目录和文件的 "其他用户" 组的写权限。

权限掩码的示例
  1. 掩码 022

    • 默认权限(文件):666 -> rw-rw-rw-

    • 默认权限(目录):777 -> rwxrwxrwx

    结果:

    • 文件权限:rw-r--r--

    • 目录权限:rwxr-xr-x

  2. 掩码 077

    • 默认权限(文件):666 -> rw-rw-rw-

    • 默认权限(目录):777 -> rwxrwxrwx

    结果:

    • 文件权限:rw-rw----

    • 目录权限:rwxrwx--x

  3. 掩码 002

    • 默认权限(文件):666 -> rw-rw-rw-

    • 默认权限(目录):777 -> rwxrwxrwx

    结果:

    • 文件权限:rw-rw-r--

    • 目录权限:rwxrwxr-x

改变权限的三种指令 chmod,chown,chgrp

在 Unix 和类 Unix 系统中,chmodchgrpchown是用于管理文件和目录权限及所有权的重要命令,下面为你详细介绍这些命令以及 “所有组”“所有人” 在权限管理中的概念。

权限基本概念

在文件系统里,每个文件和目录都具备三种基本权限:读(r)、写(w)和执行(x),这些权限分别对应着不同的用户类型:

  • 所有者(u:文件或目录的创建者。
  • 所属组(g:和文件或目录关联的用户组。
  • 其他人(o:既不是所有者,也不属于所属组的用户。
  • 所有人(a:涵盖了所有者、所属组和其他人。

命令详解

1. chmod - 更改文件或目录的权限

chmod命令可用于修改文件或目录的权限。它有两种使用方式:符号模式和数字模式。

符号模式

  • 语法:chmod [用户类型][+|-|=][权限] 文件或目录
  • 示例:
    • 给文件所有者添加执行权限:chmod u+x example.txt
    • 从所属组移除写权限:chmod g-w example.txt
    • 给所有人添加读权限:chmod a+r example.txt

数字模式

  • 每个权限都有对应的数字:读(r)= 4,写(w)= 2,执行(x)= 1,无权限 = 0。
  • 语法:chmod [三位数字] 文件或目录
  • 示例:
    • 给所有者赋予读、写、执行权限(7),所属组赋予读、执行权限(5),其他人赋予读权限(4):chmod 754 example.txt
2. chgrp - 更改文件或目录的所属组

chgrp命令用于更改文件或目录的所属组。

  • 语法:chgrp [选项] 新组名 文件或目录
  • 常用选项:
    • -R:递归地更改指定目录及其所有子目录和文件的所属组。
  • 示例:
    • example.txt的所属组更改为newgroupchgrp newgroup example.txt
    • 递归地将my_directory目录及其内容的所属组更改为newgroupchgrp -R newgroup my_directory
3. chown - 更改文件或目录的所有者和所属组

chown命令用于更改文件或目录的所有者,也可以同时更改所属组。

  • 语法:chown [选项] [新所有者][:新所属组] 文件或目录
  • 常用选项:
    • -R:递归地更改指定目录及其所有子目录和文件的所有者和所属组。
  • 示例:
    • example.txt的所有者更改为newuserchown newuser example.txt
    • example.txt的所有者更改为newuser,所属组更改为newgroupchown newuser:newgroup example.txt
权限要求
  • chmod:通常所有者或超级用户(root)可以更改文件或目录的权限。
  • chgrp:超级用户(root)可以将任何文件或目录的所属组更改为系统中的任何组;普通用户只能将自己拥有的文件或目录的所属组更改为自己所属的组。
  • chown:一般只有超级用户(root)才能更改文件或目录的所有者和所属组。
查看权限

你可以使用ls -l命令查看文件和目录的权限和所有权信息,示例输出如下:

-rw-r--r-- 1 user group 123 Apr 16 10:00 example.txt
  • 第一个字符表示文件类型(-表示普通文件,d表示目录等)。
  • 接下来的 9 个字符分为三组,分别表示所有者、所属组和其他人的权限。
  • 之后依次是链接数、所有者、所属组、文件大小、最后修改时间和文件名。
粘滞位的常见用途

粘滞位通常用于公共目录,特别是临时目录,最典型的例子就是 /tmp 目录。/tmp 目录通常是所有用户都可以访问的,用来存放临时文件。如果没有粘滞位的保护,任何有写权限的用户都可以删除其他用户的临时文件,这会导致系统不稳定或文件丢失。而粘滞位确保了用户只能删除自己创建的文件,而不能删除其他人的文件。

📃使用方式

很简单,创建一个共享目录后,借助超级用户的身份,通过 chmod +t [目录] 的方式,为这个共享目录添加粘滞位就行了,粘滞位添加成功后,该共享目录的Other 可执行权限变为 t

如何设置粘滞位

你可以使用 chmod 命令来设置或取消粘滞位。设置粘滞位的命令格式如下:

chmod +t <目录名>

例如,如果你想在 /tmp 目录上设置粘滞位,可以运行:

chmod +t /tmp

如何检查粘滞位

可以通过 ls -ld 命令来查看某个目录是否设置了粘滞位。例如:

ls -ld /tmp

如果该目录设置了粘滞位,你会看到目录权限中有一个 t 字符(而不是 x)出现在执行权限的位置,比如:

drwxrwxrwt 10 root root 4096 Apr 16 10:00 /tmp

上面输出中的 t 就表示 /tmp 目录已设置了粘滞位。

粘滞位的注意事项

  • 粘滞位仅对目录有效,不会影响普通文件。

  • 粘滞位并不是普通的“写”权限,它是对目录中文件删除权限的限制。

  • 粘滞位的设置通常不会影响到超级用户(root)的操作,root 用户始终有权限删除或修改任何文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识 引言 在微服务架构中&#xff0c;分布式事务是一个不可避免的挑战。随着业务复杂度的提升&#xff0c;如何保证跨服务的数据一致性成为了面试中的高频问题。本…

【c语言】——深入理解指针2

文章目录 一、指针数组指针数组模拟二维数组 二、数组指针二维数组传参的本质 三、字符指针变量四、函数指针变量4.1. 函数指针的应用4.2 两端有趣的代码4.3. typedef关键字4.3.1 typedef 的使用4.3.2. typedef与#define对比 五、函数指针数组函数指针数组的应用 一、指针数组 …

python20-while和for in的美

课程&#xff1a;B站大学 记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 分支语句那些事儿 循环的类型循环的作用循环的构成要素while 循环while 循环实战循环语句 for…

私人笔记:动手学大模型应用开发llm-universe项目环境创建

项目代码&#xff1a;datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程&#xff0c;在线阅读地址&#xff1a;https://datawhalechina.github.io/llm-universe/ 项目书&#xff1a;动手学大模型应用开发 一、初始化项目 uv init llm-universe-te…

剖析 Rust 与 C++:性能、安全及实践对比

1 性能对比&#xff1a;底层控制与运行时开销 1.1 C 的性能优势 C 给予开发者极高的底层控制能力&#xff0c;允许直接操作内存、使用指针进行精细的资源管理。这使得 C 在对性能要求极高的场景下&#xff0c;如游戏引擎开发、实时系统等&#xff0c;能够发挥出极致的性能。以…

详细讲解一下Java中的Enum

Java 中的 枚举&#xff08;Enum&#xff09; 是一种特殊的类&#xff0c;用于表示一组固定且有限的常量&#xff08;如状态、类型、选项等&#xff09;。它提供类型安全的常量定义&#xff0c;比传统的常量&#xff08;如 public static final&#xff09;更强大和灵活。以下是…

首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析

以下是**首席人工智能官&#xff08;Chief Artificial Intelligence Officer&#xff0c;CAIO&#xff09;**的详细解析&#xff1a; 1. 职责与核心职能 制定AI战略 制定公司AI技术的长期战略&#xff0c;明确AI在业务中的应用场景和优先级&#xff0c;推动AI与核心业务的深度…

LeetCode【剑指offer】系列(位运算篇)

剑指offer15.二进制中1的个数 题目链接 题目&#xff1a;编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 思路一&#xff…

前端路由缓存实现

场景&#xff1a;以一体化为例&#xff1a;目前页面涉及页签和大量菜单路由&#xff0c;用户想要实现页面缓存&#xff0c;即列表页、详情页甚至是编辑弹框页都要实现数据缓存。 方案&#xff1a;使用router-view的keep-alive实现 。 一、实现思路 1.需求梳理 需要缓存模块&…

Buildroot编译过程中下载源码失败

RK3588编译编译一下recovery&#xff0c;需要把buildroot源码编译一遍。遇到好几个文件都下载失败&#xff0c;如下所示 pm-utils 1.4.1这个包下载失败&#xff0c;下载地址http://pm-utils.freedesktop.org/releases 解决办法&#xff0c;换个网络用windows浏览器下载后&…

Operator 开发入门系列(一):Hello World

背景 我们公司最近计划将产品迁移到 Kubernetes 环境。 为了更好地管理和自动化我们的应用程序&#xff0c;我们决定使用 Kubernetes Operator。 本系列博客将记录我们学习和开发 Operator 的过程&#xff0c;希望能帮助更多的人入门 Operator 开发。 目标读者 对 Kubernete…

Java基础知识面试题(已整理Java面试宝典pdf版)

什么是Java Java是一门面向对象编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论…

科学视角下的打坐:身心获益的实证探究

在快节奏的现代生活中&#xff0c;人们在追求物质丰富的同时&#xff0c;也愈发关注身心的健康与平衡。古老的打坐修行方式&#xff0c;正逐渐走进科学研究的视野&#xff0c;并以大量实证数据展现出对人体多方面的积极影响。​ 什么是打坐&#xff1a; 打坐是一种养生健身法…

javaSE————网络编程套接字

网络编程套接字~~~~~ 好久没更新啦&#xff0c;蓝桥杯爆掉了&#xff0c;从今天开始爆更嗷&#xff1b; 1&#xff0c;网络编程基础 为啥要有网络编程呢&#xff0c;我们进行网络通信就是为了获取丰富的网络资源&#xff0c;说实话真的很神奇&#xff0c;想想我们躺在床上&a…

MySQL性能调优(三):MySQL中的系统库(mysql系统库)

文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 MySQL中的系统库1.5.Mysql中mysql系统库1.5.1.权限系统表1.5.2.统计信息表1.5.2.1.innodb_table_stats1.5.2.2.innodb_index_stats 1.5.3.日志记录表1.5.3.1. general_log1.5.3.2. slow_log 1.5.4.InnoDB中的…

多个路由器互通(静态路由)无单臂路由(简单版)

多个路由器互通&#xff08;静态路由&#xff09;无单臂路由&#xff08;简单版&#xff09; 开启端口并配ip地址 维护1 Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shutdown Router(config-if)#ip address 192.168.10.254 255.255.255.0 Ro…

关于 AI驱动的智慧家居、智慧城市、智慧交通、智慧医疗和智慧生活 的详细解析,涵盖其定义、核心技术、应用场景、典型案例及未来趋势

以下是关于 AI驱动的智慧家居、智慧城市、智慧交通、智慧医疗和智慧生活 的详细解析&#xff0c;涵盖其定义、核心技术、应用场景、典型案例及未来趋势&#xff1a; 一、AI智慧家居 1. 定义与核心功能 定义&#xff1a;通过AI与物联网&#xff08;IoT&#xff09;技术&#…

【ESP32|音频】一文读懂WAV音频文件格式【详解】

简介 最近在学习I2S音频相关内容&#xff0c;无可避免会涉及到关于音频格式的内容&#xff0c;所以刚开始接触的时候有点一头雾水&#xff0c;后面了解了下WAV相关内容&#xff0c;大致能够看懂wav音频格式是怎么样的了。本文主要为后面ESP32 I2S音频系列文章做铺垫&#xff0…

端侧大模型综述On-Device Language Models: A Comprehensive Review

此为机器翻译&#xff0c;仅做个人学习使用 设备端语言模型&#xff1a;全面回顾 DOI&#xff1a;10.48550/arXiv.2409.00088 1 摘要 大型语言模型 &#xff08;LLM&#xff09; 的出现彻底改变了自然语言处理应用程序&#xff0c;由于减少延迟、数据本地化和个性化用户体验…

推流265视频,网页如何支持显示265的webrtc

科技发展真快&#xff0c;以前在网页上&#xff08;一般指谷歌浏览器&#xff09;&#xff0c;要显示265的视频流&#xff0c;都是很鸡肋的办法&#xff0c;要么转码&#xff0c;要么用很慢的hls&#xff0c;体验非常不好&#xff0c;而今谷歌官方最新的浏览器已经支持265的web…