【Linux】Linux权限的理解

news2024/11/17 21:51:10

文章目录

  • 🎪 Linux权限的理解
    • 🚀1.shell命令及其运行原理
    • 🚀2.Linux权限概念
      • ⭐2.1 用户与root身份切换
      • ⭐2.2 用户与用户身份切换
      • ⭐2.3 单条指令提权
    • 🚀3.Linux文件权限
      • ⭐3.1 文件属性(第一个字符)
      • ⭐3.2 文件角色划分与文件属性
      • ⭐3.3 文件权限值的表示方法
      • ⭐3.4 修改文件或目录读写执行权限
    • 🚀4.粘滞位
    • 🚀5.默认权限


🎪 Linux权限的理解

Linux权限是一个很重要的概念。如果没有权限的约束,那么一些重要的文件将可能会受到威胁。

🚀1.shell命令及其运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel

从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

Windows GUI:即为图形化接口,我们通过图形化界面来操作Windows内核,这里的GUI就是Windows的shell程序

Linux Bash: 即为命令行接口,我们通过命令行来操作Linux内核,这里的Bash就是Linux的shell程序

如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

🚀2.Linux权限概念

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

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

这里用于账户切换的命令如下:

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

⭐2.1 用户与root身份切换

  • 输入su :接着再输入管理员密码
    此种情况下,相当于仅仅进行的身份切换,原先处在的家目录不变
  • 输入su-:接着再输入管理员密码
    此种情况相当于直接进行了账户切换,切换后root1会出于自己的家目录

在这里插入图片描述

除此之外,切换为root,使用su + 用户名可以再将身份切换为任意普通用户

在这里插入图片描述

⭐2.2 用户与用户身份切换

如果是用户,想要切到另外一个用户也可以用 su + 用户名,但没有密码的话将为失败
在这里插入图片描述
此时如果知道root账号密码,那么就可以先切换为root,然后root切换账户将会畅通无阻
在这里插入图片描述

⭐2.3 单条指令提权

对单条指令提权的指令如下:

语法:sudo [任意指令]
功能:对该指令以root的权限执行

对于我们刚刚的用户之间切换,我们就可以使用sudo su msr,然后输入自己的账户密码就可以完成对该条指令进行root提权。那岂不是root形同虚设?我们随便对一条指令进行sudo提权不就可以干任何事啦,但遗憾的是:
在这里插入图片描述
提权失败,这是由于我们当前用户未在linux系统的信任列表里面,即便你用了sudo提权并输入正确的用户密码(注意这里输的是自己的账户密码)也无法进行提权
关于注册用户进信任列表我们后续博客中说明。

🚀3.Linux文件权限

我们用以下展示的界面进行:权限 = 人 + 事务属性(文件 + rwx)

在这里插入图片描述

⭐3.1 文件属性(第一个字符)

上图中第一个字符表示文件属性:

  • d:表示目录
  • -:表示文本文件,可执行文件,归档文件等
  • b:块设备,例如硬盘、光驱等
  • c:字符设备,例如键盘、显示器
  • p:管道文件
  • s:网络socket文件
  • l:链接文件

⭐3.2 文件角色划分与文件属性

Linux中一个文件有三种角色划分:

  • 文件拥有者
  • 文件所属组
  • 文件other

Linux中一个文件有三种权限:

  • r:读
  • w:写
  • x:执行

上述图片中文件属性(第一个字符之后),有9个字符,每三个分别代表:文件拥有者,文件所属组,文件other权限,然后紧跟的两个用户名分别代表文件拥有者和文件所属组的名字,其他用户默认是other
在这里插入图片描述
还可以用以下图片来描述:
在这里插入图片描述

⭐3.3 文件权限值的表示方法

  • 字符表示方法
    在这里插入图片描述
  • 进制数值表示方法
    在这里插入图片描述

⭐3.4 修改文件或目录读写执行权限

我们可以用以下命令来修改:

语法:chmod u/g/o +/- r/w/x 文件/目录
功能:修改文件或目录的读写执行权限(注意中间无空格,如:chmod u+r test.c)

对于以下目录:
在这里插入图片描述
我们先来看看没有读写执行权限会怎样,此时除了root外,任何用户都不能对test.c进行读写执行:
在这里插入图片描述

1. 修改文件读写执行权限

  • 对test.c授予拥有者的读写执行权限
    命令:chmod u+rwx test.c
    在这里插入图片描述

  • 对test.c授予所属组的读写权限
    命令:chmod g+rw test.c
    在这里插入图片描述

  • 对test.c收回拥有者的读权限,收回所属组读写权限,授予other可执行权限
    命令:chmod u-r,g-rw,o+x test.c
    在这里插入图片描述

  • 以八进制形式收回所有权限,并再次完成以上操作
    命令1:chmod 000 test.c
    命令2:chmod 700 test.c
    命令3:chmod 760 test.c
    命令4:chmod 301 test.c
    在这里插入图片描述

  • 收回所有权限,并给所有人添加执行权限
    命令1:chmod 000 test.c
    命令2:chmod a+x test.c / chmod 111 test.c
    在这里插入图片描述

注意:可以执行授予或者收回文件的用户只能是root或者文件拥有者

2. 修改文件读写执行权限

目录的权限跟文件有很大的差别,我们可以把目录当成可执行程序,然后打开目录就相当于执行这个程序。

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

我们来验证一下:
在这里插入图片描述

3. 修改文件或目录拥有者及所属组

语法:chown 用户名 文件
功能:修改文件或目录的拥有者,也支持一起修改

语法:chgrp 用户名 文件
功能:修改文件或目录的所属组

注意: root可以支持任意修改,但拥有者只可以将所属组名改成自己的,但不支持将拥有者和所属组改成其他用户.

所以修改操作我们在root下进行:

  • 修改test.c的拥有者为msr

命令:chown msr test.c

在这里插入图片描述

  • 修改test.c的所属组为msr

命令:chgrp msr test.c

在这里插入图片描述

  • 修改test.c的拥有者和所属组为msr

命令:chown ljk:ljk test.c

在这里插入图片描述

🚀4.粘滞位

背景:在使用linux的时候,未来可能有一些共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。因为是共享目录,要保存临时数据,那么这个目录肯定要对所有用户开放写权限,既然开放了写权限,那么用户删除目录的权限也就开放了,这就存在这一些问题,即便用户对他存放的文件添加了权限限制,但是其它用户依然有权限删除其它用户的数据,于是,粘滞位就在这样的时代背景下产生了。

添加粘滞位的方法:

语法:chmod +t 目录名
功能:添加粘滞位

添加了粘滞位的目录,这个目录下的文件只能被以下用户删除:

  • 超级管理员
  • 目录所有者
  • 文件所有者

🚀5.默认权限

我们为什么一创建文件或目录,它的默认权限就已经是确定了的呢?如下:

在这里插入图片描述
其实在linux中存在权限掩码这一概念,即umask.

语法:umask
功能:查看当前用户权限掩码

一般未做人为修改的话,root的权限掩码是0022,而普通用户的权限掩码是0002

第一位是特殊权限位,而后三位是用户权限位,真正对默认权限产生影响的是后三位。这里我们给三个概念:

  • 起始权限
  • 最终权限(默认权限)

作为一个文件,最初应该被赋予的权限应该是666(rw_rw_rw),作为一个目录,最初被赋予的权限应该是777(rwxrwxrwx),权限掩码:在起始权限中,去掉在umask中出现的权限,不能影响其它的任何权限
故我们得出结论:默认权限 = 起始权限 & (~umask)

我们来做一下验证:

对于普通用户定义的目录,起始权限:777 默认权限:775 umask:002
在这里插入图片描述

对于普通用户定义的文件,起始权限:666 默认权限:664 umask:002
在这里插入图片描述

我们也可以修改当前用户的umask,直接umask + 修改后的权限掩码即可,但是这次修改仅为临时修改,下次登录权限掩码会默认初始化一遍。如果想做到永久修改,得修改对应的配置文件才行。

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

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

相关文章

线性代数第四章 向量组的线性相关性

向量组及其线性组合一.向量、向量组1.向量n个有次序的数a1,a2,...,an所组成的数组称为n维向量,这n个数称为该向量的n个分量,第i个数ai称为第i个分量n维向量可以写成一行,也可以写成一列,在没有指明是行向量还是列向量时&#xff0…

Authing 入选长城战略咨询《2022中国潜在独角兽企业研究报告》

12 月 23 日,长城战略咨询(GEI)发布《2022 中国潜在独角兽企业研究报告》(下称《报告》)。作为身份云行业领先的代表企业, Authing 凭借着过硬的技术实力和突出的创新能力,首次入选中国潜在独角…

软件测试工程师为什么要写测试用例?

软件测试工程师为什么要写测试用例?相信从事软件测试行业的从业者来讲,测试用例并不陌生。因为测试用例不仅仅是一组简单的文档,它包含前提条件、输入、执行条件和预期结果等等重要内容,并且能够完成一定的测试目的和需求。下面本…

深度学习(20)—— ConvNext 使用

深度学习(20)—— ConvNext 使用 本篇主要使用convnext做分类任务,其中使用convnext-tiny,其主要有5块 stage0stage1stage2stage3head 文章目录深度学习(20)—— ConvNext 使用Part 1 ModelPart 2 Traini…

【数据结构】一篇博客带你实现双向带头循环链表!!!(零基础小白也可以看懂)

目录 0.前言 1. 简述双向带头链表 2.双向带头循环链表的实现 2.1 设计双向带头循环链表结构体 2.2双向带头循环链表的初始化 2.3双向带头循环链表的尾插 2.4双向带头循环链表的尾删 2.5双向带头循环链表的头插 2.6双向带头循环链表的头删 2.7双向带头循环链表的插入 …

【面试题】notify() 和 notifyAll()方法的使用和区别

【面试题】notify() 和 notifyAll()方法的使用和区别 Java中notify和notifyAll的区别 何时在Java中使用notify和notifyAll? 【问】为什么wait()一定要放在循环中? Java中通知和notifyAll方法的示例 Java中通知和notify方法的示例 Java中notify和no…

22年我在CSDN做到了名利兼收

写在前面 hi朋友,我是几何心凉,感谢你能够点开这篇文章,看到这里我觉得我们是有缘分的,因着这份缘分,我希望你能够看完我的分享,因为下面的分享就是要汇报给你听的,这篇文章是在 2022 年 12 月 …

从0到1完成一个Vue后台管理项目(二十三、初代项目完成、已开源)

开源地址 项目地址 项目还在优化,会增加很多新功能,UI也会重新设计,已经在修改啦! 最近打算加一些组件、顺便分享一些好用的开源项目 现在正在做迁移到vue3TS的版本、预计年后会完事,然后迁移到vite、遇到的问题和报…

docker安装prometheus和grafana

docker安装prometheus和grafana docker安装prometheus和grafana 概念简述安装prometheus 第一步:确保安装有docker第二步:拉取镜像第三步:准备相关挂载目录及文件第四步:启动容器第五步:访问测试 安装grafana 第一步&…

分享66个ASP源码,总有一款适合您

ASP源码 分享66个ASP源码,总有一款适合您 66个ASP源码下载链接:https://pan.baidu.com/s/1Jf78pfAPaFo6QhHWWHEq0A?pwdwvtg 提取码:wvtg 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...&…

Docker容器与镜像命令

文章目录帮助命令镜像命令容器命令其它命令命令总结帮助命令 显示 Docker 版本信息 docker version显示 Docker 系统信息,包括镜像和容器数 docker info 帮助 docker --help 镜像命令 列出本地主机上的镜像 docker images运行结果 REPOSITORY TAG …

Python采集彼岸4K高清壁纸

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块 import re import requests >>> pip install requests ( 更多资料、教程、文档点击此处跳转跳转文末名片加入君羊,找…

【Leetcode面试常见题目题解】5. 最长公共前缀

题目描述 本文是LC第14题&#xff0c;最长公共前缀&#xff0c;题目描述如下&#xff1a; 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 限制 1 < strs.length < 200 0 < strs[i].length < 200 strs[i] 仅…

数据库 MySQL-window安装和卸载

安装 官网&#xff1a; MySQL :: Download MySQL Community Server 或 MySQL :: Download MySQL Community Server (Archived Versions) 文件目录简述 bin存放了可执行文件&#xff0c;docs是文档&#xff0c;include放的是c语言相关的.h文件&#xff0c;lib是c语言的库文件…

wmv是什么格式?如何录制wmv格式的视频?图文教学

很多小伙伴在使用文件的时候&#xff0c;经常会发现自己的一些文件后缀名是wmv。或者说在工作、学习的过程中&#xff0c;有过被要求使用wmv格式的文件。wmv是什么格式&#xff1f;如何录制wmv格式的视频&#xff1f;今天小编就来详细的跟大家说说。 一、wmv是什么格式&#xf…

SpringBoot复习(一)

底层注解 Configuration 自定义配置类 Bean: 可以通过Bean注解将方法的返回值交给ioc容器来管理 组件id为方法名&#xff0c;组件的类型就是方法的返回类型。 默认组件是单例的 Configuration: 告诉springboot这是一个配置类之前的配置文件 配置类本身也是组件&#xff0c;由s…

【Linux】Makefile/make - 快速理解入门

目录 一、概念理解 1、基本概念 2、举例说明 二、编写 Makefile 1、依赖关系和依赖方法 2、文件清理 3、扩展内容 一、概念理解 1、基本概念 在我们学习 Linux 的过程中&#xff0c;我们可以直接使用 gcc 指令对程序的文本文件逐个进行编译处理&#xff0c;这是因为我…

ASP.NET Core 3.1系列(26)——Autofac中的实例生命周期

1、前言 前面的博客主要介绍了Autofac中的一些注册方法&#xff0c;下面就来介绍一下Autofac中实例的生命周期。之前在介绍ASP.NET Core内置IoC容器的时候说过&#xff0c;实例的生命周期有&#xff1a;瞬时生命周期、域生命周期、全局单例生命周期&#xff0c;而Autofac在这三…

mysql-8.0.31-winx64详细安装教程

一、下载MySQL MySQL官网&#xff1a;https://www.mysql.com/cn/ mysql-8.0.31-winx64下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2、下载结束后&#xff0c;解压到指定目录&#xff0c;笔者存放在D盘 &#xff0c;为求简单&#xff0c;设置目录如下&#…

数据库历史数据年度备份

数据库历史数据年度备份 1、文件说明 matomo_backup.sql 备份库表结构脚本(这个根据自己数据结构准备&#xff0c;对于时间命名的表结构就不要加了&#xff0c;只加非时间命名的表结构) export.sh 数据导出脚本 clean.sh 源数据库历史数据清除脚本 2、需求与思路 需求 对…