【Linux】权限理解(粘滞位设置)

news2024/12/30 3:27:18

目  录

  • 1 权限的概念
  • 2 权限管理
    • 2.1 文件类型及其访问权限
    • 2.2 文件权限值的表示方法
    • 2.3 文件访问权限设置
    • 2.4 目录权限(粘滞位)


1 权限的概念

所谓权限,实际上是对人的约束,在Linux中,是对普通用户的约束。一件事情,能否被实现,被谁实现,这当中就存在着权限问题。如果你是一个超级用户,那你或许可以不受权限的约束,但值得注意的是,访问的对象可能天然没有某种属性(权限),那即使是超级用户,也无法实现天然不存在的权限,就好比我们无法用水点火一样,因为水本身就没有点火的权限。
可以认为:权限 = 人 + 事物属性

在Linux下有两种用户:超级用户(root)、普通用户

① 超级用户可以Linux系统下做任何事情,不受限制。如图所示,我们可以通过命令:whoami查看当前用户,可以看到超级用户的命令提示符是 “#” 。
超级用户
② 普通用户在Linux系统下受到权限的约束,只能做有对应权限的事情。如图所示,可以看到普通用户的命令提示符是 “$” 。
普通用户

这里我们可以通过命令:su 来进行用户切换
如图所示:如果要从root用户切换到普通用户user,则使用su user(用户名);要从普通用户切换到root用户则使用su root(root可以省略),此时系统会提示输入root用户的口令,注意:Linux下输入密码时不会回显。
用户切换


2 权限管理

在前面的介绍说到,我们可以认为:权限 = 人 + 事物属性。那么在Linux下我们可以将人分为以下几类:

  1. 文件和文件目录的所有者:u — User
  2. 文件和文件目录的所有者所在的组的用户:g — Group
  3. 其他用户(不是前两类用户的都被归为其他用户):o — Others

2.1 文件类型及其访问权限

如图所示,我们可以通过命令:ls -l 来查看当前目录下的文件和目录,所展现出来的每行信息即可以称为文件属性,其中记录了文件类型,不同用户对文件的访问权限,文件大小(以字节为单位),文件最近修改时间,文件名等相关信息。可以看到,如下两个文件的所有者都是root,而因为root所在的用户组也只有root一个用户,因此,文件所有者所在的用户组也是root。

文件属性

文件属性

在Linux下,用文件属性中第一个字符来区分文件类型。文件类型主要有以下几种:

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

其中最常见的还是文件夹普通文件两种类型的文件。

可以看到,在第一个字符后还有 9 个字符,其中每三位一组用来表示一类用户对该文件(目录)的访问权限,前三位表示的是文件所有者对该文件的访问权限;中间三位表示的是该文件所有者所在的组中的用户对该文件的访问权限;最后三位表示其他用户对该文件的访问权限。那每三位一组的字符又表示了用户对该文件的什么权限呢?如下:文件的基本权限分类:

r(读):Read对于文件而言,具有读取文件内容的权限;对于目录而言,具有浏览该目录信息的权限。
w(写):Write对于文件而言,具有修改文件内容的权限;对于目录而言,具有删除移动目录内文件的权限。
x(执行):Execute对于文件而言,具有执行文件的权限;对于目录而言,具有进入目录的权限
-:表示不具有该项权限。

以下举例说明普通用户对文件的权限:

如下图所示,在Linux中某目录 day02 下有 test.c 文件,我们通过命令 ls -l 显示出文件的属性信息,属性行中第一个字符为 - ,即表示这是一个普通文件,其后的前三位 rw- ,表示该文件所有者对文件的权限是可读、可写、不可执行(需要说明的是:因为这里的文件所有者本身就是root,而root是不受权限约束的,如果这里文件所有者只是普通用户,则其对该文件只有可读可写权限);中间三位 r-- 表示该文件所有者所在组中的用户对该文件的权限是可读、不可写、不可执行;后三位 r-- 表示其他用户对该文件的权限为可读、不可写、不可执行。通过 whoami 命令我们可以看到当前用户是名为 jml 的普通用户,相对于 test.c 文件而言属于其他用户,也就是说用户 jml 对该文件只可读。则以下测试权限:输入命令:cat test.c 输出文件内容,即为读文件,所示文件读取成功;输入命令:echo “//这是一段注释” >> test.c,试图将字符串"//这是一段注释"写入文件中,可以发现,得到了 Permission denied 的回复,被拒绝了访问,即验证了文件对用户 jml 不可写;接着输入命令:./test.c 试图执行文件,同样得到了 Permission denied 的回复,即验证了文件对用户 jml 不可执行。

权限示例

2.2 文件权限值的表示方法

上述我们看到的用 r/w/x 这三种字符来表示权限的方法是文件权限值的 字符表示方法 ,通常我们通过命令获取到的文件的属性中的权限即是采用这种方法表示出来的。除此之外,我们还可以用 八进制数值表示方法 来表示文件的权限,一位八进制数代表一类用户对文件的权限,而一位八进制数又可以用三位二进制位表示:如八进制数 6 ,用三位二进制可以表示为 110,其中:二进制位为 1 表示具有该种权限,为 0 则表示不具有该权限,对应的二进制数 110 则表示对应用户对该文件可读、可写、不可执行。

(1)字符表示方法

Linux表示说明
r – –只读
– w –仅可写
– – x仅可执行
r w –可读可写
– w x可写可执行
r – x可读可执行
r w x可读可写可执行
– – –无权限

(2)八进制数值表示方法

权限符号(读写执行)八进制二进制
r – –4100
– w –2010
– – x1001
r w –6110
– w x3011
r – x5101
r w x7111
– – –0000

2.3 文件访问权限设置

文件的访问权限是否可以修改呢?答案是肯定,在Linux中,我们可以通过相关的命令来设置文件的访问权限,但需要说明的是:只有文件的所有者和root才能修改文件的权限

(1)chmod

功能: 设置文件的访问权限
格式: chmod [参数选项] 权限 文件名
常用选项: R -> 递归修改目录文件的权限
chmod命令权限值的格式: (其中权限代号既可以用字符表示法,也可以用八进制数值表示法)

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
  • 用户符号: u(拥有者)、g(拥有者同组用户)、o(其他用户)、a(所有用户)

示例:

文件访问权限设置
其中需要注意:当使用八进制数值表示的权限代号来设置文件访问权限时,不需要有用户符号和+/-/=符号,只需要按照数值对所有用户对该文件的权限进行整体设置。如果数值表示只写了如:4,则其表示的实际是:004 。

(2)chown

功能: 修改文件的拥有者
格式: chown [参数] 用户名 文件名

需要说明的是:要执行chown命令需要有root超级用户的权限,普通用户(即使是这个文件本来的拥有者)是没办法修改文件的拥有者的。因此,要修改文件的拥有者,要么将当前身份切换为当前用户,要么使用sudo命令为当前用户进行提权,格式为:sudo chown [参数] 用户名 文件名 ,但同时,要想使用sudo命令,前提是当前用户在系统的信任列表中。

示例:

文件拥有者修改

(3)chgrp

功能: 修改文件或目录所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: R -> 递归修改文件或目录的所属组

同样,需要root超级用户的权限才能修改文件或目录的所属组。

示例:

文件所属组修改

(4)file

功能: 辨识文件类型
格式: file [选项] 文件或目录
常用选项:

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

示例:
查看文件具体类型

(5)umask

功能: 查看或修改文件掩码
格式: umask 权限值
说明: 新建文件的起始权限为:0666;新建目录的起始权限为:0777,但实际上当我们查看我们创建的目录和文件的属性时,看到的权限往往不是上述的值。原因就在于创建文件和目录时还要受到 umask 的影响。假设起始权限是 mask ,则实际创建出来的文件的权限是:mask & (~umask) 。将文件现有的存取权限减去权限掩码后,即可产生建立文件时的预设权限。超级用户默认掩码值为:0022;普通用户默认掩码值为:0002。

示例:

权限掩码

每创建一个文件或目录,我们都可以通过 ls -l 命令来查看其相关属性。如图所示,我们创建一个新文件 file02.txt ,其默认权限为:664,那么这个权限值 664 又是怎么来的呢?这就关乎权限掩码值,通过umask命令我们查看到,作为普通用户,当前用户的默认掩码值为:0002。而新建文件的起始权限为:0666。则:

0666的二进制表示为:000 110 110 110
0002的二进制表示为:000 000 000 010
将掩码值0002按位取反有(~0002):111 111 111 101
又将0666 & (~0002)有:000 110 110 110 & 111 111 111 101 = 000 110 110 100 = 664 (最终权限值)

那么当我们通过 umask 命令将掩码值修改为 0022 ,此时再新建文件file03.txt,发现文件的默认权限值变为了 644,其相关计算如下:

起始权限0666的二进制表示为:000 110 110 110
掩码值0022的二进制表示为:000 000 010 010
将掩码值按位取反有(~0022):111 111 101 101
0666 & (~0022)有:000 110 110 110 & 111 111 101 101 = 000 110 100 100 = 644 (最终权限值)

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

2.4 目录权限(粘滞位)

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

示例:

目录权限
在使用Linux的时候,通常会存在一些共享目录(由root提供),被所有普通用户所共享(即所有普通用户对该共享目录均有可读可写可执行权限),用来保存普通用户产生的一些临时数据。也就是说,所有普通用户均可在共享目录中新建文件,那同时又产生了一个问题:虽然共享目录中的文件受到权限约束,对于文件而言的其他普通用户可能无法修改文件内容,对文件进行写操作等,但由于文件处在共享目录中,虽然普通用户受到约束无法修改文件内容,但由于其还具有对共享目录的可写权限,因此,可以删除共享目录中的任意文件,即使不是该文件的所有者。 那该如何避免这种情况的发生呢?或许有人会说,那删除其他普通用户对目录的可写权限不就好了?没错,这样确实可以避免其他用户删除目录中的别的所有者的文件,但同时由于失去了可写权限,用户也无法在目录中新建文件了,这就失去了共享目录本来的意义,这个目录也就不能算是一个共享目录了。

为了合理解决上述问题,Linux引入了粘滞位的概念。

粘滞位:

通过命令 chmod (用户符号)+t 目录 即称为为目录设置粘滞位。粘滞位是针对目录而言的概念,通常需要为共享目录设置粘滞位。通过为目录设置粘滞位,可以在保证目录共享的同时防止其他用户删除共享目录中非所有者的文件。
当一个目录被设置粘滞位后,则该目录下的文件只能由:

  1. 超级管理员(root)删除
  2. 该目录的所有者删除
  3. 该文件的所有者删除

示例:

粘滞位


总结:

  1. 目录的可执行权限表示的是用户可否在目录下执行命令。
  2. 如果用户没有对目录的 x (可执行)权限,则无法对目录执行任何命令,甚至无法通过 cd 命令进入目录,即使用户对目录仍然有 r (可读)权限。
  3. 如果用户对目录具有 x (可执行)权限,则用户可以执行命令,通过 cd 进入目录,但由于没有对目录的可读(r)权限,所以在目录下,即使可以执行 ls 命令,但仍然没有权限读出目录下的文件。

以上是我对Linux中基本权限的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!

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

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

相关文章

蓝桥杯嵌入式之 Keil 仿真与调试

这篇文章为大家讲解 蓝桥杯嵌入式的 Keil 仿真与调试 , 这在比赛和今后的工作中都是常用的。大家看完后一定会对此有一个深刻的认识。 文章目录前言一、调试器的准备工作:1.在 Keil uVision集成开发环境下,选择CMSIS-DAP Debugger调试器。2.在…

final关键字深入解析

final关键字特性 final关键字在java中使用非常广泛,可以申明成员变量、方法、类、本地变量。一旦将引用声明为final,将无法再改变这个引用。final关键字还能保证内存同步,本博客将会从final关键字的特性到从java内存层面保证同步讲解。这个内…

SpringBoot项目从18.18M瘦身到0.18M

一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开…

GAMES101作业6及课程总结(重点解决SAH扩展作业)

这次作业相对于作业5会麻烦一点点,而且框架相较于作业五的也麻烦了一点,当然作业的难点其实主要还是在扩展作业SAH那块。 目录课程总结与理解(光线追踪)框架梳理作业一:光线生成作业二:光线-三角形相交作业…

Neo4j图数据库 批量写入与查询

1 前言 1-1 简介 工作中需要对所有的实体数据进行存储构建实体知识图谱,为基于知识图谱的问答提供数据基础。选择使用Neo4j作为数据库进行存储。以下是关于Neo4j的简介。 1-2 任务背景 将处理好的实体数据(共计1100万)写入图数据库中,并且提供查询接口…

量子计算(二十):量子算法简介

文章目录 量子算法简介 一、概述 二、量子经典混合算法 量子算法简介 一、概述 量子算法是在现实的量子计算模型上运行的算法,最常用的模型是计算的量子电路模型。经典(或非量子)算法是一种有限的指令序列,或一步地解决问题的…

乐视--996、内卷、裁员环境下一朵“奇葩”

在2022.12.28日我们发表了一篇“为什么四天工作制才是企业良药,而非裁员”,大家认为四天工作制与我们的距离就像实现“一个小目标”一样,不太可能。这不他来了,乐视来了,他真的来了,“鸡毛真的上天了”。他来了他来了他…

SQL技巧:使用AVG()函数计算占比

计算方式对比 一般计算占比,比如转换率、留存率等,都是先分组求和再相除得到结果,但是在一定的条件下,可以直接使用AVG()求出百分比。 比如,要求统计报名转化率,报名转化率公式为转化率报名人数/浏览人数…

内核解读之内存管理(8)内存模型

文章目录基本的术语CONFIG_FLATMEM(平坦内存模型)稀疏的内存模型基本的术语 在介绍内存模型之前需要了解一些基本的知识。 1、什么是page frame? 在linux操作系统中,物理内存被分成一页页的page frame来管理,具体pa…

c++11 标准模板(STL)(std::deque)(八)

定义于头文件 <deque> std::deque 修改器 擦除元素 std::deque<T,Allocator>::erase iterator erase( iterator pos ); (1)(C11 前) iterator erase( const_iterator pos ); (C11 起) iterator erase( iterator first, iterator last ); (2)(C11 前) iterator …

即时编译助力人大金仓KES分析能力飞跃

随着数字化技术对各行各业的不断渗透&#xff0c;人大金仓在金融、能源、电信等行业逐步进入深水区&#xff0c;面临越来越多的核心类系统改造升级&#xff0c;这些系统不仅需要满足在线交易系统运行的高实时性要求&#xff0c;还需要保证高效分析能力以帮助客户进行业务决策。…

红米pro14笔记本系统故障怎么U盘重装系统?

红米pro14笔记本系统故障怎么U盘重装系统&#xff1f;今天和大家一起来分享如何使用U盘重装系统的方法分享。有用户的红米pro14笔记本系统出现了一些问题需要进行重新安装&#xff0c;那么今天我们就一起来分享看看怎么U盘重装系统的方法吧。 准备工作&#xff1a; 1、U盘一个&…

Java执行Linux命令死锁阻塞挂起,Runtime.getRuntime().exec阻塞卡死问题解决

1、前言&#xff1a; 最近在做一个需求需要调用linux下的ffmpeg来对处理视频&#xff0c;很简单的需求&#xff0c;我像往常一样写下如下的代码片段&#xff1a; Process process Runtime.getRuntime().exec(cmd); process.waitFor(); But当我运行代码时&#xff0c;发现代码执…

前端笔记 ---- document.execCommand 函数整理

1. 语法 使用语法 bool document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)返回值 一个 Boolean &#xff0c;如果是 false 则表示操作不被支持或未被启用。 备注&#xff1a; 在调用一个命令前&#xff0c;不要尝试使用返回值去校验浏览器的兼容性 2. 参…

基于Vue和SpringBoot的宾馆管理系统的设计和实现

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

树形结构——红黑树

前言 在 JDK1.8 之后&#xff0c;HashMap 的底层是由数组、链表、红黑树来实现的&#xff0c;当数组长度到 64 的时候&#xff0c;或者链表长度到 8 的时候&#xff0c;会调用 treeifyBin 转换为红黑树实现。因为红黑树是小伙伴们面试的时候经常被考到的知识点&#xff0c;因此…

OSPF-MGRE实验

1.首先配ip [r6]int g 0/0/1 [r6-GigabitEthernet0/0/1]ip add 192.168.1.2 24 [r6-GigabitEthernet0/0/1]int g 0/0/0 [r6-GigabitEthernet0/0/0]ip add 192.168.2.2 24 [r6-GigabitEthernet0/0/0]int g 0/0/2 [r6-GigabitEthernet0/0/2]ip add 192.168.3.2 24 [r6-GigabitEt…

git pull 和git fetch

1.git fetch 用户一&#xff1a;本地初始化项目&#xff0c;创建文件&#xff0c;保存本地仓库&#xff0c;提交远程仓库 $ git init $ touch file.txt $ git add . $ git commit -m "创建了file.txt文件" [master (root-commit) 4dcee36] 创建了file.txt文件1 file …

简单又好用的财务分析工具有哪些?

什么样的财务分析工具才能算是简单又好用&#xff1f;是能够快速完成组合多变的财务指标运算分析&#xff1b;能够充分发挥企业经营健康晴雨表作用&#xff0c;反映企业财务健康状态&#xff1b;还是能够支持多维度动态分析、自助分析&#xff1b;或者是轻松合并账套&#xff0…

跨域与JSONP

1、同源策略 1.1、什么是同源 如果两个页面的协议&#xff0c;域名和端口都相同&#xff0c;则两个页面具有相同的源。 例如&#xff0c;下表给出了相对于 http://www.test.com/index.html 页面的同源检测&#xff1a; URL 是否同源 原因 http://www.test.com/other.html…