Linux当中的权限问题

news2024/9/28 5:25:27

文章目录

  • 一、Linux权限的概念
    • 1. Linux中的用户分类
    • 2. 不同用户之间的转换
      • (1) 普通用户->root
      • (2) root->普通用户
      • (3) 普通用户->普通用户
  • 二、Linux权限管理
    • 1. 文件访问者的分类
    • 2. 文件类型和访问权限
      • (1)文件后缀在Linux中的作用
      • (2)file指令
    • 4. 文件权限值的表示方法
    • 5. 文件访问权限的相关设置方法
      • (1) chmod
      • (2) chown
      • (3) chgrp
  • 三、目录的权限
    • 1. 基本概念
    • 2. 默认权限与权限掩码
  • 四、粘滞位


一、Linux权限的概念

1. Linux中的用户分类

Linux下有两种用户:超级用户(root)普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制,只能有一个。
  • 普通用户:在linux下做有限的事情,可以有多个。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

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

2. 不同用户之间的转换

(1) 普通用户->root

从普通用户转换成root用户有两种方法,如下:

  1. su——同一个bash下进行转换
  2. su -——使用root用户重新登陆bash

下图是su切换为root,输入密码后就可以切换到root用户下。
在这里插入图片描述
想要从root用户下,退回原来的用户只需要按Ctrl+D,就可以了,如下图所示。
在这里插入图片描述
下图是su -切换为root用户。
在这里插入图片描述

su与su -的区别

  1. 工作环境切换

    • su:默认情况下,su命令仅切换用户身份,而不切换工作环境。这意味着,虽然用户身份已经改变,但当前的工作目录、环境变量(如$PATH)等仍然保持原样,这可能会导致一些命令因为找不到正确的路径而无法执行。
    • su -su -命令在切换用户身份的同时,还会切换工作环境。这包括切换到目标用户的家目录,并加载该用户的配置文件(如.bash_profile.bashrc等),从而设置相应的环境变量。这样,用户就可以在一个与目标用户完全相同的工作环境中执行命令。
  2. Shell类型

    • 使用su命令时,如果未明确指定shell类型,则通常会继承当前用户的shell环境,这通常是一个non-login shell。
    • 使用su -命令时,会启动一个login shell,这意味着会读取用户的登录配置文件(如.bash_profile.profile等),从而设置完整的工作环境。
  3. 使用场景

    • 当只需要以另一个用户的身份执行单个命令时,可以使用su命令后跟-c选项来指定该命令。
    • 当需要以另一个用户的身份进行长时间的工作或需要完整的工作环境时,应使用su -命令。

假设有两个用户:普通用户user1和root用户。

  • 使用su命令切换到root用户后,当前工作目录仍然是qhz的家目录,且环境变量可能与root用户的不一致。

在这里插入图片描述

  • 使用su -命令切换到root用户后,当前工作目录会切换到root用户的家目录(通常是/root),且环境变量也会被更新为root用户的设置。

在这里插入图片描述

(2) root->普通用户

  1. 从root用户下切换到普通用户,如果是上面内中使用su或者su -来切换成root用户的,只需要按Ctrl+D就可以返回原来的普通用户。

在这里插入图片描述

  1. 也可以直接使用su 用户名的方式来切换成任意用户,且不需要输入密码。

在这里插入图片描述

(3) 普通用户->普通用户

两个普通用户之间是不可以直接切换的,但是我们可以通过root用户做一个跳板,A用户先切换到root用户,root用户再切换到B用户。
在这里插入图片描述

二、Linux权限管理

1. 文件访问者的分类

对于一个创建出来的文件,总会被别人访问,在Linux中,把文件的访问者分为了三类:拥有者,所属组,other

  • 文件和文件目录的所有者:u—User,就是该文件是他的
  • 文件和文件目录的所有者所在的组的用户:g—Group(不多说)相当于一个团队。
  • 其它用户:o—Others (外国人)就是外界的访问者

对于所属组来说,就相当于如果你们要团队一起做某个项目,但是你创建出来的文件,只允许拥有者自己访问,即使是一个团队的也无法访问,那显然是不合理的,所以就可以把团队成员也加到所属组里来,这样在所属组里的成员就都能访问该文件了。
在这里插入图片描述
我们的云服务器大部分都是我们自己在用,所以我们既是拥有者也是所属组, 当我们一某一个身份去访问某一个文件时,每一个文件都会有拥有者和所属组, 会自动匹配是拥有者和所属组,若都不是那么就是other,Linux并不会记录other是谁。

2. 文件类型和访问权限

在Linux中主要有以下几种文件类型,其中大部分文件都是文件夹类型和普通文件。

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

我们可以直接使用ll命令去查看以下详细信息:
可以发现不是d类型的就是-类型的。

在这里插入图片描述
我们现阶段所碰到的大多数都是-或者d,学习到后面可能会碰到一些其他的文件类型,这里我们可以去查看以下其它类型的文件:

ls -l /dev/vda1

在这里插入图片描述

ls -l /dev/tty

在这里插入图片描述

mkfifo pipe

在这里插入图片描述
删除刚创建的管道的话输入下面指令即可:
在这里插入图片描述

ls -al /usr/lib64/

在这里插入图片描述

(1)文件后缀在Linux中的作用

在Linux中我们可以根据上面的方法查看文件是啥类型,那在Linux中文件的后缀有啥用呢?
下面整个小实验,我们可以看到,后缀名随便改,都不影响程序的正常输出,
在这里插入图片描述

由此可以看出,在Linux环境下,对于文件的后缀没有多大区分,你如何修改操作系统都不管,但是对于gcc这种编译软件,若是识别到编译的文件不是一个后缀.c的文件,那么就会出现下面的状况,因为gcc这是一个Linux中自带的编译软件,并不是属于Linux的组成部分,是独立开来的,就相当于我们Windows中自带的一些软件一样,有着它们自己对文件类型的识别格式
在这里插入图片描述

(2)file指令

功能说明:辨识文件类型
语法:file [选项] 文件或目录…

  • 常用选项:

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形

  • -z 尝试去解读压缩文件的内容

在这里插入图片描述

4. 文件权限值的表示方法

上面只是谈到了文件的类型,那后面这一大串又是什么呢?
在这里插入图片描述
大家可以参考这张图,一一对应。
在这里插入图片描述
在这里插入图片描述

文件访问者的三种权限rwx

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

以下图为例,分别表示文件拥有者对该文件有rwx权限,也就是可读,可写,可执行、文件所属组对文件有rwx权限,也就是可读,可写,可执行、other对该文件只有rx权限,没有写权限。
在这里插入图片描述

文件权限值的表示方法:

  1. 字符表示法
Linux表示说明
r - -只读
- w -仅可写
- - x仅可执行
r w -可读可写
r - x可读和可执行
- w x可写和可执行
r w x可读可写可执行
- - -无权限

注意:在Linux系统中,文件权限通常由三组字符表示,分别代表文件所有者的权限、与文件所有者同组的用户的权限、以及其他用户的权限。上述表格仅展示了单个用户(或组)的权限情况,但在实际应用中,这些权限是成组出现的,例如 rwxrw-r-- 表示文件所有者具有读、写、执行权限,与文件所有者同组的用户具有读和执行权限,而其他用户只有读权限。

  1. 八进制表示法和二进制表示法
权限符号八进制二进制
r4100
w2010
x1001
r w6110
r x5101
w x3011
r w x7111
- - -0000

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

(1) chmod

chmod

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

修改访问者权限的两种方式:

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

用户符号:

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

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

在这里插入图片描述
②八进制操作

给拥有者、所属组、other都添加的权限—— 444
在这里插入图片描述
给拥有者、所属组、other都添加执行的权限—— 111

在这里插入图片描述
给拥有者、所属组、other都添加读、写的权限—— 666

在这里插入图片描述
将拥有者、所属组、other的所有权限都删除—— 000


給拥有者添加读写,所属组添加读,other添加可执行。
在这里插入图片描述

(2) chown

讲完了chmod,知道了如何修改一个文件的访问者权限,现在我们来尝试修改一下这个文件的访问者。首先就是修改文件的拥有者,使用的是chown
chown

  • 功能:修改文件的拥有者
  • 格式:chown [参数] 用户名 文件名
    实例
    这里我们将hello.cc这个文件的拥有者修改成ubuntu,但是这里却显示操作不允许,这是为什么呢?实际上如果你用普通用户将文件的拥有者修改为其他用户,是需要其它用户同意的。

在这里插入图片描述
但是这里我们可以直接使用root,强行转换,管你要不要呢。
在这里插入图片描述

(3) chgrp

可以更改文件的拥有者,那对于所属组来说当让也是可以修改的,使用chgrp

chgrp

  • 功能:修改文件或目录的所属组
  • 格式:chgrp [参数] 用户组名 文件名
  • 常用选项:-R 递归修改文件或目录的所属组
  • 实例:
    同样,普通用户还是不行。
    在这里插入图片描述
    使用root进行操作就好了,当然在普通用户下用sudo提权也行。
    在这里插入图片描述

三、目录的权限

1. 基本概念

普通的文件可读可写可执行比较容易理解,那对于目录(类似于文件夹)来说,可读可写可执行又代表什么呢?

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

ls 查看目录中的文件内容,需要读r权限
touch、echo 在目录中创建文件;rm 删除文件,需要写w权限
cd 进入到一个目录,需要可执行x权限

可以看到去掉x权限之后就无法进入改目录了。
在这里插入图片描述
可以看到没去掉r权限之前是可以查看目录中的内容的,但去除r权限之后就不能显示了。
在这里插入图片描述
可以看到没去掉w权限之前可以在这个目录下创建文件,但是去掉w权限之后就不能创建文件了。
在这里插入图片描述

2. 默认权限与权限掩码

下图中我们可以看到在创建文件和目录时我们并没有指定相应的权限,但是在文件和目录刚创建后却有相应的权限,这是因为目录和权限在创建时是有默认权限的。

  • 文件默认权限:0666
  • 目录默认权限:0777

其中第一位的0与特殊权限有关,我们就不做探究了,后面三位是权限的八进制数值表示方法,我们将其翻译为字符表示方法。
在这里插入图片描述

但是如果按照默认权限666和777来创建文件的话应该是下图中的权限才对啊,但是实际生成的却和理论上的不一样,这是为什么呢?
在这里插入图片描述
原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)

  • 语法: umask 权限值
  • 功能: 查看或修改文件掩码。

这里可以看到默认的文件掩码是0002.
在这里插入图片描述

在这里插入图片描述
mask&(~umask) 之后如图
在这里插入图片描述

可以理解为凡是在umask中出现的权限位,都不能在最终权限中出现。
在这里插入图片描述
我们也可以通过修改umask来设置文件的访问权限。
这里我们把umask改为000,这样创建出来的文件就是默认的了,如下图:;
在这里插入图片描述
我们也可以把umask改为777,这样创建出来的文件权限应该是000,如图:
在这里插入图片描述
值得注意的是: 超级用户的默认掩码为0022,普通用户的默认掩码为0002

四、粘滞位

在上面的介绍中我们了解到目录的可写权限:

  • 可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。

但是这样就会造成一个问题,在一个目录下有众多文件,我们可以没有文件的可写权限,只需要有目录的可写权限,就能直接删除该目录下的文件,是不是显得非常不合理呢?

在这里插入图片描述
但是使用其他用户(这里使用ubuntu)却可以删除:
在这里插入图片描述

为了解决这个问题,Linux提出了粘滞位的方法来解决这个问题。

粘滞位

  • 语法: chmod +t 目录名
  • 功能: 给目录加上粘滞位。

当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。
在这里插入图片描述
当前目录已经被加上粘滞位,所以另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。
在这里插入图片描述
当一个目录被设置为粘滞位,则该目录下的文件只能由:

    1. 超级用户删除。
    1. 该目录的拥有者删除。
    1. 该文件的拥有者删除。

注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件

想要去掉目录的粘滞位只需要chmod -t 目录名就好

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

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

相关文章

三个视觉领域常用数据标注工具:labelImg 解压安装基础使用、 label-studio 的安装和基础使用【检测数据标注】

🥇 版权: 本文由【墨理学AI】原创、在CSDN首发、各位大佬、敬请查阅🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 本次博文主要对如下三个视觉领域常用数据标注工具进行初步整理 labelImglabel-studio 工具Robo…

生成式AI如何辅助医药行业智能营销

生成式AI在医药行业的智能营销中发挥着日益重要的作用,它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验,从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式:一、精准市场…

微软Win11 22H2/23H2 九月可选更新KB5043145发布!

系统之家于9月27日发出最新报道,微软针对Windows11系统,发布了九月最新可选更新补丁KB5043145,22H2用户安装后,系统版本号升至22621.4249,23H2用户安装后升至22631.4249。本次更新修复了Edge使用IE模式有时会停止响应等…

JS逆向基础-谷歌浏览器调试技巧(详细)

概述 浏览器的调试工具在 JavaScript 逆向工程中,帮助开发者分析和理解代码执行流程、变量值及其变化,从而揭示隐藏逻辑和加密机制,为破解、修改或复现代码提供重要支持。 调试面板详解 谷歌浏览器的调试面板概览: 顶部操作栏 …

直线模组降噪攻略

直线模组作为现代机械自动化中不可或缺的重要组件,其性能与稳定性直接影响到整个设备的运行效果。在使用过程中,直线模组有时会出现噪音,可能由多种因素导致,当噪音出现时,可以试试以下几个方法: 1、设备选…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型,表示真或假true, false用于条件判断,例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…

检查一个CentOS服务器的配置的常用命令

在CentOS系统中,查看服务器配置的常用命令非常丰富,这些命令可以帮助用户快速了解服务器的硬件信息、系统状态以及网络配置等。以下是一些常用的命令及其简要说明: 1. 查看CPU信息 (1) cat /proc/cpuinfo:显示CPU的详细信息&…

【YashanDB知识库】如何dump数据文件,转换rowid, 查询对应内容

本文来自YashanDB官网,具体内容可见https://www.yashandb.com/newsinfo/7459464.html?templateId1718516 问题现象 客户环境有时候会遇到文件损坏的情况,需要dump文件,根据rowid查询数据情况。 问题的风险及影响 熟练掌握崖山数据文件du…

ROS理论与实践学习笔记——2 ROS通信机制之通信机制实践

5.1 话题发布 需求描述:编码实现乌龟运动控制,让小乌龟做圆周运动。 实现分析: ①乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模…

公交换乘C++

题目: 样例解释: 样例#1: 第一条记录,在第 3 分钟花费 10 元乘坐地铁。 第二条记录,在第 46 分钟乘坐公交车,可以使用第一条记录中乘坐地铁获得的优惠票,因此没有花费。 第三条记录,…

基于微信小程序的智慧社区的设计与实现

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

docker拉取镜像失败

docker拉取镜像失败 错误提示检查linux服务器是否开通防火墙开放端口重启防火墙查看已开放的端口 修改配置文件 错误提示 检查linux服务器是否开通防火墙 firewall-cmd --staterunning表示防火墙正在运行,显示not running表示未运行,使用以下命令开启防…

vite 底层解析

vite 目前大多数框架的前端构建工具都已经被vite取代,相信你已经使用过vite了。可是在使用过程中,vite对我来说一直是模糊的,现在就来一探究竟,为啥它更好? 接下来我将为从以下几点出发,究其原理 一、原生…

基于大数据技术的智慧居家养老服务平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

Redis实战篇-短信登入

Redis实战篇-短信登入 该笔记是来源于黑马程序员的Redis项目课程,为了后续方便复习。将笔记记录在博客之中 实战篇我们要学习一些什么样的内容 1.本期任务 短信登录 使用redis共享session来实现 商户查询缓存 理解缓存击穿,缓存穿透,缓存雪崩等问题 …

基于冲突动态监测算法的健身房预约管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着健身热潮的兴起,健身房管理面临着日益增长的会员需求与资源分配的挑战。传统的人工预约方式不仅效率低下,且容易出现时间冲突和资源浪费的情况。为了解决这一问题,基于冲突动态监测算法的…

【CSS/HTML】CSS实现两列布局,一列固定宽度,一列宽度自适应方法

文章目录 1.固定宽度区浮动,自适应区不设宽度而设置 margin2.float与margin配合使用3.固定宽度区使用绝对定位,自适应区设置margin4.使用display:table实现 不管是左是右,反正就是一边宽度固定,一边宽度自适应。 博客的很多主题也…

Python学习(3):画散点图和箱线图

1. 散点图(matplotlib库) 1.1 代码示例 import matplotlib.pyplot as plt# 准备数据 x [1, 2, 3, 4, 5] y [2, 4, 6, 8, 10]# 绘制散点图 plt.scatter(x, y)# 添加标题和标签 plt.title("散点图示例") plt.xlabel("X 轴") plt.y…

Android PopupWindow.showAsDropDown报错:BadTokenException: Unable to add window

Android PopupWindow.showAsDropDown报错:BadTokenException: Unable to add window Android PopupWindow.showAsDropDown报错: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity ru…

【华为HCIP实战课程一】OSPF相关基础介绍及基础配置,网络工程师必修

一、OSPF介绍 开放式最短路径优先协议OSPF(Open Shortest Path First),IPv4使用的OSPFv2,针对IPv6使用OSPFv3协议。 二、为什么需要OSPF OSPF出现之前,网络广泛使用RIP路由协议,RIP由于最大16跳数限制无法适应大型网络,RIP是基于距离矢量算法的路由协议,应用在大型网…