【Linux】详解Linux权限管理

news2024/12/24 2:50:33

文章目录

1.Shell命令以及运行原理

2.Linux权限的概念

2.1用户介绍

2.2用户切换指令 su

当前所处目录不变

当前所处目录改变

3.Linux 权限管理

3.1文件访问者的分类

3.1.1 拥有者

3.1.2 所属组

3.1.3 other

3.1.4 总结

3.2文件类型和访问权限

3.2.1文件类型

3.2.2 基本权限

3.3文件权限值的表示方法

3.3.1字符表示法

3.3.2数字表示法

3.3.3总结 

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

chmod指令 

chown指令

chgrp指令

umask 文件掩码

3.5目录的权限

概念 

粘滞位

4.总结


1.Shell命令以及运行原理

        Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如下图,蓝色箭头表示用户通过Shell与Linux Kernel 沟通,绿色箭头表示 Linux Kernel 通过Shell 返回给用户一些信息。

        对比windows GUI(图形用户界面),我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符,在Linux下就相当于cd指令)。
        shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

        那么shell存在的意义是什么呢?一方面,是为了帮忙进行命令行传递和返回结果,另一方面是保护操作系统。此外,shell在执行命令的时候,会创建子进程来执行。

2.Linux权限的概念

2.1用户介绍

        首先要清楚 Linux 下有两种用户:超级用户(root)、普通用户。(类似于 Windows 下的 管理员用户和普通用户。)

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

        可以根据下图来看,上层的红色方框是 root ,一来根据 [ ] 最左边看出,而来也可以根据命令提示符 “#” 看出;下层红色方框的用户是 leo ,是一个普通用户,使用 su leo 保持当前目录不变,用户换成leo,由于当前目录是属于 root 的,leo没有权限查看,所以用ls、ll 都会提示无权限,只有使用 cd ~ 进入leo自己的家目录,才可以操作。(后面会解释为什么leo没有权限,以及su leo,)

2.2用户切换指令 su

        如上图,有时候我们会涉及到切换用户的场景,此时就需要使用 su 指令。 

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

        例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root 用户的口令。

当前所处目录不变

        使用 su [用户名] 就可以实现当前目录不变,用户改变。比如下方,一开始的用户是root,并且处于root 的家目录,然后使用 su leo 指令,切换为 leo 用户,可以看出,当前所处的目录名是 root ,这是 root 用户的目录,使用 ls 指令,提示无权限查看。

        同样的,我现在是leo用户,直接输入 su 并回车,提示Password: ,这时输入root的密码即可,切换为root用户,可以发现目录是root的家目录,使用ls指令查看当前目录的内容,确实如此。

当前所处目录改变

        使用 su - [用户名] 可以实现:将目录改为 更换后的用户的家目录 ,并且用户改变。比如下方,一开始是root 用户,且所处目录是root 的家目录,然后使用 su - leo 切换为leo 用户,切换之后可以看到,目录也换为leo用户的家目录。

        然后使用 su - 切换成超级用户,看到,所处目录也自动切换成了root 的家目录。

3.Linux 权限管理

3.1文件访问者的分类

        文件访问者,是对于文件而言,谁来访问,具体可以分为 拥有者、所属组、其他:

文件和文件目录的拥有者: u---User
文件和文件目录的所有者所在的组的用户: g---Group
其它用户: o---Others 

3.1.1 拥有者

        顾名思义,就是文件的拥有者,所有者可以对文件进行任何操作,毕竟属于 “我” 的,“我” 想要删除就删除,想要修改就修改,随便我怎么操作。

3.1.2 所属组

        比如一个团队A,协作开发一个项目,团队老大 小a 建立了一个目录(即 小a 是这个目录的拥有者),里面包含项目的所有内容,那么,这个目录总不可能只有 小a 可以访问吧?毕竟每一个组员都要负责自己的那一部分。但是,如果 小a 把这个目录的权限打开,让其他人可以访问、修改,固然达到了组员可以进行操作的目的,但是——如果有另一个团队B,也在开发相同类型的项目,那么,这个团队里面的任何成员,只要找到 小a 建立的那个目录,他们就可以随便访问团队A的项目,这肯定不合适。要达到如下图的要求,只有团队A的成员可以访问该项目。

        所以,由于类似的需求,就产生了所属组的概念,一般而言,一个文件的所属组拥有对文件进行操作的权限。当然,所属组是由一个一个用户组成的,比如一个目录的所属组 里面的成员是 zhangsan、lisi、wnagwu,那么这三位用户里的任何一个,都可以对该目录进行的操作,他们三个对这个目录的权限是一样的,而其他人(除了root和这个目录的拥有者)对该目录只有 很有限的权限,或者没有任何权限。

3.1.3 other

        一个用户,既不是文件的拥有者,也不是文件所属组里的一员,那么对于这个文件而言,这个用户就是该文件的other,对应的权限一般比较少。

3.1.4 总结

        在这里是否会将文件访问者和用户搞混?其实很容易区分,用户就相当于我们生活中的一个一个人,而文件访问者就相当于一个个身份。一个人,在公司是员工,在家里是父亲/母亲,这两个身份不冲突。同样的,对于不同的文件而言,用户也可以是不同的访问者。

       如下,使用 ll 查看详细信息时,中间两个内容,第一个是代表该文件的拥有者,第二个内容是代表该文件的所属组。那么other如何判断呢?很简单,当一个用户想要操作某个文件时,这个用户既不是拥有者,也不是所属组,自然就是other了。

3.2文件类型和访问权限

3.2.1文件类型

        如下,使用 ll 指令查看当前目录下的内容的详细信息时,每一行的第一个字符,代表的就是该文件的类型

d:文件夹
-:普通文件


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

        值得注意的是,Linux 环境下,文件类型和文件后缀无关。 首先看到 try.c 里面是一个 C 语言的代码。然后用gcc 编译 ,得到 a.out 这个可执行文件。当文件后缀名是 .out ,可以执行后缀换成 .txt ,依然可以执行后缀换成 .c 依然可以执行,但是,执行 try.c ,却不可以。充分说明了,文件类型和文件后缀无关。

3.2.2 基本权限

        如下,既然文件访问者分为三种类型,那么每一种类型都应该有对应的权限。在每一个文件的详细信息中,除去开头的一个字符,后面九个字符,头三个是拥有者的权限,中间三个是所属组的权限,最后三个是other的权限。(这些符号具体什么意思下文会介绍。)

        文件的基本权限可以分为三个:读、写、执行,可以表示为 rwx  。

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

3.3文件权限值的表示方法

3.3.1字符表示法

        字符表示法顺序是固定的,第一个位置是读,第二个位置是写,第三个位置是执行,比如:rwx 表示读、写、执行权限均有;-wx表示有写、执行权限,没有读的权限;r-x 表示有读、执行权限,没有写的权限;---表示什么权限都没有。

3.3.2数字表示法

        数字表示法是八进制的。上文讲到,三个字符为一组并且位置固定,那么从二进制来看就把它这样子看:对应位置有该权限,就是1,没有则是0。比如:000 表示什么权限都没有;100表示有读的权限,没有其他权限;010表示有写的权限,其他权限没有;101表示有读和执行的权限,其他权限没有。

        上面是从二进制来看,细分到每一个权限的。那么把三个权限看作整体,就是八进制,比如 二进制是000,对应八进制0,没有任何权限; 二进制 100,对应八进制4,只有读权限; 二进制 101 ,对应八进制5,有读和执行权限;二进制 011,对应八进制3,有写和执行权限。

3.3.3总结 

        如下可以很好总结这里的内容:

权限二进制八进制描述
---0000没有任何权限
--x0011只有执行权限
-w-0102只有写入权限
-wx0113只有写入和执行权限
r--1004只有只读权限
r-x1015可读可执行权限
rw-1106可读可写权限
rwx1117可读可写可执行权限

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

chmod指令 

chmod

功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限

关于chmod命令的权限值的格式: 

① 用户表示符+/-=权限字符

+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

 ②三位8进制数字

        如下,三位八进制数字,第一位是拥有者的权限,第二位是所属组的权限,第三位是其他的权限,对着上面的权限和八进制表很容易看懂。

chown指令

        该指令是更改文件拥有者。


chown

功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名

        如下,当前用户是root,所以可以随意更改任意文件的拥有者。 

chgrp指令

        不难猜测,该指令是更改文件的所属组。

chgrp

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

umask 文件掩码

        新建文件夹默认权限=0666,新建目录默认权限=0777。但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask(掩码)的影响。假设默认权限是mask,则实际创建的出来的文件权限是:  mask & (~umask)。掩码也是八进制的,表示的也是权限,直白地说就是,文件的实际权限,等于默认权限 减去 掩码的权限

umask

功能:
查看或修改文件掩码

修改掩码
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002

        从下面也可以看出,普通用户lijun 新建一个文件夹try,和文件try.c,可以看出其权限发呢别是775和664,和默认权限777、666 相比,w权限都被去掉了。然后使用umask指令查看其掩码,确实是0002. 

         如何理解 mask & (~umask) 在这里给出个人的一些看法:

3.5目录的权限

概念 

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

        如下,首先查看当前目录下的详细信息。

        然后切换成 lijun 用户,对目录 leo 进行操作,从详细信息中可以看出,目录leo 的 other没有任何权限,且其拥有者和所属组都是用户 leo,那么用户 lijun 对于目录 leo 就是其他,所以第二个红色个方框里面的任何操作都没有权限。

        但是,对于目录 lijun,其拥有者的权限是rwx,并且其拥有者和所属组都是用户 lijun,当用户lijun对目录 lijun进行操作时,拥有任何权限,如第三个红色方框里面的内容。

        从下面可以看出,一开始对于目录 lijun,给other加上可读权限,切换成用户 leo,用户leo对于目录 lijun 是other,所以只能读,不能cd 进入目录 lijun。后来给目录 lijun 的other加上 可执行权限之后,用户 leo才可以cd 进入目录 lijun。

粘滞位

        如下图,现在有一个public 目录,其拥有者和所属组是root,other 有 rwx 的权限,假设这个目录是给各个用户来备份一些资料的。

        切换成leo用户,该用户对于public来说是other,进入public目录之后,创建一个leo.txt 和 leodic,这是属于leo 用户的目录和文件。并且向leo.txt 里面写入一句话。

        切换成lijun用户,可见该用户对于 leo.txt 是other,而leo.txt 的other 只具有读的权限,所以可以读,但是写入内容则没有权限。但是,最重要的来了,我是 lijun 用户,但是我却可以删除 leo.txt 这个属于 leo的文件。这明显不合理,为什么我会可以删除 leo.txt 呢?这是因为,对于public目录,我有写的权限,所以我可以删除public目录里面的内容。但是, leo.txt 是用户leo的,可能记载着他的一些日志或者重要的内容,我怎么可以直接就删掉呢?这不合适,所以对于这样的问题,Linux引入了粘滞位的概念。

        粘滞位的作用是:

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

        如下,先给public 这个目录添加粘滞位,然后切换为用户lijun ,进入 public,试图删除用户leo的目录和文件夹,发现不可以。这就是粘滞位。 

         注意,粘滞位只在other 所具有的权限里面,拥有着和所属组是不具备t 权限的。如下,即使给所有用户加上 t 权限,也只有other 得到了改变。

4.总结

        1.如下,使用 ll 指令查看的时候,详细信息解读如图。至于在权限后面的那个数字,对于目录而言,是指它的第一级子目录的个数;对于其他文件而言,表示指向它的链接文件的个数。

         2.虽然文件类型和文件后缀无关,但是,这是对于Linux 系统而言。对于Linux 里面的工具,比如 gcc 等,文件后缀和它有关。如下,我把try.c 名字改成 try.txt ,但是里面的内容不变,依然是一个C 语言的代码。但是,此时用gcc 编译,却发现不可以。

        3. 权限=人+文件属性。 文件属性=文件类型+文件权限。

         关于 Linux 的权限,暂时就写到这里,如有错误,欢迎指正!!

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

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

相关文章

基于 SE (2)-XYZ 约束的地面车辆视觉-轮速计定位与建图

摘要-本文关注的是地面车辆使用轮速计和单目视觉传感器的SLAM问题,为了改进基于视觉的地面车辆估计精度,研究人员利用了近似平面运动的约束,通常将其作为 SE (3)位姿的随机约束来实现,在本文中提出了一个更简单的算法,…

如何利用数字创新使您的企业脱颖而出

如何利用数字创新使您的企业脱颖而出 数字创新并非易事,但它会对您的企业内部和外部产生积极影响。 然而,数字化的方式如此之多,企业很难决定将注意力集中在哪里。 本文的目的是概述数字创新的战略方法。这种方法让您重新审视现在与未来的…

订单管理是客户关系管理的有效延伸,那么订单管理系统对于企业的作用有哪些呢?

订单管理是客户关系管理的有效延伸,能更好的把个性化,差异化服务有机的融入到客户管理中去,能推动经济效益和客户满意度的提升。与此同时,随着电商的发展与经济全球化的影响,不少企业的订单量都是暴增状态。海量订单数…

【读书笔记】高级FPGA设计之高速率结构设计

目录 写在前面 1. 概念介绍 2. 高速度结构设计 2.1 高流量 2.2 低延时 2.3 优时序 2.3.1 组合逻辑插寄存器 2.3.2 并行结构 2.3.3 展平逻辑结构 2.3.4 寄存器平衡 2.3.5 重新安排路径 3. 总结 写在前面 本博客为阅读书籍《高级FPGA设计》的部分读书笔记&#xff0c…

XXL-JOB核心源码解读及时间轮原理剖析

你好,今天我想和你分享一下XXL-JOB的核心实现。如果你是XXL-JOB的用户,那么你肯定思考过它的实现原理;如果你还未接触过这个产品,那么可以通过本文了解一下。 XXL-JOB的架构图(2.0版本)如下: 它…

易基因|ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究

易基因|ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2022年11月21日,北京大学基础医学院赵东宇研究员、美国休斯敦卫理公会研究所Min…

详解 Redis 中 big keys 发现和解决

在使用 Redis 时,可能会出现请求响应慢、网络卡顿、数据丢失的情况。排查问题的时候,发现是 big keys 的问题。 什么是 big keys 在 Redis 中,一个字符串类型最大可以达到 512MB,其他非字符串类型的集合类型(list、set、hash、z…

网络常见面试题

1.简述OSI七层模型主要功能 OSI---开放(协议公有)系统互联参考模型 解决数据传输不兼容性 IS0---国际标准化组织---定义->OSI 7层(基本功): 应用层:人机交互的接口,接收应用程序的数据…

【AI】Python 实现粒子群算法

粒子群算法 1. 题目介绍 粒子群算法,其全称为粒子群优化算法 (Particle Swarm Optimization, PSO) 。它是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的搜索算法。粒子群算法属于启发式算法也叫智能优化算法,其基本思想在于通过群体中个体之间的…

零入门容器云网络-6:基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信测试案例

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

ROS系列:第六章 机器人建模

文章目录六、机器人系统仿真1.概述仿真优势:仿真缺陷:2. URDF集成Rviz基本流程1.创建功能包,导入依赖2.编写 URDF 文件3.在 launch 文件中集成 URDF 与 Rviz4.在 Rviz 中显示机器人模型5.优化 rviz 启动3. URDF语法详解3.1 URDF语法详解01_robotrobot1.属性2.子标签…

Promethus实操部署ARM架构 麒麟系统

由于有个地市局的等保测评要求安装监控软件,实操安装普罗米修斯和Zabbix,原本想安装Zabbix在本地安装非常顺利,但是服务器是华为鹏鲲的、ARM架构,Zabbix的有些东西找不到ARM的,所以两个都尝试了下。本篇讲解下Promethu…

协同过滤推荐算法

协同过滤:利用集体智慧,借鉴相关人群的观点进行推荐。 过去兴趣相似的用户在未来的兴趣也会相似;相似的用户会产生相似的历史行为数据。 根据历史行为,产生相似用户,分析出推荐结果。 用一句大白话说,其实也…

Android请求应用权限

文章目录前言参考一、请求应用权限基本原则二、请求权限的流程(官网摘抄)三、请求权限编码1.允许系统管理权限请求代码2.自行管理权限请求代码总结前言 学习Android为什么需要动态申请危险权限 学会Android应用危险权限申请的方式 参考 Android官方文档…

8 种 Python 定时任务的解决方案

在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond 结合命令行实现,另外一种方式是直接使用Python。 最近我整理了一下 Python 定时任务的实现方式,内容较长,建议收藏后学习&a…

uni-app云开发(我直接访问后端)

uniCloud 是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。 熟悉的js的程序员,轻松搞定前后台整体业务。实现了前端完成前后端工作的可能 用法: 第一步新建uniCloud项目 点击文件 ——>新建—…

Hue编译安装使用

简介 由于大数据框架很多,为了解决某个问题,一般来说会用到多个框架,但是每个框架又都有自己的web UI监控界面,对应着不同的端口号。比如HDFS(9870)、YARN(8088)、MapReduce(19888)等。这个时候有一个统一的web UI界面去管理各个大…

高斯混合模型下的变分推断

大概从下面几个部分学习: 1.EM算法 人人都懂EM算法 - 知乎 (zhihu.com) 18分钟理解EM算法 - 知乎 (zhihu.com) 变分贝叶斯深度学习综述 - 知乎 (zhihu.com) 【未看完】 EM算法存在的意义是什么? - 知乎 (zhihu.com)【八种境界】 EM 算法具备收敛性…

java计算机毕业设计ssm体育赛事管理系统App2qrcr(附源码、数据库)

java计算机毕业设计ssm体育赛事管理系统App2qrcr(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#x…

[附源码]Python计算机毕业设计Django酒店物联网平台系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…