【Linux】权限理解【文件权限以及目录权限详解、以及umsk程序掩码知识详解】

权限理解

  • 一、Linux权限的概念
  • 二、su [用户名] : 切换用户
  • 三、Linux权限管理
  • 文件
    • (一)文件访问者的分类(人)
    • (二)文件类型和访问权限(事物属性)
      • (1)第一位:文件类型
    • 关于文件后缀
    • 可执行程序的条件
      • (2)第2—10位:基本权限
    • (三)文件权限值的表示方法
    • (四)文件访问权限的相关设置方法
    • (1)chmod [参数] 权限 文件名:设置文件的访问权限
    • (2)**chmod 命令权限值的格式**
      • **① 用户表示符+/-=权限字符**
      • chmod a=x /home/abc.txt
      • **②三位8进制数字**
      • chmod 640 /home/abc.txt
    • (3)chown [参数] 用户名 文件名 :修改文件的拥有者
    • (4)chgrp [参数] 用户组名 文件名 : 修改文件或目录的所属组
    • chgrp users /abc/f2
    • (5)file [选项] 文件或目录 :辨识文件类型
  • sudo分配权限
    • 四、使用 sudo分配权限:
      • (1)修改/etc/sudoers 文件分配文件:格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
      • (2)使用 sudo 调用授权的命令:$ sudo –u 用户名 命令
  • <font color=red>目录的权限
    • ★ 五、关于权限的总结
      • 对于 删除 存在着一些讨论:root就算没有权限,也能进行修改,任何都能做
    • 六、/tmp目录:文件共享
    • 七、粘滞位 `chmod o+t`
  • 八、umask
    • umask前言引入
    • (一)umask 权限值 :查看或修改文件掩码 [ 权限掩码:定制一个文件被创建的时候的默认权限 ]
  • (二)umask过程及原理
    • (1)什么叫程序掩码?
    • (2)程序掩码具体实现

一、Linux权限的概念

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

  • 超级用户:可以在linux系统下做任何事情不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

二、su [用户名] : 切换用户

命令:su [用户名]
功能:切换用户

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

三、Linux权限管理

文件

(一)文件访问者的分类(人)

  • 文件和文件目录的所有者u—User(中国平民 法律问题)
  • 文件和文件目录的 所有者所在的组的用户g—Group(不多说)
  • 其它用户o—Others (外国人)


(二)文件类型和访问权限(事物属性)

在这里插入图片描述

(1)第一位:文件类型

  • -普通文件【包括 文本、源代码、图片、视频、(动静态库)库、可执行程序 等,已经涵盖了所有的文件类型】

  • l软链接 链接文件(类似Windows的快捷方式)
    在这里插入图片描述

    像windows下的桌面快捷方式
    在这里插入图片描述
    在这里插入图片描述

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

  • p管道文件
    管道文件数据化线|(都是兄弟)本质就是用来传递信息的

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

  • s套接口文件



关于文件后缀

  • windows 与 文件后缀 有关

  • 在Linux系统中 与 -ll ,-ls 显示的文件信息中,前面第一位的文件类型有关,与文件后缀无关
    在这里插入图片描述

用cat查看 确实是可执行程序
但mv到 .txt文件中
使用 gcc/g++ 等工具 需要考虑对应的后缀

在这里插入图片描述



可执行程序的条件


可执行的条件

  1. 首先,文件本身就是可执行文件

  2. 第一位:文件类型 具有 -x 可执行权限

但系统之上的编译器指令,工具, 需要考虑对应相应的文件后缀

=> Linux 的文件类型不通过后缀区分( 不代表Linux不用后缀 )


  • 对于文件后缀的态度 :虽然Linux不通过它识别文件类型,但是我们依旧推荐使用!:
    1. 使用工具时需要相应的文件后缀
    2. 人需要(人看一目了然)


(2)第2—10位:基本权限

  • r/4)[ Read ]

    对文件而言, 读取文件内容 ;对目录来说, 浏览该目录信息

  • w/2)[ Write ]

    对文件而言, 修改文件内容 ;对目录来说,删除移动目录内文件

  • 执行x/1)[ execute ]

    对文件而言,执行文件 ; 对目录来说, 进入目录

  • ” 表示 不具有该项权限



(三)文件权限值的表示方法

  1. 字符表示方法
    在这里插入图片描述

  2. 8进制数值表示方法
    在这里插入图片描述



(四)文件访问权限的相关设置方法

(1)chmod [参数] 权限 文件名:设置文件的访问权限

功能设置文件的访问权限
格式chmod [参数] 权限 文件名


常用选项

  • R -> 递归修改目录文件的权限
    【 说明:只有文件的拥有者和root 才可以改变文件的权限

(2)chmod 命令权限值的格式

① 用户表示符+/-=权限字符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

用户符号

  • u拥有者
  • g拥有者同组用
  • o其它用户
  • a所有用户
//实例
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
# chmod a=x /home/abc.txt

chmod a=x /home/abc.txt



②三位8进制数字

//实例
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt

chmod 640 /home/abc.txt



(3)chown [参数] 用户名 文件名 :修改文件的拥有者

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

//实例
# chown user1 f1
# chown -R user1 filegroup1


(4)chgrp [参数] 用户组名 文件名 : 修改文件或目录的所属组

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名


常用选项

  • -R 递归修改文件或目录的所属组
//实例
# chgrp users /abc/f2

chgrp users /abc/f2



(5)file [选项] 文件或目录 :辨识文件类型

功能说明:辨识文件类型。
语法:file [选项] 文件或目录

常用选项:

  • -c 详细显示指令执行过程便于排错或分析程序执行的情形

  • -z 尝试去解读 压缩文件 的内容



sudo分配权限

四、使用 sudo分配权限:

(1)修改/etc/sudoers 文件分配文件:格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令

# chmod 740 /etc/sudoers
# vi /etc/sudoer

(2)使用 sudo 调用授权的命令:$ sudo –u 用户名 命令

//实例
$sudo -u root /usr/sbin/useradd u2


目录的权限

目录也是文件

  1. 对用户先进行匹配,对应的第2-10位用户权限
  • -x可执行权限如果目录没有可执行权限, 则无法cd到目录中.

    创建一个目录 几乎给拥有者所属组都具备了-x权限,有可执行-x权限 就一定能进文件
    在这里插入图片描述

  • -r 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

    -ll ls-l 都是 查看对应文件的属性-r读权限 取决于是否有权利查看文件的属性

    -x 可以进文件,但无 -r 权限 无法通过ls查看文件属性
    在这里插入图片描述

  • -w可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

    -w写权限,则无法在文件中进行创建文件等活动
    在这里插入图片描述



★ 五、关于权限的总结

  • 目录的可执行权限 是表示 你可否在目录下执行命令
  1. -x 决定是否可以进入目录

    如果 目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件

  2. -r 决定是否可以进行对文件属性信息进行查看的权力

    而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限 ,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档

    也就是说 -x 权限 是后续操作的前提

  3. -w 决定是否可以在目录下进行 新建 和 删除 文件

对于 删除 存在着一些讨论:root就算没有权限,也能进行修改,任何都能做

在这里插入图片描述



于是, 问题来了~~

  • 问题一
    换句话来讲, 就是 只要用户具有 目录 的写权限, 用户就可以删除 目录中 的文件, 而不论这个用户是否有这个文件的写权限.

    • 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下


虽然文件目录确实是你的,但文件的所有者是root。且该文件并没有开放任何权限,所以普通用户无法对其进行任何修改。
在这里插入图片描述


既然什么都做不了,留着也没什么用,那我普通用户就你root账号建设的文件给删除了。
在这里插入图片描述

问:为什么 普通用户 可以将 root账号 设置的文件给删除掉?即便你是root文件 我想删我也能删,尽管没有任何权限-x -r -w 凭什么可以删掉?

解答:答案就是我们前面说的。只要用户具有 目录 的写权限, 用户就可以删除 目录中 的文件, 而不论这个用户是否有这个文件的写权限.

虽然文件目录确实是你的,但文件的所有者是root,文件所有者有权对文件权限进行设置 。

但该 文件所在的目录 是我的,虽然文件不是我的 。
对于这个目录,我是拥有者-u 对应的写权限我是有的,所以我可以对这个目录里的内容进行修改


一个文件能否被删除,并不取决于文件本身!!! 而取决于文件所处的目录,拥有者是否具有-w权限!!

  • 问题二
    但应不应该删除root在未经自己允许的情况下设置的文件呢 ?这是否合理?

    • 合理,你root账号可以未经别人允许即可进入别人的目录里 别人并没有同意让你在里面写文件 那么别人也有权删除你创建的文件。

    • 现在的问题已经不在于删的合不合理了 而是在于你为什么要随便在别人的目录下创建文件呢

但现实中并不会存在这样的问题

只对自己有权限,别人都没有。普通用户之间 乱搞不了
在这里插入图片描述
只有root用户 和 超级用户 才会出现这样的情况 但你也有权 也可以 删除



六、/tmp目录:文件共享

家目录只对自己一个人有权限,对其他用户无权访问。

所以只能且 需要 在系统中的非家目录中进行 文件共享 。比如说 系统中的 /tmp 目录( 权限对u,g,o 都开放了 )
在这里插入图片描述
所以有 -w 权限,所有人都能删除tmp里的文件


删一个文件你这个文件无关!如果 想让其他人 看 或者 写,确实做到了 ---- 但是我们防不住别人删我!

  • 问题三:我们去掉other的w权限不就可以了吗?

    • /tmp 目录,无-w 虽说删不了( 能解决上述由于/tmp目录对于u,g,o的权限的全开放,避免了自己开辟的文件被别人删除的可能 )

    • 但你能在root拥有者的tmp中能建文件的前提 也是因为-w

      没了-w,新文件也在里面建不了,何来的共享可言。


为了解决这个不科学的问题, Linux引入了粘滞位的概念 .



七、粘滞位 chmod o+t

[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 919 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

other 新增一个权限:t

粘滞位:给 自录共享 中的 other 设置的一个权限位 t,具有x的意义,同时也进一步对目录权限进行特殊限定:

该目录里面的文件,只有 超级用户root文件的拥有者目录的所有者 有权利进行删除!!
其他人一概不允许!


粘滞位 ( 用chmod o+t )



八、umask

umask前言引入

  • 在Linux系统当中,可执行程序所占的比例只占其中一部分,只有必须得用可执行程序的才会加上-x, 不需要的可由用户自己去加,或者其他生成软件去加。

目录和可执行程序,本身天然的就需要-x,系统自动就会给你带上

那么

  • 新建目录文件 的起始权限 本身就是从777开始( 带-x ),事实上:775
  • 而新建普通文件 的起始权限 则是从666开始( 不带-x ),实际上:664

在这里插入图片描述

这是为什么呢? 原因就是创建文件或目录的时候还要受到umask文件掩码的影响。



(一)umask 权限值 :查看或修改文件掩码 [ 权限掩码:定制一个文件被创建的时候的默认权限 ]


功能
查看修改 文件掩码给目录定制 被创建时的 默认权限

//实例
# umask 755
# umask    ★查看
# umask 044     ★设置

(二)umask过程及原理

  • 新建文件默认权限=0666

  • 新建目录 默认权限=0777

    【只关心后面3个】

在这里插入图片描述
不是减法借位作减法 得到的663 而不是664 】


(1)什么叫程序掩码?

  • umask【值】:【值】八进制二进制:权限掩码

  • 程序掩码=最终不会出现的码 在umask当中出现的权限,就不应该在最终的权限中出现

(2)程序掩码具体实现

先 按位取反~(任何跟0按位与都会被转换成0) 后 再按位与 &
在这里插入图片描述

假设默认权限是mask,则实际创建的出来的文件权限是: mask & ( ~umask )

格式:umask 权限值
说明:将现有的存取权限 减去 权限掩码后即可产生建立文件时预设权限。

超级用户root 默认掩码值为 0022普通用户 默认为 0002


umask 权限值:修改文件掩码,将现有的存取权限 减去 权限掩码后即可产生建立文件时预设权限。
在这里插入图片描述
由此可见,最终权限:由 起始权限 和 umask权限掩码 共同决定

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

tp8 使用rabbitMQ

php8.0 使用 rabbitmq 要使用 3.6版本以上的&#xff0c; 并且还要开启 php.ini中的 socket 扩展 php think make:command SimpleMQProduce //创建一个生产者命令行 php think make:command SimpleMQConsumer //创建一个消费者命令行 生产者代码 <?php declare (strict_ty…

SpringBoot:异步任务基础与源码剖析

官网文档&#xff1a;How To Do Async in Spring | Baeldung。 Async注解 Spring框架基于Async注解提供了对异步执行流程的支持。 最简单的例子是&#xff1a;使用Async注解修饰一个方法&#xff0c;那么这个方法将在一个单独的线程中被执行&#xff0c;即&#xff1a;从同步执…

【无标题】文本超过一行隐藏,鼠标经过显示提示框

创建一个组件专门用来出来文字的 <template><div class"tooltip-wrap"><el-tooltipref"tlp":content"text"effect"dark":disabled"!tooltipFlag":placement"placement"popper-class"tooltip…

centos查看空间使用情况

查看磁盘使用空间 df -h 查看该目录下其他目录的大小 du -sh *

基于Python实现的一个命令行文本计数统计程序,可统计纯英文txt文本中的字符数,单词数,句子数,Python文件行数

项目简介 这是一个用 Python 编写的命令行文本计数统计程序。 基础功能&#xff1a;能正确统计导入的 纯英文txt文本 中的 字符数&#xff0c;单词数&#xff0c;句子数。扩展功能&#xff1a;能正确统计导入的 Python 文件中的代码行数&#xff0c;注释行数&#xff0c;空白…

pip安装python包到指定python版本下

python -m pip install 包名1.命令行进入到指定python安装目录。比如我电脑上有python3.8也有python3.9。准备给python3.9安装指定的包

nginx国密ssl测试

文章目录 文件准备编译部署nginx申请国密数字证书配置证书并测试 文件准备 下载文件并上传到服务器&#xff0c;这里使用centos 7.8 本文涉及的程序文件已打包可以直接下载。 点击下载 下载国密版openssl https://www.gmssl.cn/gmssl/index.jsp 下载稳定版nginx http://n…

【Python】tensorboard实时查看模型训练过程的方法示例

本文对tensorboard实时查看模型训练过程的方法进行实例详解&#xff0c;以帮助大家理解和使用。 步骤1&#xff1a;查看训练过程保存的文件中是否有这个文件&#xff0c;红框内的。 步骤2&#xff1a;如果有&#xff0c;则打开终端&#xff0c;激活安装过tensorboard的环境。…

20231122给RK3399的挖掘机开发板适配Android12

20231122给RK3399的挖掘机开发板适配Android12 2023/11/22 9:30 主要步骤&#xff1a; rootrootrootroot-X99-Turbo:~$ tar --use-compress-programpigz -xvpf rk356x_android12_220722.tgz rootrootrootroot-X99-Turbo:~$ cd rk_android12_220722/ rootrootrootroot-X99-Tur…

C++ 标准模板库:容器

1. list 容器 1.1 初始化&#xff0c;获取读取 #include <iostream> #include<list>using namespace std;void printList(const list<int>&L){for(list<int>::const_iterator it L.begin(); it ! L.end(); it){cout << *it <<"…

让国内AI模型解题:滑动窗口中找出最大值,文心一言,通义千问错误率100%,讯飞星火略胜一筹

最近&#xff0c;一些大厂陆续放出了自己的AI模型&#xff0c;处于日常的使用和准确度&#xff0c;我通过一道试题来看一下文心一言、讯飞星火和通义千万的回答结果 本道题是一道很经典的算法题&#xff0c;请在滑动窗口中找出最大值 文心一言 第一次给出答案 package main…

Cypress-浏览器操作篇

Cypress-浏览器操作篇 页面的前进与后退 后退 cy.go(back); cy.go(-1);前进 cy.go(forward); cy.go(1);页面刷新 cy.reload() cy.reload(forceReload) cy.reload(options) cy.reload(forceReload, options)**options&#xff1a;**只有 timeout 和 log forceReload 是否…

深入理解路由协议:从概念到实践

路由技术是Internet得以持续运转的关键所在&#xff0c;路由是极其有趣而又复杂的课题&#xff0c;永远的话题。 SO&#xff1a;这是一个解析路由协议的基础文章。 目录 前言路由的概念路由协议的分类数据包在网络中的路由过程理解路由表的结构路由器关键功能解析 前言 在互联…

Navicat 技术指引 | 适用于 GaussDB 的自动运行功能

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

Linux反弹SHell与检测思路

免责声明 文章仅做经验分享用途,利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 反弹shell payload在线生成 https://www.chinabaiker.com/Hack-Tools/ Online - Reverse Shell G…

mac mysql连接中断重新启动办法

遇到如图所示问题&#xff0c;可以用下面的命令重启mysql服务 sudo /usr/local/mysql/support-files/mysql.server start

和小伙伴们仔细梳理一下 Spring 国际化吧!从用法到源码!

国际化&#xff08;Internationalization&#xff0c;简称 I18N&#xff09;是指在 Java 应用程序中实现国际化的技术和方法。Java 提供了一套强大的国际化支持&#xff0c;使开发人员能够编写适应不同语言、地区和文化的应用程序。 Java 国际化的主要目标是使应用程序能够在不…

Faster R-CNN源码解析(一)

目录 前言训练脚本(train_mobilenetv2.py)自定义数据集(my_dataset.py) 前言 Faster R-CNN 是经典的two-stage目标检测模型&#xff0c; 原理上并不是很复杂&#xff0c;也就是RPNFast R-CNN&#xff0c;但是在代码的实现上确实有很多细节&#xff0c;并且源码也非常的多&…

面试题:Java 对象不使用时,为什么要赋值 null ?

文章目录 前言示例代码运行时栈典型的运行时栈Java的栈优化提醒 GC一瞥提醒 JVM的“BUG”总结 前言 最近&#xff0c;许多Java开发者都在讨论说&#xff0c;“不使用的对象应手动赋值为null“ 这句话&#xff0c;而且好多开发者一直信奉着这句话&#xff1b;问其原因&#xff…