【Linux】目录和文件的权限意义

        现在我们知道了Linux系统内文件的三种身份(拥有者、用户组与其他人),知道每种身份都有三种权限(rwx),也知道能够使用chown、chgrp、chmod修改这些权限与属性,当然,利用IS-l去查看文件也没问题。

        前面也谈到了这些文件权限对于数据安全的重要性。那么,这些文件权限对于一般文件与目录文件有何不同呢?有大大的不同。

1.权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库文件、二进制可执行文件(binary
program)等。

因此,权限对于文件来说,它的意义是这样的:

  • r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
  • w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件);
  • ×(execute):该文件具有可以被系统执行的权限。

那个可读(r)代表读取文件内容是还好了解,那么可执行(x)?

        这里你就必须要小心。因为在Windows下面一个文件是否具有执行的能力是借由扩展名来判断的,例如:exe、.bat、.com等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有【x】这个权限来决定,跟文件名是没有绝对的关系的。

        至于最后一个w这个权限?当你对一个文件具有w权限时,你可以具有写入、编辑、新增、修改文件内容的权限,但并不具备有删除该文件本身的权限。对于文件的rwx来说,主要都是针对文件的内容而言,与文件名的存在与否没有关系,因为文件记录的是实际的数据嘛。

2.权限对目录的重要性

        文件是存放实际数据的所在,那么目录主要是存储什么?

        目录主要的内容在记录文件名列表,文件名与目录有强烈的关联。所以如果是针对目录时,那个r、w、x对目录是什么意义呢?

  • r( read contents in directory)

表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你就可以利用Is这个命令将该目录的内容列表显示出来。

  • w( modify contents of directory )

这个可写入的权限对目录来说,是很了不起的,因为它表示你具有改动该目录结构列表的权限,也就是下面这些权限:

  • 建立新的文件与目录;
  • 删除已经存在的文件与目录(不论该文件的权限是什么);
  • 将已存在的文件或目录进行更名;
  • 移动该目录内的文件、目录位置;

总之,目录的w权限就与该目录下面的文件名的变动有关。

  •  x( access directory)

咦,目录的执行权限有啥用途?目录只是记录文件名而已,总不能拿来执行吧?

        没错,目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途,所谓的工作目录(work directory)就是你目前所在的目录。

        举例来说,当你登录Linux时,你所在的家目录就是你当前的工作目录,而变换目录的命令是【cd】( change directory )。

上面的东西这么说,太枯燥了,有没有清晰一点的说明?好,让我们来思考一下人类社会使用的
东西好了。

现在假设文件是一堆文件盒,所以你可能可以在上面写/改一些数据,而目录是一堆抽屉。因此你可以将文件盒分类放置到不同的抽屉里面,因此抽屉最大的目的是拿出/放入文件盒。现在让我们汇整一下内容:

组件内容替代对象rwx
文件详细数据data文件夹读到文件内容修改文件内容执行文件内容
目录文件名可分类抽屉读到文件名修改文件名进入该目录的权限(key)

根据上述的分析,你可以看到,对一般文件来说,rwx主要是针对文件的内容来设计权限,对录来说,rwx则是针对目录内的文件名列表来设计权限。

其中最有趣的大概就属目录的x权限了,文件名怎么执行?

没道理嘛。其实这个x权限设计,就相当于该目录——也就是该抽屉的“钥匙”,没有钥匙你怎么能够打开抽屉?对吧!

3.举例说明

大致的目录权限概念是这样,下面我们来看几个范例,让你了解一下啥是目录的权限。
有个目录的权限如下所示:

drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh

        系统有个账号名称为vbird,这个账号并没有支持root用户组,请问vbird对这个目录有何权限?是否可切换到此目录中?

        答:vbird在这里属于其他人,对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表,因为vbird不具有x的权限,亦即vbird没有这个抽屉的钥匙,因此vbird并不能切换到此目录内——即不能打开。(相当重要的概念)

        上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限其实那是错的。能不能进入某一个目录,只与该目录的x权限有关。此外,工作目录对于命令的执行是非常重要的,如果你在某目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录的r或w的权限。

        很多朋友在搭建网站的时候都会卡在一些权限的设置上,它们开放目录数据给因特网的任何人来浏览,却只开放r的权限,如上面的范例所示那样,那样的结果就是导致网站服务器软件无法到该目录下读取文件(最多只能看到文件名),最终用户总是无法正确地查看到文件的内容(显示权限不足)。

        要注意:要开放目录给任何人浏览时,应该至少也要给予r及×的权限,但w权限不可随便给,为什么w不能随便给,我们来看下一个例子。

        假设有个账号名称为dmtsai,它的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。若在此目录下有个名为the_root.data的文件,该文件的权限如下:

-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data

请问dmtsai对此文件的权限是什么?可否删除此文件?

       答:如上所示,由于dmtsai 对此文件来说是others的身份,因此这个文件它无法读、无法编辑也无法执行,也就是说,它无法变动这个文件的内容。

        但是由于这个文件在它的家目录下,它在此目录下具有rwx的完整权限,因此对于the_root.data这个文件名来说,它是能够删除的。结论就是,dmtsai 这个用户能够删除the_root.data这个文件。

上述的例子解释是这样的,

        假设有个莫名其妙的人,拿着一个完全密封的文件盒放到你的办公室抽屉中,因为完全密封你也打不开、看不到这个文件盒的内部数据(对文件来说,你没有权限)。

        但是因为这个文件盒是放在你的抽屉中,你当然可以在这个抽屉中拿出/放入任何数据(对目录来说,你具有所有权限)。

        所以,情况就是:你打开抽屉、拿出这个没办法看到的文件盒、将它丢到走廊上的垃圾桶,搞定了(顺利删除)。

        还是看不太懂?没关系,我们下面就来设计一个练习,让你实际玩玩看,应该就能够比较明白了。不过,由于很多命令我们还没有教,所以下面的命令有的先了解即可,详细的命令用法我们会在后面继续介绍。

  • 先用root的身份建立所需要的文件与目录环境

我们用root的身份在所有人都可以工作的/tmp目录中建立一个名为testing的目录,该目录的权限为744且目录拥有者为root。另外,在testing目录下在建立一个空文件,文件名亦为testing。

仔细看一下,目录的权限是744,且所属用户组与使用者均是 root。

那么在这样的情況下面,一般身份使用者对这个目录/文件的权限是什么?

  • 一般用户的读写权限是什么?观察中

在上面的例子中,虽然目录是744的权限设置,一般用户应该能有r的权限,但这样的权限用户能做啥事?

由于我的系统中含有一个名为bcq_113的账户,请再开另外一个终端,使用bcq_113登录来操作下面的任务。


虽然有告知权限不足,但因为具有r的权限可以查询文件名,由于权限不足(没有x),所以会有一堆问号。

因为不具有x,所以当然没有进入的权限,有没有联想到前面的权限说明?

  • 如果该目录属于用户本身,会有什么状况?

        上面的练习我们知道了只有,确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到,同时也不能将该目录变成工作目录(用cd进入该目录之意)

        那如果我们让该目录变成用户的,那么用户在这个目录下面是否能够删除文件?下面的练习做做看:

1.先用root的身份来搞定/tmp/testing的属性、权限设置

2.再用dmtsai的账号来处理一下/tmp/testing/testing这个文件看看。



竟然可以删除,这样理解了吗?

        通过上面这个简单的步骤,你就可以清楚地知道,x在目录当中是与能否进入该目录有关,至于那个w则具有相当重要的权限,因为它可以让用户删除、更新、新建文件或目录,是个很重要的参数,这样可以理解了吗?

3.1.用户操作功能与权限

刚刚讲这样如果你还是搞不懂,没关系,我们来处理个特殊的案例。假设两个文件名,分别是下
面这样:

  • /dir1/file1
  • /dir2

假设你现在在系统使用bcq_113这个账号,那么这个账号针对/dir1、/dir1/file1、/dir2这三个文件名来说,分别需要哪些最小的权限才能完成各项任务?我汇整如下,如果你看得懂,恭喜你,如果你看不懂,没关系,未来再来继续学。

操作/dir1/dir1/file/dir2重点
读取file1内容xr-要能够进入/dir1才能读到里面的文件数据
修改file1内容xrw-要进入/dir1且修改file才行
执行file1内容xrx-能够进入/dir1且 file1能运行才行
删除file1文件wx--能够进入/dir1且具有目录修改的权限即可
将file1复制到/dir2xrwx要能读file1且能修改/dir2内的数据

你可能会问,上面的表格当中,很多时候/dir1都不必有r,为啥?

        我们知道/dir1是个目录,也是个抽屉。那个抽屉的r代表“这个抽屉里面有灯光”,所以你能看到的抽屉内的所有文件盒名称(非内容)。

但你已经知道里面的文件盒放在那个地方,那有没有灯光有区别?你还是可以摸黑拿到该文件盒的,对吧!因此,上面很多操作中,你只要具有x即可,r是非必备的,只是没r的话,使用[tab]时,它就无法自动帮你补齐文件名了,这样理解了吗?

看了上面这个表格,你应该会觉得很可怕。因为要读一个文件时,你得要具有这个文件所在目录的x权限才行。所以,通常要开放的目录,至少会具备rx这两个权限,现在你知道为啥了吧!

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

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

相关文章

时空预测+特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比

时空预测特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比 目录 时空预测特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比效果一览基本介绍程序设计参考资料 效果一览 基本介绍…

目标检测入门:3.目标检测损失函数(IOU、GIOU、GIOU)

目录 一、IOU 二、GIOU 三、DIOU 四、DIOU_Loss实战 在前面两章里面训练模型时,损失函数都是选择L1Loss(平均绝对值误差(MAE))损失函数,L1Loss损失函数公式如下: 由公式可知,L1Loss损失函数…

视频监控平台web客户端的免密查看视频页:在PC浏览器上如何调试手机上的前端网页(PC上的手机浏览器的开发者工具)

目录 一、手机上做前端页面开发调试 1、背景 2、视频监控平台AS-V1000的视频分享页 3、调试手机前端页面代码的条件 二、手机端的准备工作 1、手机准备 2、手机的开发者模式 3、PC和手机的连接 (1)进入调试模式 (2)选择…

Android Compose 十二:常用组件列表 上拉加载

列表 上拉加载 当前思路 判断 列表最后一个显示的条目 为 数据集合的长度-1 用来记录刷新状态 var refreshing by remember {mutableStateOf(false)}数据集合 val list remember{List(10){"条目》》${it}"}.toMutableStateList()}用来记录列表当前状态及状态变化…

Redis分布式集群部署

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一: 实验二: 实验三: 实验四: 添加节点 自动分配槽位 提升节点为master: 实验…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿,此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架,它现在是许多知名 CMS 的核心组件,例如Drupal、Joomla!、eZPlatform(以前称为 eZPublish)或Bolt。…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法,使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上,所有的vue模板都是语法层面的HTML,可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字(也称为关键字)是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

航空数据管控系统-①项目准备阶段:任务1:项目需求描述

任务描述 从用户的角度阐述项目的开发背景、使用范围及功能需求,从而指导学生独立完成项目的设计与开发。 任务指导 目录 标题 内容 备注 1. 项目概述 1.1 项目背景介绍 (1)说明产品是什么,什么用途 (2&#xff…

【FFmpeg】avcodec_send_frame函数

目录 1.avcodec_send_frame1.1 将输入的frame存入内部buffer(encode_send_frame_internal)1.1.1 frame的引用函数(av_frame_ref )1.1.1.1 帧属性的拷贝(frame_copy_props)1.1.1.2 buffer的引用函数&#xf…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中(不考虑缓存) 任何程序在运行之前都的加入到内存。 eip->pc指针,指明当前指令在什么位置。 代码大概率是从上往下执行的,基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

git 还原被删除的分支

在多人项目开发中,有一次碰到忘记合并到master分支了,直接就把开发分支给删除了,现在记录下怎么还原被删除的分支 必须保证删除的分支之前已经被推送到了远程仓库 # 找出被删除分支的最后一个提交的哈希值 git reflog show# 找到提交哈希值…

【SSL 1823】消灭怪物(非传统BFS)

题目大意 小b现在玩一个极其无聊的游戏,它控制角色从基地出发,一路狂奔夺走了对方的水晶,可是正准备回城时,发现地图上已经生成了 n n n 个怪。 现在假设地图是二维平面,所有的怪和角色都认为是在这个二维平面的点上…

微信小程序的开发

前端:微信小程序开发的技术 后端:springboot的框架 一:微信小程序环境的搭建 1. 访问微信开发者官⽅⽹站的⼩程序开发⼯具下载⻚⾯。 2. 根据你的操作系统(Windows、macOS或Linux)选择合适的版本进⾏下载。 3. 下…

前端三件套开发模版——产品介绍页面

今天有空,使用前端三件套html、css、js制作了一个非常简单的产品制作页面,与大家分享,希望可以满足大家应急的需求。本页面可以对产品进行“抢购”、对产品进行介绍,同时可以安排一张产品的高清大图,我也加入了页面的背…

电气-伺服(4)CANopen

一、CAN Controller Area Network ,控制器局域网,80年的德国Bosch的一家公司研发可以测量仪器直接的实时数据交换而开发的一款串行通信协议。 CAN发展历史 二、CAN 的osi 模型 CAN特性: CAN 的数据帧 三、CANopen 什么是CANopen CANopen 的网络模型 …

力扣1685.有序数组中差绝对值之和

力扣1685.有序数组中差绝对值之和 记录左边之和 和 右边之和从左到右遍历每个元素 求res class Solution {public:vector<int> getSumAbsoluteDifferences(vector<int>& nums) {int n nums.size(),lsum 0,rsum accumulate(nums.begin(),nums.end(),0);ve…

MySQL8 快速导入数据指令load Data 最全详解

MySQL8 快速导入数据指令load Data 最全详解 修改mysql配置文件修改my.ini文件进入mysql,进入库"ceshi"查询你导入的数据表导入数据查询导入的数据 项目基础windows版本MySQL8 修改mysql配置文件 找到mysql的安装目录下的my.ini文件 C:\ProgramData\MySQL\MySQL Serv…

openEuler AArch64 架构 vCPU 热插拔技术内幕

OpenAtom openEuler&#xff08;简称"openEuler"&#xff09;社区引领技术浪潮&#xff0c;早在openEuler 20.09 创新版本就率先使能并对外开放了 AArch64 架构 vCPU 热插特性。时隔四年&#xff0c;openEuler 24.03 LTS 版本补充了 vCPU 热拔能力&#xff0c;vCPU 热…

2.5 C#视觉程序开发实例1----设计一个IO_Manager

2.5 C#视觉程序开发实例1----设计一个IO_Manager 第一步目标&#xff1a; 1 实现获取IO触发信号Trig0 2 能够实现程序切换 3 图像处理后能够输出一个脉冲 1 IO 引脚定义 1.1 输入信号定义 1.2 输出信号定义 2 IO时序图 2.1 触发时序 2.2 切换程序时序图 3 IO_Manager.cs …