Linux中的权限

目录

shell的理解

用户概念

su指令

[sudo 命令](#sudo 命令)

理解权限

权限管理

命令行理解

缺省权限

umask

文件权限

chown指令

chgrp指令

chmod指令

三个指令总结

理解文件可执行权限

目录权限

多用户文件协作


shell的理解

Linux严格来说是一个操作系统,我们称之为 "核心(kernel)",但我们⼀般用户,不能直接使用kernel。⽽是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。

从技术⻆度,Shell的最简单定义:命令⾏解释器(commandInterpreter)。

主要包含:

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

对⽐windowsGUI:我们操作windows不是直接操作windows内核,⽽是通过图形接⼝,点击,从 ⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤程序)。

shell 对于Linux:主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过shell解析给⽤⼾。

图理解:

注意:

在shell中,有一个命令行解释器文件(/bin/bash),它的内部是一个死循环,不断得给内核解释我们输入的命令。

怎么理解bash和shell的关系呢?

外壳程序shell往往以进程的形式呈现的,而这个进程不能挂掉,一旦挂掉,其他命令就解释不了了,就需要重新登陆,所以往往会创建子进程来解释命令,就算子进程挂掉了,也问题不大!

这个问题到此为止,我们讲到进程再继续深究!

用户概念

在linux中,有两种用户**:超级用户(root),普通用户**。

这个和windows差不多,windows有管理者(admin)和普通用户。

超级用户权限高,不受管控;普通用户权限底,受管控;

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

su指令

我们可以使用这个命令,使得用户之间可以互相转换!

操作:

sudo 命令

语法:sudo 指令

功能:获得短暂提权的权利

例子:

比如你需要安装一个软件,需要root权限。

只有在sudo指令的白名单里的用户,才能使用sudo命令!

解决办法:

我们只需要将自己需要使用的普通用户配置到sudo白名单里就行!

文件目录:/etc/sudoers

注意:配置时,需要超级用户才能配置成功!

这样我们就可以使用sudo 命令!

理解权限

我们不难理解,权限的本质就是什么事情能干,什么事不能干!

那为什么要有权限?

因为需要控制用户的行为!不能让用户为所欲为,否则不小把系统文件删除了,系统还怎么运作。

我们来看一个例子:

解释:

这个文件运行不了,是因为它没有可执行的权限,它只是一个文本文件!

那我们平常敲的指令,能执行是因为它们就是一个可执行文件!有可执行的权限!

所以说:权限==用户的权限+文件的权限

而Linux对于文件的问题,无非就是这三种:读,写,可执行。

我们现在也就围绕这三个来更深入理解在文件方面的权限。

权限管理

⽂件访问者的分类(用户)

  • ⽂件和⽂件⽬录的所有者:u---User
  • ⽂件和⽂件⽬录的所有者所在的组的⽤⼾:g---Group
  • 其它⽤⼾:o---Others

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

⽂件类型:

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

基本权限:

  • 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限。
  • 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限。
  • 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权限。

命令行理解

看图理解:

缺省权限

我们可以用三个八进制数代表读,写,可执行权限:

对于普通文件来讲:起始权限 666,默认不带可执行。

对于目录来讲起始权限 777,默认都带。

我们来看一下这个。

umask

系统有一个权限掩码的概念:最终权限=起始权限&(~umask)

但凡是出现在umask权限里面,都不应该出现在最终权限里!

解释:

可以修改:

为什么要有umask?

  • 默认权限,由OS自主决定,无法在创建前修改,而umask系统可以配置,是一种灵活满足需求的表现。
  • 特殊情况下,配置umask,可控制文件的默认权限,让我们的代码都是可控的。

文件权限

chown指令

语法:chown [参数] ⽤⼾名 ⽂件名

功能:修改⽂件的拥有者

常⽤选项:-R递归修改⽂件或⽬录的所属组

注意:只有超级用户才能修改文件的拥有者,哪怕是自己创建的文件都不行!

例子:

目录修改:

chgrp指令

语法:chgrp[参数] ⽤⼾组名 ⽂件名

功能:修改⽂件或⽬录的所属组

常⽤选项:-R递归修改⽂件或⽬录的所属组

注意:普通用户可以将文件的所属组更改为自己所属的任何组。但不能修改到别的组,root才能!

例子:

chmod指令

语法:chmod [参数] 权限 ⽂件名

功能:设置⽂件的访问权限

常⽤选项:

  • -R:递归修改⽬录⽂件的权限

说明:只有⽂件的拥有者和root才可以改变⽂件的权限

chmod命令权限值的格式:

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

用户符号:

  • u:拥有者
  • g:所属组
  • o:其它⽤⼾
  • a:所有⽤⼾

例子:

也可以利用缺省权限来修改文件的权限:

三个指令总结

  1. 普通用户不能将自己的文件给别人(不能修改拥有者),也就是不能将自己的文件随便给别人

2.普通用户不能将自己的文件的所属组添加给别人,但是可以添加给自己!也就是说不能将自己文件随便共享给别人

3文件拥有者才能修改自己的文件(root也能),所属组都不行!

4.root可以干任何事情,上面三点都可以干!

注意:

确定权限信息时,系统会确定用户是谁?是拥有者,所属组,还是other。

在centos下,系统只会确定一次,顺序是拥有者,所属组,other。

例子:

理解文件可执行权限

目录权限

  • r :具有浏览该⽬录信息的权限
  • w:具有删除,移动,新建⽬录内⽂件的权限
  • x:具有进⼊⽬录的权 限

看例子:

那如果两多个需要进行文件之间的协作呢?我们谈一谈!

多用户文件协作

我们先来理解Linux中,用户是怎么隔离的!

任何用户都无法进入其他用户的家目录!root除外!这就已经隔离了!

所以我们需要怎么进行多用户文件协作呢?

我们要的功能是:所有人都能在这个目录下新建,删除等操作,但是不能删除!

我们在系统层建立一个目录(不能放在私人用户目录下),我们再加上 t 权限 :粘滞位。

粘滞位作用:

当⼀个⽬录被设置为"粘滞位"(⽤chmod+t),则该⽬录下的⽂件只能由:

  • 超级管理员删除
  • 该⽬录的所有者删除
  • 该⽂件的所有者删除

而系统里面专门有一个目录来应对这情况:/tmp目录

好了,我们下期见!

相关推荐
大小科圣21 分钟前
nginx实现tomcat反向代理
服务器·nginx·tomcat
十年一梦实验室1 小时前
C++ 中的 RTTI(Run-Time Type Information,运行时类型识别)
开发语言·c++
纽约恋情1 小时前
C++——STL 常用的排序算法
开发语言·c++·排序算法
放羊郎1 小时前
Ubuntu从源代码编译安装QT
linux·qt·ubuntu
杰克崔1 小时前
关于stac和clac的进一步细节及EFLAGS
linux·运维·服务器
千里码aicood1 小时前
【2025】基于python+django的驾校招生培训管理系统(源码、万字文档、图文修改、调试答疑)
开发语言·python·django
小李苦学C++1 小时前
C++模板特化与偏特化
开发语言·c++
小王努力学编程2 小时前
元音辅音字符串计数leetcode3305,3306
开发语言·c++·学习·算法·leetcode
佚明zj2 小时前
【C++】如何高效掌握UDP数据包解析
开发语言·c++·udp
笑口常开xpr2 小时前
C 语 言 --- 二 维 数 组 的 应 用
c语言·开发语言