Linux权限的基本知识

news2024/12/24 2:06:40

 

本文已收录至《Linux知识与编程》专栏!
作者:ARMCSKGT
演示环境:CentOS 7 

  


目录

前言

正文

权限是什么?

Linux权限的划分

Linux用户的切换命令

Linux文件权限

Linux文件类型

Linux文件权限

Linux角色划分

文件权限的访问和修改

文件拥有者和所属组

修改文件拥有者指令chown

修改文件拥有者指令chgrp

Linux辨识文件类型指令file

Linux目录权限

Linux系统文件和目录的默认权限

权限掩码

粘滞位(公共目录下的权限管理)

粘滞位的概念

粘滞位使用场景模拟​编辑

Linux粘滞位的添加

提权指令sudo 

最后


前言

对于一个操作系统,权限的划分是肯定的,我们在使用Windows操作系统时如果在C盘中删除一些系统级的文件夹,那么操作系统肯定会提示你权限不足,Linux也是如此,在执行某些命令时需要特殊权限,本节将为您介绍!


正文

我们都知道Shell外壳建立了用户与内核交流的桥梁,那么我们向Shell发送命令时可能会碰到权限问题!


权限是什么?

权限概念:限制人的,访问的对象天然可能没有这种“属性”(例如在王者荣耀里面写代码,王者荣耀写不了代码),所以权限反映了:“一件事情是否能被谁做”。做的肯定是人,所以只有人的操作才会出现权限的制约!

 

总结就是:权限 = 人 + 事务(文件)属性(事务是干什么的,或者说文件是干什么的)


Linux权限的划分

Linux权限划分为两种:

1. 管理员root:管理员具有一切权限,执行任何命令都是畅通无阻

2. 普通用户:普通用户的行为受到限制,某些命令的执行需要向root申请并提权! 


Linux用户的切换命令

Linux用户切换命令为:su  [用户名]

  

该命令的功能显而易见就是切换用户!如果su后面不指定用户名则是默认切换为root,如果指定用户名则是切换到指定用户,切换对应用户时输入的密码也是对应用户设置的密码

  

这里需要说明的是,在root权限下切换任何用户都是不需要密码的,所以操作需要谨慎!


Linux文件权限


在Linux系统中有一个概念是一切皆文件!也就是说无论是输入输出设备还是磁盘中的文件都统统归属于文件!

如果展示效果不清晰请放大浏览!

 Linux文件类型

在Linux系统中,文件类型并不是由其文件后缀决定的,Linux系统识别文件类型是以详细信息指中第一个字符决定的

 

文件后缀的作用

1.Linux系统不认后缀,用户想用就用区分给用户看。

2.将后缀看成文件名的一部分。

3. 有的软件需要后缀,例如gcc不能识别 .txt 文件只能编译 .c 文件。

 

Linux文件类型标识

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

我们现在一般接触到的就是目录d和普通文件-,深入的学习会接触到更多系统文件!


Linux文件权限

基本权限

权限(三位)二进制表示权限说明
-000(0)无权限(表示不具有该项权限)
r100(4)可读取(Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限)
w010(2)可写入(Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限)
x001(1)可执行(execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限)

字符表示方法

权限八进制数表示法


 Linux角色划分

u---文件所有者(user)文件的创始人
g---文件所属组(group)文件所属组是一个所属群体,一般文件所属组与文件拥有者是同一个人
o---其他用户(other)除所有者和所属组以外的其他普通用户
a---全部用户(all)此Linux上的所有用户

一个Linux系统可以有很多个用户,每个用户有不同的角色,互不干扰! 在Linux系统中root管理员不受任何权限和角色的约束,可以执行所有可执行命令


文件权限的访问和修改

普通用户一般在自己的用户目录下,进行大部分操作都是不受限制的。Linux不支持普通用户相互访问其他用户目录!但是在权限允许的情况下,可以修改文件或目录的权限对其他用户公开发文


权限修改指令:chmod  [-选项] [用户类型][权限操作][权限]  [目标文件]

功能:修改文件对应权限。

 

注意:只有文件所有者和所属组可以修改文件权限!其他用户无法使用chmod修改文件权限!


常用选项

-R将目录和目录中的所有文件都设置为该权限

用户类型(拥有者),(所属组),(其他用户),(全部用户)
权限操作(加上此权限),(去掉此权限),= (加上指定的权限其他的权限全部去掉)
权限(可读),(可写),(可执行)

权限部分可以连添加,例如:rw,rx,wx,rwx  等等;也可以对多个对象进行操作使用“”相隔开即可!

 

例如

1. 为test.c文件的所属组添加可执行权限:chmod g+x test.c

2. 为test.c文件的其他人添加所有权限:chmod o+rwx test.c

3. 为test.c文件的拥有者和所属组去掉可执行权限,其他人添加可写权限:chmod  u-x,g-x,o+w  test.c

4. 为test.c文件的其他用户只添加可读权限:chmod  o=r test.c


权限的其他表示

字符表示三位二进制表示八进制表示权限
-0000无权限
r1004可读
w0102可写
x0011可执行

八进制也可以对权限进行设置,一般在进行整体设置时会使用到八进制进行设置,这样比较方便!

 

例如

1. 为test.c文件的全部用户添加全部权限:chmod 777 test.c

2. 为test.c文件的全部用户去掉全部权限可读权限:chmod 000 test.c

3. 为test.c文件的拥有者和所属组只留下可写和可读权限,其他人添加只有可读和可执行权限:chmod  665 test.c


文件拥有者和所属组


对于文件(或目录),拥有者即是创建用户,所属组也是创建用户的名字。

对于所属组,大家可能概念非常模糊,我们可以把Linux系统比喻成一个班级,班级中分为两个小组,小组以组长来命名,这里的组长就是创建该文件(或目录)的用户。

 在小组1的同学可以相互之间批改作业,而小组2中的同学不能去批改和查看小组1中同学的作业,更不能删除!所以小组的概念在Linux系统中可以实现一个Linux系统开发两个应用程序而两个开发团队之间互不干扰,这样既提高了开发效率降低了成本也保护了文件安全性。 


修改文件拥有者指令chown

 指令:chown [-选项]  [用户名]  [文件/目录]

 功能:将文件/目录拥有者修改为指定用户。

 

常用选项

-R将目录和目录中的所有文件的拥有者都设置为指定用户

修改文件拥有者指令chgrp

 指令:ch [-选项]  [用户组名]  [文件/目录]

 功能:将文件/目录的所属组修改为指定用户组。

 

常用选项

-R将目录和目录中的所有文件的所属组都设置为指定所属组

Linux辨识文件类型指令file

指令:file [-选项] [文件/目录]

功能:查看文件类型信息,以英文展示。当文件为空没有被进行任何修改时file会反馈Empty表示文件为空!


常用选项

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

 
文件没有被修改显示Empty
修改后显示为UTF-8文本文件

Linux目录权限

Linux目录也有权限的约束,与普通文件的权限限制略有差异!


目录的权限也是:可读 r,可写 w,可执行 x,无权限 -

  

目录的可执行权限x对应的操作是是否可以进入目录,所有决定是否可以进入目录的权限是x而不是r,目录的r权限约束ls指令!

  

目录中的w可写权限,决定了是否可以添加文件或目录或者删除文件或目录,如果没有可写权限,则无法对目录中进行添加或者删除文件的操作!

目录没有r权限无法使用ls查看且进入目录后也无法查看里面的文件!
没有x可执行权限无法进入文件夹!

Linux系统文件和目录的默认权限

我们在创建文件或目录时Linux会默认设置文件和目录的权限!


 将系统的默认文件权限rw-rw-r--转换为八进制数字就是:664,从这里可以看出文件一般是不需要执行权限的,只有程序和目录有执行权限的设置,而为了保证文件的安全性其他用户other只有读权限!


 将系统默认的目录权限rwxrwxr-x转换为八进制数组就是:775,从这里可以看出目录是需要可读和可执行权限的,因为我们需要进入目录和查看目录中的文件,但是系统没有给其他用户other分配可写入权限,这里第一是为了防止恶意创建文件,另一方面也可以恶意删除文件!


权限掩码

我们创建文件时,会有默认权限,但是文件的权限一开始是放开的,默认权限是经过权限掩码处理后才得到的!


按正常来说,我们创建普通文件时的默认权限为:0666;创建目录时的默认权限为0777,但事实并非如此,我们需要考虑一些安全情况,以免发生意外。

 

所以Linux在创建文件和目录时会将当前的默认权限八进制值与权限掩码~umask取&,也就是我们最终得到的默认权限 = 原默认权限 & ~umask。将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。


umask指令

umask在Linux系统下是权限掩码的指令,该指令可以查询当前的权限掩码,也可以修改当前的权限掩码。

指令:umask  [新掩码]

功能:如果umask后没有设置的掩码则显示当前的权限掩码,如果后面有需要设置的掩码则修改当前的权限掩码。

注意:修改权限掩码只是相当于本用户,其他用户不受影响!


粘滞位(公共目录下的权限管理)

粘滞位是为所属组设计的,为了防止在公共目录下恶意删除文件的行为!


粘滞位的概念

未来在使用Linux时可能有共享目录,被所有普通用户共享,用来保存普通用户产生的临时数据,这个共享目录一般是root通过的(例如hmoe就相当于一个共享目录), 文件被所有人共享时受权限约束,但是拦不住别人删我的文件,因为可写权限w是必须开启的,如果不开启那么谁也无法创建文件,为了让大家能共享文件但不被随意删除文件就推出了粘滞位的概念粘滞位只能给目录添加,一般给共享目录添加


粘滞位使用场景模拟

 小组1和小组2在root创建的目录里面共同开发一个项目,小组2中的小华想看小组1中小明写的文件,但是发现没有读权限,但文件夹下有可写w权限,可以删除小明的文件,这样是非常不合理的!


Linux粘滞位的添加

指令:chmod  a+t  [目录]  或  chmod  +t  [目录]

功能:给目录添加粘滞位;该目录只能被超级管理员,该目录的所有者和该文件的所有者删除。 添加粘滞位后,该目录会被标记,其other权限位上的可执行权限位显示t或T。

  

注意:对于粘滞位的显示,系统中有的显示为T,但一般为t,这种情况是由other权限位上是否具有x权限决定的,如果该目录other具有权限则添加粘滞位后显示t,如果该目录other没有x权限则显示T!

 


家目录下使用root账户创建公开文件夹添加粘滞位
在有粘滞位的目录下删除其他用户文件时被拒绝

提权指令sudo 

指令:sudo  [指令]

功能:对于一些涉及系统内部的指令,需要更高的权限才能执行,否则系统不会执行!在使用sudo提权后,系统会提示输入密码,此时输入的是本账户的密码,输入后即可提权执行sudo在默认情况下向root申请提权(也就是申请使用管理员权限运行该指令)

安装程序时权限不足

 注意:Linux系统默认普通用户不能使用sudo进行提权,想要使用普通账户可以提权,那么想要将该普通用户添加到信任名单!


常用选项

-u提权到指定用户执行(使用sudo调用授权的命令)

格式:sudo -u [指定用户]  [指令]

说明:有时候我们在他人创建的目录下进行工作,我们想进行一些例如文件删除的行为时,对于有粘滞位的目录我们无法操作,这时可以向指定用户(目录文件夹的拥有者)借权执行命令!此操作也需要输入自己账户的密码,且自己的账户是信任用户!


添加信任名单步骤

 (此操作必须在root账户下进行!)

1. 找到sudoers文件

进入根目录下etc目录
在etc目录下找到sudoers

  

2. 使用文本编辑器打开sudoers文件

 找到图片中的位置,按照root账户的默认格式,在root下方将其抄一遍并将其用户名修改为自己的用户名即可列入信任列表!


最后

Linux权限的基本知识到这里就介绍的差不多了,对于系统权限是用来保护系统安全的,合理的运用权限可以让我们的文件数据不受损害,相信学完的朋友们一定深有体会!

本次Linux权限的基本知识就介绍到这里啦,希望能够尽可能帮助到大家。

如果文章中有瑕疵,还请各位大佬细心点评和留言,我将立即修补错误,谢谢!

 🌟其他文章阅读推荐🌟

数据结构初级<排序>-CSDN博客

Linux基础指令-CSDN博客

Linux系统创建新的普通用户-CSDN博客

🌹欢迎读者多多浏览多多支持!🌹

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

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

相关文章

buu [MRCTF2020]keyboard 1

题目描述: 题目分析: 由标题keyboard可知与键盘有关 看到一串数字有重复的,且重复数在1~4之间,符合九键拼音键盘 个数便对应位数 例如:6对应m , 666对应o 所以以上对应下来是 “mobilephond” 试过之后不对&#…

Unity-Tcp-网络聊天功能(一): 基本功能

Protobuff的效率较高。TCP用于延迟不高的游戏效果较好,UDP对开发人员友好(对于消息的重发等,降低网络延迟),Websocket在网页端H5端进行通信,1.TCP相关API介绍与服务端编写TCP是面向连接的。因此需要创建监听…

【JavaEE多线程】synchronized原理篇

目录 一、synchronized的优化机制 1)无锁状态 2)偏向锁状态:非必要,不加锁 3)轻量级锁 4)重量级锁:挂起等待 二、锁消除 三、锁粗化 锁的粒度 锁粗化的好处 在这一篇文章当中,我们也提到了synchronized的作用。 Java对于synchroniz…

Python super()函数:调用父类的构造方法

Python 中子类会继承父类所有的类属性和类方法。严格来说,类的构造方法其实就是实例方法,因此毫无疑问,父类的构造方法,子类同样会继承。但我们知道,Python 是一门支持多继承的面向对象编程语言,如果子类继…

『Nonebot 插件编写教程』nonebot2处理消息的完整过程

文章目录前言捕获消息处理消息Bot机器人参数Event事件参数回复消息字符串与Message调用MessageSegment接口前言 前面已经有不止一篇博客教大家如何搭建nonebot2环境了大家可以去专栏查看,这篇博客并不会再次带大家来搭建nonebot2环境,而是着手与插件的编…

【微服务】Sentinel规则持久化

Sentinel 规则持久化 一、修改微服务 修改微服务&#xff0c;让其监听Nacos中的sentinel规则配置。 具体步骤如下&#xff1a; 1.引入依赖 在order-service中引入sentinel监听nacos的依赖&#xff1a; <dependency><groupId>com.alibaba.csp</groupId>…

数据结构实验三: 图的操作与实现

数据结构实验一:线性表,堆栈和队列实现 数据结构实验二 :二叉树的操作与实现 数据结构实验三: 图的操作与实现 数据结构实验四 : 查找和排序算法实现 文章目录一、实验目的&#xff1a;二、使用仪器、器材三、实验内容及原理1、教材P310实验题1&#xff1a;实现图的邻接矩阵和邻…

Springboot扩展点之BeanFactoryPostProcessor

Springboot扩展点之BeanFactoryPostProcessor1.功能特性BeanFactoryPostProcessor的执行是Spring Bean生命周期非常重要的一部分&#xff1b; BeanFactory级别的后置处理器&#xff0c;在Spring生命周期内&#xff0c;org.springframework.beans.factory.config.BeanFactoryPos…

【C语言】10题相关讲解+总结----有用的知识1

总结【C语言】10题&#xff0c;有兴趣的可以看看1.结构体与typedef联系2.结构体中涉及的操作符3.指针数组与数组指针4.数组首元素的作用5.喝汽水问题6.上三角矩阵判定7 矩阵相等判定8.VS调试技巧9.Debug与Release关系10.调整奇数偶数顺序11.有序序列合并1.结构体与typedef联系 …

开发互动直播应用很简单:声网 Android Demo保姆级运行教程

本文作者是来自声网开发者社区的用户“Xiaohua”。 前言 本人在参与《声网开发者漫游指南》期间&#xff0c;通过学习了解和学会跑通声网的实时互动Demo&#xff0c;但因为课程提供的demo是移动端和pc端的&#xff0c;很少接触过&#xff0c;所以只能花点时间学习一下才能运行…

如何屏蔽 iOS 软件自动更新,去除更新通知和标记

如何禁用 iPhone、iPad 软件自动更新。适用于 iOS、iPadOS 和 watchOS&#xff0c;即 iPhone、iPad 和 Apple Watch 通用。 请访问原文链接&#xff1a;https://sysin.org/blog/disable-ios-update/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

WebAssembly编译之(4)-WASM编译进阶(多文件、多接口)

引言 上一节我们讲到如何用Emscripten将一个C编译陈wasm&#xff0c;并导出可供Javascirpt调用的接口&#xff0c;以及C导出类的函数接口、导出类的封装对象等。然而&#xff0c;编译的方式比较玛法&#xff0c;有没办法能更友好一点实现wasm的编译呢 WASM 相关文档&#xff1a…

【自学Docker】Docker diff命令

Docker diff命令 大纲 docker diff命令教程 docker diff 命令用于比较一个 Docker容器 不同版本提交的文件差异。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker diff命令会列出 3 种容器内文件状态变化&#xff08;A - Add, D - Delete, C - Chang…

Java-基础-3.容器

一&#xff1a;为什么会出现容器&#xff1f; 在之前的学习中&#xff0c;我们学习了变量和常量。都是一个字符或者字符串&#xff0c;数字的情况。但是在实际的生产中&#xff0c;我们一次会接受到很多类型不同&#xff0c;个数不同的数据。所以&#xff0c;为了方便我们后续…

红杉:2022企业数字化年度指南

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年12月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图华为2021数字…

[基础语法] python语法之列表的基本操作

文章目录列表已发布列表的基本操作增删改查排序列表实例练习列表 已发布 python判断语句python循环语句python之列表list python 的数据格式主要有列表、字典、元组、集合。其中列表的使用最为广泛。 任何一种数据格式的使用都离不开增、删、改、查四个操作。列表除了这四个…

【Mysql第四期 运算符规则计算】

文章目录写在前面1.算数运算符2.比较运算符3.逻辑运算符4.位运算符5.运算符的优先级拓展&#xff1a;使用正则表达式查询写在前面 基本的运算符号在计算机编程领域都是相通的&#xff0c;会有自己的一些特定符号语言&#xff0c;就像是各地的普通话一样&#xff0c;尽管语音描…

剑指 Offer II 004只出现一次的数字

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;nums [0,1,0,…

Linux中Vi编辑器和Vim编辑器

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Docker常用命令总结

基础命令 1.启动docker systemctl start docker 2.关闭docker systemctl stop docker 3.设置docker为自启动 systemctl enable --now docker 4.重启docker systemctl restart docker 3.查看docker版本信息 docker version 4.查看docker详细信息 docker info Clien…