当前位置: 首页 > news >正文

Linux权限解析

目录

shell命令以及运行原理

Linux权限概念

切换用户

Linux权限管理

文件访问者分类

文件类型和访问权限

Linux下的文件后缀

文件权限值的表示方法

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

文件掩码

目录权限

粘滞位

目录权限总结

 关于权限的总结


shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为核心(kernel,但我们一般用户,不能直接使用kernel
而是通过 kernel 外壳 程序,也就是所谓的 shell ,来与 kernel 沟通。如何理解?为什么不能直接使用 kernel
从技术角度, Shell 的最简单定义:命令行解释器( command Interpreter )主要包含:
将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者
对比 windows GUI ,我们操作 windows 不是直接操作 windows 内核,而是通过 图形接口 ,点击从而完成我们的操作( 比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序 )。
shell 对于 Linux ,有相同的作用,主要是对我们的指令进行解析, 解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
帮助理解:如果说你是一个闷骚且害羞的程序员,那 shell 就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM 小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash

 

简而言之,外壳就是我们与内核进行交互的媒介;就好像我们通过代码语言和计算机进行交互;

Linux权限概念

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

1.超级用户可以随意的操作系统,可以制造规则,但可以不遵守规则;
2.普通用户需要严格的遵守使用规则,有些指令是没有权限使用的,比如"yum"命令安装软件,但是必要时普通用户可以向超级用户申请对应对的权限;
3.Linux下的每个用户都要有自己的密码,尽量不要重复;

切换用户

命令 su [ 用户名 ]
功能 :切换用户。
例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root( root 可以省略),此时系统会提示输入 root 用户的口令
注意:超级用户切换到普通用户是不需要密码的,但是普通用户切换到超级用户需要输入超级用户的密码;

Linux权限管理

文件访问者分类

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

这里的权限大小关系是:拥有者>所属组>其他用户;我们使用的普通用户属于其他用户.而拥有者和所属组是同伙,而其他用户是另一伙;

拥有者和其他用户都能够理解,但是为什么会出现所属组分类呢?

在我们的工作中呢,为了提高工作的效率,通常是以小组为单位进行的,所以小组内的成员都是自己人,也需要对系统进行操作,但是不能算是其他人,所以出现了权限大小在拥有者和其他人之间的角色;

这样就既可以做到防止其他小组的抄袭,又可以让自己小组的成员看到内容;这样的权限分类有利于公司各个小组之间相互竞争,又可以维持秩序;

文件类型和访问权限

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

Linux下的文件后缀

在Linux下的文件的后缀是没有意义的,但是是需要的,什么意思呢?

将文件编译好之后,无论将a.out改成什么名字,都可以正常执行;

但并不是所有的文件都可以像这样无视后缀的,就比如使用zip打包解压和使用unzip解包,他们只能识别后缀为zip的文件;其他后缀的文件是无法识别的;总之,具体情况具体分析即可;

文件权限值的表示方法

1.字符表示法

2.八进制表示法

因为一位角色的权限占3位,每位有和没有,可以使用0和1表示;所以最大的权限也就是111=7;因此我们可以将其转换为八进制数来表示权限;

i. 读( r/4 ): Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii. 写( w/2 ): Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii. 执行( x/1 ): execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—” 表示不具有该项权限


 

 具体使用哪种方法,看使用者的习惯和喜好;

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

1.chmod
功能: 设置文件的访问权限
格式: chmod [ 参数 ] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和 root 才可以改变文件的权限,
如果是普通用户,可以通过提权进行修改权限;

用户修改文件权限的格式

① 用户表示符 +/-= 权限字符
+: 向权限范围增加权限代号所表示的权限
-: 向权限范围取消权限代号所表示的权限
=: 向权限范围赋予权限代号所表示的权限
用户符号:  
u :拥有者
g :拥有者同组用
o :其它用户
a :所有用户
例子:
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt

 ②三位8进制数字

2.chown 

功能 :修改文件的拥有者
格式 chown [ 参数 ] 用户名 文件名  
直接使用指令chown修改拥有者给别人是不被允许的,必要时得使用sudo强制提权转移拥有者身份,转移身份之后我们就不在是拥有者了(通常会变成是所属组),也就无法在使用chown了;

 3.chgrp

功能 :修改文件或目录的所属组
格式 chgrp [ 参数 ] 用户组名 文件名
常用选项 -R 递归修改文件或目录的所属组;

文件掩码

umask
功能
查看或修改文件掩码(umask是查看掩码,umask + 掩码是设置新的掩码);
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。
假设默认权限是
mask ,则实际创建的出来的文件权限是 : mask & (~umask)
格式 umask 权限值
说明 :将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
超级用户默认掩码值为0022,普通用户默认为0002。
为什么我们普通用户的目录是775,普通文件是664?
对于目录:(777)111 111 111 &( 111 111 101)=111 111 101=775;
对于普通文件:(666) 110 110 110 & (111 111 101 )=110 110 100=664;

目录权限

r(可读):是否可以看到目录下的所有文件(也就是是否可以使用指令ls);
w(可写):是否可以对当前目录进行新建(mkdir,touch)/修改(mv,mano...)/删除(rm)等操作;
x(可执行):这个权限很重要,如果没有这个权限那么我们甚至都进不去目录中,更不用说看见目录下的文件了;

 如果我们拥有一个目录的写权限,那么我们是可以对目录下的文件进行删除的;那么问题来了;
其他人有写的权限不也是可以把我们新建的文件删除吗;那这不就乱套了吗?

验证:

[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld 
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit 
logout

为了解决这个问题Linux下引入了粘滞位,

粘滞位

1.我们在自己家的目录下创建的新文件一般权限都是700(drwx------),别人是看不到的,所以如果我们想要创建一个共享文件那就需要在根目录下创建;
2.在根目录下创建的共享文件肯定对其他人要将权限放开的,但是这时候如果有人恶意删除共享文件,就会造成很大的损失,所以粘滞位的作用就是防止用户删除文件;只有目录的拥有者和超级用户才可以删除该文件;
3.一个文件是否可以被删除关键不在文件本身,关键在于文件的目录,也就是他的上司;如果目录对用户有写权限,那么就可以删除该目录下的文件;
4.在根目录下就有一个共享文件tmp;我们可以在这里里面进行文件的增删改查,但是不可以删除这个目录;

功能:防止其他用户删除文件,确保只有文件拥有者和超级用户才有删除的权利;
命令:chmod +t 文件 ;
t是一种特殊的x权限,一般用于共享文件,

目录权限总结

当一个目录被设置为 " 粘滞位 "( chmod +t), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

 关于权限的总结

目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目 , 即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限;所以ls命令也就无效了;
注意,每次只能确定一个身份,如果我已经是拥有者了,即便所属组也是我,仍然无法使用所属组的权限;

相关文章:

  • 自学网络安全(黑客技术)2024年 90天学习计划
  • 微信小程序加载H5页面及与H5页面通信的实战教程
  • 多旋翼无人机“仿鸟类”精确拦截飞行目标,助力低空安全
  • 鹏哥C语言55-57---二维数组+数组越界+数组传参(冒泡排序)
  • 婚恋交友小程序的设计思路与用户体验优化
  • JavaScript 从事件处理入手的优化
  • 《征服数据结构》哈夫曼树(Huffman Tree)
  • 鸿蒙开发(NEXT/API 12)【硬件(外设扩展驱动开发)】驱动开发服务
  • 【百日算法计划】:每日一题,见证成长(021)
  • IP地址如何与网络虚拟化技术融合?
  • AQS为什么采用双向链表
  • Linux 块设备开发学习
  • 8个前端小程序开发框架的介绍
  • 【JAVA开源】基于Vue和SpringBoot的足球俱乐部管理后台
  • 记一次停车场后台管理系统漏洞挖掘
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • CEF与代理
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js面向对象
  • leetcode-27. Remove Element
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • rabbitmq延迟消息示例
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue2.x学习三:事件处理生命周期钩子
  • Webpack入门之遇到的那些坑,系列示例Demo
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 读懂package.json -- 依赖管理
  • 高性能JavaScript阅读简记(三)
  • 理解在java “”i=i++;”所发生的事情
  • 数据仓库的几种建模方法
  • 一个完整Java Web项目背后的密码
  • 赢得Docker挑战最佳实践
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (1)Android开发优化---------UI优化
  • (2)Java 简介
  • (Forward) Music Player: From UI Proposal to Code
  • (备份) esp32 GPIO
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十三)Maven插件解析运行机制
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)甲方乙方——赵民谈找工作
  • (转)树状数组
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET CLR基本术语
  • .net 受管制代码
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET建议使用的大小写命名原则
  • .net网站发布-允许更新此预编译站点
  • /var/log/cvslog 太大
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析