Linux:Linux权限解析
一、Linux下的用户分类
在Linux下,有两种用户,一种是超级用户,一种是普通用户
超级用户:可以再linux系统下做任何事情,不受权限限制(制定规则,但不需要遵守规则)
普通用户:在linux下做有限的事情。(必须遵守相应的规则)
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
1、用户的切换方式
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。
2、Linux中的所有用户都要有自己的密码,无论是root还是普通用户,并且root的密码和普通用户的密码尽量不要一样!!
3、有些事情只有root可以进行,比如说用yum命令安装软件,但是如果我们普通用户想要去使用root才能使用的命令,那么就需要用sudo command暂时对一条命令进行短暂提权。
4、既然我普通用户可以用sudo对命令按时提权,那么我不就可以相当于root吗??其实这是不合理的,目前我们直接adduser新建的用户,并不可以直接进行sudo,因为系统不信任你,除非未来将普通用户,添加到系统的信任白名单里,才可以用sudo对命令进行提权。
二、Linux权限的概念
什么叫做权限呢??通俗一点说就是一件事情是否允许你做!
2.1 文件访问者的分类(人的不同身份)
文件和文件目录的所有者:u---User(拥有者)
文件和文件目录的所有者所在的组的用户:g---Group(所属组)
其它用户:o---Others (其他人)
思考:
1、 这三个分类和用户有什么关系???
答:用户相当于是人,而拥有者、所属组、其他人相当于是他们的不同身份,所以任何一个用户都可以是拥有者、所属组或者是其他人。
2、怎么理解拥有者呢??
答:拥有者就相当于是创建该文件的人,对文件具有相关的操作权限。
3、怎么理解其他人呢??
答:举个例子,假设张三和李四一起进到腾讯,你们进到了不同的部门,但是由于资金短缺,两个部门共用一台电脑,而腾讯要开发一款叫做王者荣耀的游戏,让你们两个部门都去开发这个游戏,哪个部门开发得好就用谁的(这其实是“赛马论”,虽然大部分的公司都不会让两个部门一起干一件事,因为有点资源浪费,但是在有些公司是会有这种情况的,通过这种方式来给员工们建立一个竞争的环境,激发他们的工作动力,同时不同部门之间也能互相借鉴经验,一起进步。)。所以张三和李四在这条条件下就形成了竞争关系,而两人又在一个寝室,平时李四经常会去借鉴张三的代码,所以有一天当张三写了一段非常好的代码之后(张三属于拥有者),为了不让李四抄袭,就可以对设置其他人的权限(这时李四属于其他人)。
4、为什么会需要所属组呢??
答:还是刚刚的例子,张三通过设置“其他人”权限,让李四无法抄袭自己的代码,但是有一天他的部门组长王五想看看他写的代码,这个时候张三发现如果放开权限的话,这样李四也能看到自己的代码,所以这个时候就需要“所属组”(王五属于所属组),同时所属组的存在也有利于同个部门之间的成员可以看到相互之间写的代码。
2.2 文件类型和访问权限(事物的不同属性)
2.2.1 文件类型
d:文件夹
-:普通文件(文本、可执行文件、库)
b:块设备文件(例如硬盘、光驱等磁盘文件) ——>所在路径:/dev/vda1
p:管道文件(用来进行通信) ——> 用mkfifo可以创建管道文件
c:字符设备文件(例如键盘、显示器等串口设备)——>所在路径:/dev/tty(tty是终端的意思)
l:软链接(类似Windows的快捷方式)
s:套接口文件
2.2.2 Linux后缀无意义但需要
Linux系统中,文件名后缀没有没有直接的意义。
当我们用用gcc文件编译.c文件之后,无论这个可执行程序改成什么名字,都可以正常执行!!
但是不代表Linux系统上运行的其他软件不需要后缀!!比如说gcc是一款编译器、软件,他编译只认.c后缀的文件,如果是其他后缀,他不认。
所以Linux中的文件是否需要使用后缀,具体看用户的需求!!
2.2.3 文件基本权限
i.可读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.可写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.可执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
所以2-10位,每三个为一组,分别代表拥有者、所属组、其他人的权限
而每组的对应的位置含义是什么我们是知道的——每个位置对应的是r/w/x或者是-
所以每个位置都有只有是或者否,对应其指定的文件!!因此我们可以用1表示是,0表示否,每组都可以用一个八进制数字来表示。
2.2.4 文件权限的表示方法
a、字符表示方法
b、8进制数值的表示方法
2.2.5 文件访问权限的相关设置方法
1、chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
① 用户表示符+/-=权限字符 (在原有的基础上进行权限的增删查改)
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:所属组
o:其它用户
a:所有用户
②三位8进制数字 (直接对权限进行设置 每个数字分别对应拥有者、所属组、其他人)
2、chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
注意事项:
我们要把文件给别人时,有两种方法:要么是别人同意,要么是sudo强制提权,而当文件的拥有者改变后,我们只能执行所属组的权限,而不能执行拥有者的权限!且无法再修改权限!!
3、chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
2.2.6 没有权限会怎么样
但是要注意的是,root不受权限约束!!可以随意操作!
2.3 起始权限问题——文件掩码
为什么普通文件是664,而目录文件是775呢??
答:其实普通文件的默认起始权限是666,而目录文件的其实权限是777,而影响他们的其实是文件掩码!!
命令:umask
功能:查看或修改文件掩码(凡是在umask中出现的文件,不会在最终的文件权限中出现!)
格式:umask 权限值(不带权限值就是查看,带的话就是设置)
看上去好像是默认权限减掉起始权限,但其实并不是这样的,因为我们要考虑这个权限本身就不存在的情况!! 所以无论原来的权限是0还是1,当umask为1时,都要变成0(将某位设置为0,我们要想到&)所以有1则为0而umask为0时,就不能影响原来的权限(如果用&,要想不改变,就得希望该位置是0,其他位置是1,所以可以想到~)
最终权限=起始权限&(~umask)
超级用户默认掩码值为0022,普通用户默认为0002。
2.4 目录权限
r:是否允许我们查看指定目录下的文件内容(ls)
w:是否允许我们在当前目录下进行创建(mkdir、touch)、更改(mv)、删除(rm)
x:可否在目录下执行命令,是否允许用户进入(cd)对应的目录。
注意事项:如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r读权限,而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
2.5 共享文件——粘滞位
1、普通用户自己的家目录权限是700,所以在家目录创建的文件,别人都看不到!!
2、所以如果当我们需要一些共享文件让所有用户共享时,我们显然不能将该目录建在家目录下!(要建在根目录下)
但是试想一下这样的场景,你作为共享文件的拥有者,你可以设置权限,当你给其他人设置了不可读不可写的权限,其他人怀恨在心,就把你的文件给删了,这显然是不合理的!!!
3、一个文件能否被删除,与文件本身无关,而与存储该文件的目录有关
但是如果我们不想让别人删除,我们就需要去掉目录的w权限,但是如果这样的话,共享的意义就不存在了!!!因此我们就有了一个新方案叫做粘滞位!
4、粘滞位:给目录进行设置(chmod +t 文件),一般是共享目录,大家可以在目录进行各自文件的增删查改,只允许文件的拥有者或者是root去删除这个文件,其他人一概不允许,t是一种特殊的x权限!!!
5、其实在根目录下就存在一个tmp目录是带粘滞位的,他相当于就是系统自带的共享文件,我们可以在里面去创建共享文件,而不需要每次创建共享文件都在根目录!!
2.6 易错点:每个角色只能执行一种身份的权限!!
假设我是拥有者,我也是所属组,而拥有者的权限是---,所属者的权限是rwx,但实际上我只能以拥有者的身份去执行我的权限!
2.7 file指令
功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容
相关文章:

Linux:Linux权限解析
一、Linux下的用户分类 在Linux下,有两种用户,一种是超级用户,一种是普通用户 超级用户:可以再linux系统下做任何事情,不受权限限制(制定规则,但不需要遵守规则) 普通用户࿱…...

Spring面试篇章——IOC
IOC概念和原理 IOC概念 IOC就是控制反射,把对象创建和对象之间的调用过程,交给Spring进行管理使用IOC的目的:降低耦合度 IOC底层原理 xml解析、工厂模式、反射 图解: 原始模式 耦合度太高了,即当dao改了…...

适合制造业的项目管理软件都有哪些?
项目管理软件涉及进度、预算成本、资源、开发、流程、质量、风险、工时、知识文档、商务等各个方面,是企业项目管理领域的重要辅助工具,能够帮助组织提高项目管理水平与质量,确保项目顺利进行。 一、 奥博思 PowerProject 项目管理系统 Pow…...
微应用(Micro-Applications)、微前端(Micro Frontend)、Qiankun 框架之间的区别和联系
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo :联系我们:VX :tja6288 / EMAIL: 347969164@qq.com 文章目录 微应用(Micro-Applications)、微…...

String的底层构造
1.String类对象的构造(后面有每一个接口的实现) #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace bit {class string{public:typedef char* iterator;typedef const…...
Binder机制的原理
Binder机制是Android系统中用于进程间通信(IPC)的核心机制,它基于C/S(客户端-服务端)模型,允许不同进程间进行高效的通信和数据交换。以下是对Binder机制原理的详细解析: 1. Binder架构 Binde…...
JavaScript输出数据的方法?
在JavaScript中,输出数据有以下几种方法: 使用console.log()函数:使用console.log()函数可以将数据输出到浏览器的控制台,例如: console.log("Hello, World!");使用alert()函数:使用alert()函数…...
Redis学习笔记——第19章 事务
第19章 事务 19.1 事务的实现 19.1.1 事务开始 使用multi命令开启一个事务 通过修改客户端的flags字段为REDIS_MULTI 19.1.2 命令入队 当开启事务之后,exec、discard、watch、multi命令立即执行,而其他命令会放入一个队列中,并返回Queue…...

元太电磁膜SUDE-10S19MI-01X驱动适配
屏规格书: dts配置: 首先要确保CONFIG_I2C_HID宏打开,i2c-hid-core.c 文件才能编译进去代码。规格书vendor product 分别为0x2d1f 和0x0165 来区别,不至于影响到整体的hid其他设备。 i2c-hid-dev10 { compatible "hid-…...

C#数据类型 全局变量 类型转换方法(汇总)
1、C#和S7-1200PLC S7.NET通信 C#和S7-1200PLC S7.NET通信-CSDN博客文章浏览阅读98次。一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先…...

HCIP重修总笔记(中)
第八节 BGP基础 一、BGP产生背景 BGPBorder Gateway Protocol,边界网关协议)是一种用于自治系统间的动态路出协议,是一种外部网关协议。 自治系统AS:一组同一个管理机构进行管理,对外呈现统一选路策略的路由器的集合。 自治系统编号: …...

图片搜索网站,有大量高清图片,避免版权纠纷
一、简介 1、一个图片搜索网站,所有图片均遵循CC0协议,用户可以免费用于商业用途而无需标注来源。网站上有大量高清图片,基本可以满足用户的各种需求,同时避免了法律风险。提供强大的筛选功能,用户可以按图片方向、尺寸…...
设计学习笔记8:在设计模式中,状态模式和策略模式有什么区别,它们各自适用于什么场景?
基本介绍 状态模式(State Pattern)和策略模式(Strategy Pattern)都是行为型设计模式,它们用于处理不同的情景和需求,以下是它们的主要区别和适用场景: 状态模式(State Pattern&…...

Android 10.0 系统默认蓝牙打开状态栏显示蓝牙图标功能实现
1.前言 在10.0的系统rom定制化开发过程中,在默认系统中,打开蓝牙开关的时候不会状态栏不会显示蓝牙图标,而只有 蓝牙连接成功后会显示蓝牙图标,客户开发需要要求在蓝牙打开的时候在状态栏就显示蓝牙图标,接下来分析下 相关的状态栏图标显示流程,然后实现相关功能 2.系统…...
在git中如何忽略.vscode目录?
在Git中,如果你想忽略某个特定的文件或目录(比如.vscode目录),你可以通过以下步骤来实现: 创建或编辑.gitignore文件 在项目的根目录下,如果还没有.gitignore文件,你需要创建一个。如果已经有了…...

分布式系统
分布式系统是一种由多个相互连接的计算机组成的系统,这些计算机通过网络互相通信并协调行动来完成共同的任务。在分布式系统中,没有单一的物理实体可以控制整个系统;相反,各个节点(即计算机)独立运行&#…...

【Material-UI】Autocomplete 组件中的事件处理(Events)详解
文章目录 一、事件处理概述二、自定义按键行为代码详解 三、其他常见事件1. onChange 事件2. onInputChange 事件3. onFocus 和 onBlur 事件 四、实用场景1. 自定义提交行为2. 实现快捷键功能3. 动态提示 五、总结 在 Web 开发中,事件处理是实现用户交互的重要一环。…...

【51单片机仿真】基于51单片机设计的钟表定时闹钟系统仿真源码设计文档演示视频——完整资料下载
演示视频 设计内容 (1)使用 DS1302 结合字符型 LCD12864 显示器设计一个简易的定时闹钟 LCD 时钟。程序执行后 LCD 显示“00:00:00” (2)K1—设置现在的时间,年闪烁,再按 K1 键月闪…...

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)
软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的基础定位方式的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下剩下部分的基…...
[Day 44] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
生成对抗网络(Generative Adversarial Networks,GANs)是一种由Ian Goodfellow等人在2014年提出的深度学习模型,广泛用于图像生成、图像超分辨率、图像修复等领域。GAN由一个生成器(Generator)和一个判别器&…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...