【Linux权限管理】文件:毁灭我与我无关

一.预备知识

1.LInux用户分类

一台Linux机器的用户分为两类:

超级用户和普通用户

注意我这里说的用户的并不是一个固定的人,例如你本身就有root账号,但你也可以使用自己创建普通账号。当你使用root账号时,你就是一个超级用户,当你使用普通账号时,你就是一个普通用户。更简单地说,这里的用户对应的是正在使用的账号。

root账号无所不能,不受权限约束,而普通账号则受权限约束。具体怎么一回事下面再说。

2.切换用户的指令

当你想切换到不同用户时,可以使用su指令,后面加上想要切换成哪个用户,如果不加,默认是root用户

从普通用户切换到超级用户:

su

接下来会提示你输入密码,这里输入的是root账号的密码。

从超级用户切换到普通用户:

su zhangsan

假设你添加了zhangsan这个用户,就可以使用本条指令切换用户,root用户可以任意切换身份,不需要输入密码

从普通用户切换到普通用户

su lisi

假设你现在登录的是张三的账号,你想要切换成李四,就可以使用上述的命令,前提是你要知道李四的密码

su -

你也可以使用这条指令切换账号,他和su的效果基本一样,只不过su只是单纯地账号切换,而su -是重新登录账号,最终的效果就是前者仍然在以前的目录,而后者会回到切换账号的家目录

二.权限的理解

怎么理解权限?权限就是能不能做某件事,它是一个是否的问题,所以权限必然包含两个要素,谁能不能做事?(who)   做什么事?(what)

Linux系统当中,“一切皆文件”,故我们操作一台机器,实际上就是访问机器当中的各种各样的文件。所以我们说,“权限是伴生文件的”,某个具体的文件(这里是广义的文件,包括目录等),权限就是约束用户对文件能做哪些事情。

三.文件访问者的分类

根据和某个文件的关系,所有用户可以被分为三类:

  1. 拥有者 u--User
  2. 所属组 g-Group
  3. 其它人 o-Others

拥有者默认就是创建这个文件的人

所属组是专门为这个文件划的一个群体,里面可以有一个或多个用户,并且有一个组长,最初默认只有文件的创建者一个人,并且担任组长、

这里可能会有一个疑问,不是说用户分为超级用户和普通用户吗?这里不是和上面冲突了吗?

超级用户和普通用户是某个具体的人,而拥有者,所属组和other是某种角色,二者是相互补充,互相成就的关系。

例如,张三是一名学生,想去教职工食堂吃饭但是被拦住了。于是张三奋发图强,大学毕业后当上了老师,可以正大光明地去教职工食堂了。张三能去教职工食堂吃饭,是因为他是张三吗?不是,是因为他是老师。张三从学生这个角色向老师转变,但他的姓名,身份证号没有改变,从他出生起,他就叫张三。所以我们说张三这个人的角色先是学生,后是老师。

四.文件类型和访问权限

我们可以使用ls -l 指令来查看当前目录下所有文件的属性,一个文件的属性如下

1.文件类型

d:文件夹

-:普通文件

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

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

文件类型很多,我们只需记住普通文件和文件夹的表示符号就可以了。

2.基本权限

你能对一个文件做什么呢?无非就是读,写,执行,所以基本权限也就是这三种

i.读:Read对文件而言,具有读取文件内容的权限;对目录来说,具有查看该目录下文件信息的权限

ii.写:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

iii.执行:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

iv.“—”表示不具有该项权限

针对helloworld这个文件,它的文件类型是- ,即普通文件,拥有者的权限是rw- ,(可读可写不可执行)所属组的权限是r-- (可读不可写不可执行), 其它人的权限是r--(可读不可写不可执行)。

顺便提一下,Window中一个文件能否被执行要看它的文件名后缀,例如exe就是可执行文件。而在Linux中一个文件能否被执行取决于你有没有x权限,与后缀名无关。

注意我的用词,Linux系统本身不按照文件后缀来区分文件类型,不代表上面的软件不认后缀哟。例如用gcc编译一个txt文件就不行。

现在正式提出问题:dir这个文件的权限是什么?

答:对于helloworld这个文件,拥有者具有rwx权限,所属组具有rwx权限,others具有rx权限,没有w权限

前文说过,要描述一个文件权限需要包含两个要素,who?拥有者,所属组和others。what?r、w、x

五.文件访问权限的相关设置方法

1.chmod

功能:设置文件的访问权限

chmod u+x test.txt

给test.txt文件的拥有者加上x权限

chmod u-x,o+w test.txt

给test.txt文件的拥有者取消x权限,others加上w权限 

chmod a-w test.txt 

给test.txt的拥有者,所属组和其他人都取消w权限 

注意:只有文件的拥有者和root才能改文件的权限。

root虽然是others,但它是不受权限约束的。即使是文件的拥有者也是受到权限约束的,也就是说,当拥有者把自身的w权限取消时,也不能向文件中写入内容,但这样做是没有意义的,因为自己能把权限改回来。

还有一个问题,虽然我是拥有者,w权限被取消了,但我同时还是所属组的组长啊,假设所属组是有w权限的,那我能否向文件中写入内容呢?也不能。因为一个用户在匹配角色的时候,只会匹配一次,先判断你是不是拥有者,如果是就不再匹配了。

2.chown

功能:改变文件的拥有者

chown zhangsan test.txt

将test.txt的拥有者改为zhangsan

注意:只有root才能更改文件的拥有者

3.chgrp

功能:改变所属组的组长

chgrp zhangsan test.txt

注意:只有root才能更改文件的所属组组长

六.文件权限的八进制表示方案 

前面我们知道,要表示一个文件的权限,需要9个位,每三个为一组,分别表示拥有者,所属组和others的权限,每一位只有两种情况,要么是-,要么是对应的字母(r,w,x)。故我们也可以采用9个二进制位来表示权限,0表示没有对应权限,1表示有。然后将二进制转换为八进制,为什么是八进制呢?因为三个二进制为一组,故采用这种八进制方案。

例如

拥有者:rw-     110      6

所属组:rw-     110      6

其它人:r--      100      4

文件权限用八进制方案表示:664

故我们也可以这样使用chmod指令

chmod  664  test.txt

七.文件的默认权限

 

 这是新创建的三个目录和普通文件 ,权限没有经过任何修改,可以发现目录的默认权限是775,普通文件的默认权限是664。

要弄清楚背后的逻辑,需要知道三个点

1.目录的起始权限是777,普通文件的起始权限是666

那为什么目录的的权限不是777呢?别着急,往下看

2.Linux系统中存在权限掩码

什么是权限掩码呢?我们可以用以下指令来查看

umask

默认的权限掩码是0002,我们还可以自己设置掩码

umask 0000

 

将掩码更改后我们再创建目录和文件

 结果发现目录的默认权限变成了777,普通文件变成了666,默认权限变了!!!所以我们可以大胆猜测,文件的默认权限受到起始权限和权限掩码影响 。那么具体是如何影响的呢

3.默认权限 = 起始权限 去掉 权限掩码中出现的权限

例如0002这个权限掩码,第一个0是八进制的前缀,所以这是一个八进制数002,转换为二进制就是000 000 010,故others的w权限最终会在起始权限中去掉。而目录的起始权限是111 111 111,经过掩码作用就是111 111 101,即八进制的775。

归纳为一个表达式就是最终权限 = 起始权限 & (~umask)当然既然有位运算,那么肯定要先将八进制转换为二进制。

八.目录权限的特殊说明

1.进入一个目录需要什么权限?

答:需要该目录的x权限

2.目录的r权限是什么?

答:查看当前目录的文件列表(ls指令)

3.没有目录的x权限,但是有r权限,能拥ls指令查看文件列表吗?

答:不能,没有x权限则无法对目录执行任何命令,甚至无法进入

4.在一个目录下创建文件需要什么权限?

答:需要该目录的w权限

5.一个文件的属性能否被查看由什么决定?

答:由文件所属目录的权限决定!!!

 6.一个文件能否被删除本身能决定吗?由谁决定?

答:不能,由文件所属目录与对应账户是否有w权限

辨析上面几个问题后,我们就能理解为什么要把目录的起始权限设为rwx了,你既然创建了一个目录,肯定要能进入吧,要能创建文件吧,还要能查看文件列表吧,不然你创建它干什么呢?

但同时有一点令人匪夷所思,我们发现删掉一个文件与该文件无关。假如你创建一个文件,把others的所有权限都取消了,正当你以为高枕无忧时,却发现文件被删除了,因为你忘记更改了目录的权限。所以为了防止这种文件被others随意更改的情况,默认的掩码就是0002,无论是目录还是普通文件,都把others的w权限去掉。

还有一个小细节,每个用户的家目录都只对自己开放了权限,其它用户是无法访问的

所以,一般而言,不同的账号是不会在同一目录下的,上面那种others删除文件的情况几乎不会发生 

九.粘滞位

1.粘滞位应用场景

上面说的是一般情况,但总会有特殊场景。

张三和李四现在想要合作开发,共享文件,但是文件放在哪里呢?张三的家目录李四进不去,李四的家目录张三进不去。这时root说,我在根目录下创建了一个目录dir,你们都把文件放在里面吧。于是张三和李四都在dir目录下进行开发,也能互相查看对方的文件。

突然有一天,张三不想让李四看到自己写的内容,于是他把自己文件others的所有权限给关闭了,但是又害怕李四生气把文件给删了,所以张三找到root,让他把李四对dir目录的w权限取消,root答应了。

第二天,李四来找root,你把我的w权限关了,我还怎么新建文件啊!root这下犯了难,不知道该怎么办。

上面问题的根源在于文件能否被删除不由文件本身的权限决定,“毁灭你与你无关”。你取消别人权限可以保证信息不回泄露,但别人不高兴了可以随时删你,但更改目录权限又会引发别的问题,这样显然不合理。

针对这种共享场景下的问题,LInux新增了一个权限,叫做粘滞位

2.粘滞位的使用方法

共享文件时,大家可以不给对方设置权限,但是可以互删文件,这是有bug的。给共享目录添加了粘滞位后,该目录下的文件只能由以下的人删除:

  1. 超级管理员
  2. 文件拥有者
  3. 目录拥有者

 chmod +t dir

给dir目录添加粘滞位 

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

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

相关文章

二叉查找树(binary search tree)(难度7)

C数据结构与算法实现(目录) 答案在此:二叉查找树(binary search tree)(答案) 写在前面 部分内容参《算法导论》 基本接口实现 1 删除 删除值为value的第一个节点 删除叶子节点1 删除叶子节…

android framework之Applicataion启动流程分析(四)

本文主要学习并了解Application的Activity启动流程。 这边先分析一下Launcher是如何启动进程的Acitivity流程。从Launcher启动Acitivity的时候,它是把启动任务丢给instrumentation模块去协助完成,由它进一步调用AMS的startActivity()方法 去启动&#xf…

怎么处理zk或redis脑裂

很极端场景会出现脑裂 什么是分布式的脑裂 怎么理解zk脑裂 就是ZK,与客户端可能因为网络原因,客户端A还在跑着后续程序,而zk与客户端之前的心跳断了,此zk就把这节点给删除了,这时另一个客户会加锁成功,就样…

荣耀9x使用体验

第一次使用鸿蒙系统,感觉还行,虽然各种操作和手势不太习惯,但是不影响什么,这是已经发布了4年的手机,用起来没什么毛病,各方面比较均衡。 2年前买的,原价1500块,现在(20…

Unity 之利用Audio Source(音频源)组件用于播放声音

文章目录 Unity中的Audio Source(音频源)是一个用于播放声音的组件,通常附加到游戏对象上,以便在游戏中播放音频效果、音乐或对话。以下是Audio Source的详细介绍: 添加Audio Source: 要在Unity中使用Audio…

SAM论文翻译

文章目录 Abstract1、Introduction2、Related Work3、Methodology3.1、Semantic Graph3.2、Semantic Aware Module3.3、Decoder3.4、Loss Function 4、Experiments4.1、Datasets4.2、Implementation Details4.3、Evaluation Protocol4.4、Comparison with State-of-the-Art 论文…

STM32WB55开发(1)----套件概述

STM32WB55开发----1.套件概述 所用器件视频教学样品申请优势支持协议系统控制和生态系统访问功能示意图系统框图跳线设置开发板原理图 所用器件 所使用的器件是我们自行设计的开发板,该开发板是基于 STM32WB55 系列微控制器所构建。STM32WBXX_VFQFPN68 不仅是一款评…

Win10右键 nvidia rtx desktop manager 怎么删除(最新)

在更新了最新的 nvidia后原来的隐藏鼠标右键菜单后不行了,新方法如下: 步骤一:在键盘“WINR”键同时操作下,启动运行框,在框内输入“regedit”,打开深度系统win7 的注册表编辑器。 步骤二:为防…

maven配置nexus私服详解

maven配置nexus私服详解 简介:配置步骤1、本地maven settings.xml配置1.1配置本地仓库位置1.2 server配置1.3 镜像配置1.4 私服仓库配置 2、maven项目pom.xml配置 完整配置模板 简介: 前提是已经搭建好了私服,我们需要在本地maven中配置相关…

半导体厂务液体泄漏问题的挑战与解决方案

在半导体制造领域,液体泄漏是一项极具挑战性的问题。半导体工厂内有着大量的化学品、工艺液体和废水系统,这些液体在制造过程中扮演着至关重要的角色。然而,液体泄漏可能会导致严重的生产中断、环境污染和安全风险。本文将探讨半导体厂务中的…

Qt 5.15编译(MinGW)及集成Crypto++ 8.7.0笔记

一、背景 为使用AES加密库(AES/CBC加解密),选用Crypto 库(官网)。   最新Crypto C库依次为:8.8.0版本(2023-6-25)、8.7.0(2022-8-7)和8.6.0(202…

c++ day 2

1、封装一个结构体,结构体中包含一个私有数组,用来存放学生的成绩,包含一个私有变量,用来记录学生个数, 提供一个公有成员函数,void setNum(int num)用于设置学生个数 提供一个公有成员函数:v…

新能源商用车软件开发设计规范

目 录 前 言.............................................................................................................. 1 1 范围............................................................................................................... 2 2 规范性…

【前端demo】CSS border-radius可视化 原生实现

文章目录 效果原理代码 前端demo系列目录:https://blog.csdn.net/karshey/article/details/132585901 效果 效果预览:https://codepen.io/karshey/pen/zYyBPBR 参考: Fancy Border Radius Generator (9elements.github.io) https://borde…

zabbix 自动发现

哈喽大家好,我是咸鱼 昨天老大让我初始化一批服务器,吭哧吭哧弄完之后需要把这批机器添加到 zabbix 上去 但是我发现一台一台添加效率好低,而且特别繁琐,当时我没有想出有什么好的方法,今天上网搜了一下相关资料之后…

本地电脑搭建web服务器、个人博客网站并发布公网访问 【无公网IP】(1)

文章目录 前言1. 安装套件软件2. 创建网页运行环境 指定网页输出的端口号3. 让WordPress在所需环境中安装并运行 生成网页4. “装修”个人网站5. 将位于本地电脑上的网页发布到公共互联网上 前言 在现代社会,网络已经成为我们生活离不开的必需品,而纷繁…

系统学习Linux-ELK日志收集系统

ELK日志收集系统集群实验 实验环境 角色主机名IP接口httpd192.168.31.50ens33node1192.168.31.51ens33noed2192.168.31.53ens33 环境配置 设置各个主机的ip地址为拓扑中的静态ip,并修改主机名 #httpd [rootlocalhost ~]# hostnamectl set-hostname httpd [root…

【opencv】多版本安装

安装opencv3.2.0以及对应的付费模块 一、安装多版本OpenCV如何切换 按照如下步骤安装的OpenCV,在CMakeLists.txt文件中,直接指定opencv的版本就可以找到相应版本的OpenCV,为了验证可以在CMakeLists.txt文件中使用如下指令输出版本验证&…

C#写一个UDP程序判断延迟并运行在Centos上

服务端 using System.Net.Sockets; using System.Net;int serverPort 50001; Socket server; EndPoint client new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号CreateSocket();void CreateSocket() {server new Socket(AddressFamily.InterNetwork, SocketT…

SolVES4.1学习1——安装与使用教程

1、下载并安装 SolVES 4版本是QGIS插件,但实际使用过程中发现在最新版的QGIS安装该插件过程中,会报错或异常。因此需安装特定版本的软件。共需安装如下图软件及Java环境等。 根据官方文档安装好后,可以进行相关操作。 2、设置QGIS环境 QG…