Linux:Linux权限

目录

1. Linux权限的概念

2. Linux权限管理

2.1 文件访问者的分类

2.2 文件类型和访问权限

2.2.1 文件类型

2.2.2 基本权限

2.3 文件权限值的表示方法 

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

2.4.1 chmod

2.4.2 chown

2.4.3 chgrp

2.4.4 umask

3. file指令

4. Linux目录权限

4.1 测试证明

4.2 修改读权限

4.3 修改写权限

4.4 修改可执行权限

4.5 总结目录权限

5. Linux权限掩码umask

5.1 起始权限

5.2 umask

5.3 在root用户下

5.4 在普通用户下

5.5 修改umask

6. 粘滞位


1. Linux权限的概念

什么是权限?就是通过一定的条件,拦住一部分人,给另一部分人权利,来访问某种资源

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

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

命令:su [用户名]

功能:切换用户

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

例一:

例二:


2. Linux权限管理

Linux下,不以文件后缀来区分文件类型。
(并不代表不可以使用,在系统层面没意义,但是可以给自己看)

2.1 文件访问者的分类

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

所有者 (User/Owner)

  • 定义:文件的所有者通常是创建文件的用户,或者是通过某些命令(如 chown)被指定为文件所有者的用户。
  • 目的:所有者对文件有最大的控制权,通常能够设置文件的权限和修改文件的内容。这样设计是为了确保文件的创建者或者指定的用户能够完全控制自己的文件资源。

所属用户组 (Group)

  • 定义:每个文件还关联有一个用户组,这通常是由创建文件时用户的默认组决定的,但也可能通过 chgrp 或 chown :groupname 命令被更改。
  • 目的:所属用户组的权限允许一组用户共享对文件的访问控制,而无需将所有用户都设置为文件的所有者。这在团队协作中尤其有用,因为团队成员可以被添加到同一个组中,从而共享对某些文件的访问权限。

其他用户 (Others)

  • 定义:除了文件所有者和所属用户组的成员之外的任何用户。
  • 目的:其他用户权限的存在确保了系统中非直接相关用户对文件的访问控制,防止未经授权的访问。这有助于保护数据的安全性和完整性,防止未授权用户读取、修改或执行敏感文件。

为什么需要这样的设计?

  • 安全性:通过限制对文件的访问,可以防止未经授权的用户访问敏感数据或进行潜在破坏性的操作。
  • 协作性:用户组的概念使得团队成员可以方便地共享文件,而不需要将文件的所有权转移给每一个需要访问文件的用户。
  • 灵活性:不同的用户和用户组可以有不同的权限,这使得管理员可以根据具体需求灵活地调整访问控制策略。

2.2 文件类型和访问权限

  • 第一列(drwxr-xr-x):表示文件或目录的权限模式。以字母和符号的形式表示了所有者、所属组和其他用户的权限。第一个字符表示文件类型,其中"d"表示目录。接下来的三个字符(rwx)表示所有者的权限,再接下来的三个字符(r-x)表示所属组的权限,最后的三个字符(r-x)表示其他用户的权限。
  • 第二列(3):表示链接到该文件或目录的硬链接数。对于目录来说,这个数字表示该目录下的子目录和文件的数量。
  • 第三列(root):表示文件或目录的所有者。
  • 第四列(root):表示文件或目录的所属组。
  • 第五列(4096):表示文件或目录的大小(以字节为单位)。对于目录来说,这个值通常是固定的。
  • 第六列(Jan 23 10:32):表示文件或目录的最后修改时间。
  • 第七列(lesson1):表示文件或目录的名称。

总计(total 8):表示当前目录下的文件和目录的总数。

2.2.1 文件类型

Windows中通过后缀名区分文件类型

Linux中不通过后缀名区分文件类型,通过第一个属性列来区分

Linux不区分文件类型,但是Linux上的工具可能会区分

2.2.2 基本权限

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

2.3 文件权限值的表示方法 

文件的权限一般分为三种:

  • r:读
  • w:写
  • x:可执行权限

字符表示方法

8进制数值表示方法

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

2.4.1 chmod

chmod 是 Linux 和类 Unix 系统中一个非常重要的命令,用于更改文件或目录的权限。chmod 的全称是 "change mode",它允许你修改文件或目录的访问模式,包括读(r)、写(w)和执行(x)权限。通过精确控制文件的权限,chmod 命令增强了系统的安全性和可管理性。

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

格式:chmod [参数] 权限 文件名

常用选项:

  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式

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

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

实例:

# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt

修改拥有者权限

修改所属组权限

修改其他用户权限

修改多个权限

修改所有人权限

三位8进制数字

实例:

# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt

2.4.2 chown

chown 命令在 Linux 和 Unix 类似系统中用于改变文件或目录的所有者(owner)和所属用户组(group)。它的名字来源于英文 "change owner" 的缩写。这个命令通常由 root 用户或文件的当前所有者使用,因为它涉及到对文件权限的更改,而这通常需要较高的权限。

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

实例:

# chown user1 f1
# chown -R user1 filegroup1

然而我们限制拥有者不能读写,登录普通用户后就不能读写了,而root是不受权限限制的

普通用户是不能修改拥有者的,而root可以强制修改

如果要同时修改所属组和拥有者也是可以的

注意事项

  • 使用 chown 修改文件权限时要小心,特别是当递归更改目录时,因为这可能会影响到许多文件,导致意外的结果。
  • 通常情况下,只有 root 用户或者文件的当前所有者才有权限使用 chown 命令来更改文件的所有者。普通用户只能更改自己拥有的文件的所属组。

2.4.3 chgrp

chgrp 命令在 Linux 和类 Unix 系统中用于更改文件或目录的所属用户组(group)。这个命令的全称是 "change group",它允许你将一个文件或目录的所属组更改为系统中已存在的任何组。chgrp 命令通常由文件的所有者或具有 root 权限的用户使用,因为改变文件的组归属通常需要相应的权限。

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

实例:

# chgrp users /abc/f2

注意事项

  • 当你使用 chgrp 更改文件的所属组时,你需要确保新组在系统中是存在的。如果尝试使用一个不存在的组名,chgrp 命令会失败并显示错误信息。
  • 只有文件的所有者或具有 root 权限的用户才能使用 chgrp 来更改文件的所属组。

2.4.4 umask

umask 命令用于设置或报告当前进程的文件权限掩码。文件权限掩码决定了新创建的文件和目录的默认权限,它是通过从默认权限中去除某些权限位来实现的。

  • 查看或修改文件掩码
  • 新建文件夹默认权限=0666
  • 新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

格式:umask 权限值

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

实例:

# umask 755
# umask //查看
# umask 044//设置

3. file指令

file 命令在 Linux 和类 Unix 系统中是一个非常有用的工具,用于确定文件的类型。它可以识别各种文件格式,包括文本文件、二进制文件、脚本、图片、音频、视频等多种类型,并且能够提供关于文件的详细信息,如编码格式、压缩类型、MIME类型等。

功能说明:辨识文件类型。

语法:file [选项] 文件或目录...

常用选项:

  • -b:仅输出文件类型,不显示文件名。
  • -i:输出 MIME 类型和编码。
  • -L:如果遇到符号链接,显示链接指向的文件类型,而不是链接本身。
  • -m:使用指定的魔法数据库文件,而不是默认的。
  • -q 或 --quiet:静默模式,仅输出文件类型,不显示额外信息。
  • -v:详细模式,显示更多关于文件的信息。
  • -z:处理压缩文件时,自动解压并检测原始文件类型。

示例

  • 查看文件 example.txt 的类型:
    file example.txt
  • 获取多个文件的 MIME 类型和编码:
    file -i image.jpg audio.mp3
  • 静默模式下查看文件类型,适用于脚本中:
    file -qb document.pdf

输出示例

假设我们运行 file 命令检查一个文本文件:

$ file sample.txt
sample.txt: ASCII text

在这个例子中,file 命令告诉我们 sample.txt 是一个ASCII文本文件。

使用场景

file 命令在多种场景下都非常有用,包括但不限于:

  • 确认文件是否符合预期的格式,比如在上传文件前检查。
  • 在脚本中自动识别文件类型,以便进一步处理。
  • 故障排除时,帮助诊断文件损坏或格式错误的问题。
  • 安全审计时,确认文件的实际内容与声明的内容是否一致。

使用 sudo分配权限

用户未添加到信任列表并使用sudo指令时 如下图

(1)修改/etc/sudoers 文件分配文件

# vim /etc/sudoer

格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令

vim /etc/sudoers:这个命令是使用vim编辑器打开/etc/sudoers文件。/etc/sudoers是一个特殊的系统文件,用于配置sudo的权限规则。通过编辑这个文件,可以为特定的用户或用户组分配sudo权限。

(2)使用 sudo 调用授权的命令

$ sudo –u 用户名 命令

实例:

$ sudo -u root /usr/sbin/useradd u2

4. Linux目录权限

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

在Linux中,目录也是文件,是文件就有属性,就有权限

在Linux中,我们可以通过cd命令进入目录

只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。

那么我们要进入一个目录,需要有什么权限呢?目录和普通文件一样,也是有权限的。

4.1 测试证明

我们将dir目录的所属组和拥有者都改为zhb,在zhb用户登录下测试

4.2 修改读权限

我们修改拥有者的r权限,我们发现修改r权限,依旧能进入dir目录,但是在目录中我们不能查看该目录的文件,但是可以创建

4.3 修改写权限

修改目录的写权限,还是不会影响我们进入目录,而且这时我们查看目录文件不受影响,但是不能创建文件了

4.4 修改可执行权限

我们修改目录的可执行权限,这时就进入不了目录了

4.5 总结目录权限

根据测试,我们得出以下结论:

在Linux中

  1. 目录的r权限:用户能否查看指定目录内的文件信息
  2. 目录的w权限:用户能否在指定的目录内新建、修改、删除文件
  3. 目录的x权限:用户能否进入目录 

5. Linux权限掩码umask

5.1 起始权限

我们在创建文件或目录的时候,通常都会有起始的权限,比如目录在创建的时候就有x权限,而且所有同类型文件的起始权限都是相同的

5.2 umask

功能

  • 查看或修改文件掩码
  • 新建文件夹默认权限=0666
  • 新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask&~umask

格式:umask 权限值

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

在创建文件的时候,要从起始权限中,过滤掉(不是简单的减法)在umask中出现的权限

最终权限 = 起始权限 & (~umask)

&:只有对应的两个二进位都为1时,结果位才为1

  • 创建的普通文件,起始权限是0666,去掉x的
  • 创建的目录文件,起始权限是0777,包含x的

5.3 在root用户下

5.4 在普通用户下

5.5 修改umask

可以通过umask 权限值来修改,修改之后创建文件的起始权限也会不一样

6. 粘滞位

  • 粘滞位(Sticky Bit)是一种文件系统权限的特殊标志,用于控制对目录中文件的删除权限。当粘滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能删除或重命名该目录中的文件;其它用户可以创建文件,但是只能删除自己的文件,不可以删除别人的文件。
  • 在UNIX和类UNIX系统中,粘滞位可以通过文件系统的权限模式来设置。当一个目录的粘滞位被设置时,该目录的权限模式会以一个加号(+)和粘滞位标志(t)结尾。例如,一个具有粘滞位的目录权限模式可能是drwxrwxrwt。
  • 要设置粘滞位,可以使用chmod命令,并在权限模式中添加一个加号(+)和粘滞位标志(t)。

例如,要将粘滞位设置在目录上,可以运行以下命令:

[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

只有目录的所有者或超级用户才能设置或取消粘滞位。粘滞位对于确保公共目录中的文件安全性非常有用,防止意外删除或修改他人的文件。 

总结:

粘滞位只能给目录设置,一般是谁设置,谁才能取消。

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

  • 超级管理员删除
  • 该目录的所有者删除
  • 该文件的所有者删除

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

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

相关文章

base SAS programming学习笔记13(Array)

1.Array array-name{dimension} <elements> array-name&#xff1a;向量名称 dimension&#xff1a;向量长度&#xff0c;默认为1&#xff1b; elements:列出变量名&#xff0c;变量名要么全是数值变量或者全是字符变量 array-name和variable不能相同&#xff1b;也不能和…

C++面试题之判断一个变量是不是指针

对于变量其实对应的就是内存&#xff0c;而内存并没有表明一定是什么数据类型&#xff0c;所以判断变量是否是一个指针其实是一个参数类型匹配问题&#xff0c;在C中支持函数的重载&#xff0c;那么不同的函数因为参数的不同从而匹配不同函数调用过程。 编译器在进行函数匹配调…

JAVA周总结(集合) 0721day

一.Collection集合 集合:可以存放多种类型数据的容器。 集合和数组的区别 数组的长度是固定的,集合的长度根据存储的数据发生改变。 数组只能存同一种类型的数组,而集合可以存多种类型。 1.2 单列集合常用类的继承体系 java.util.List: 添加的元素是有序、可重复 ; Lis…

PostgreSQL简介和安装

一、Postgresql简介&#xff1a; 1、PostgreSql是功能强大的&#xff0c;开源的关系型数据库&#xff0c;底层基于C语言实现&#xff1b; 2、开源&#xff1a;允许对PostgreSql进行封装&#xff0c;用于商业收费&#xff1b; 3、版本迭代速度快&#xff0c;正式版本已经到15.R…

【轻松拿捏】java中为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?

java中为什么要使用克隆&#xff1f;如何实现对象克隆&#xff1f;深拷贝和浅拷贝区别是什么&#xff1f; 一、如何在Java中实现对象克隆 1.1 浅拷贝 1.2 深拷贝 1.3 区别总结 二、面试回答技巧 1. 定义克隆及其用途 2. 解释浅拷贝和深拷贝 3. 具体实现浅拷贝和深拷贝 …

【Python】使用库 -- 详解

库就是别人已经写好了的代码&#xff0c;可以让我们直接拿来用。 一个编程语言能不能流行起来&#xff0c;一方面取决于语法是否简单方便容易学习&#xff0c;一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库&#xff0c;来应对各种各样的场景。在…

LeetCode 188题: 买卖股票的最佳时机IV优化(原创)

之前完成了LeetCode 188题&#xff1a; 买卖股票的最佳时机IV&#xff08;原创&#xff09;-CSDN博客&#xff0c;虽然完成代码编写&#xff0c;并提交成功&#xff0c;但运行效率还未达到最优的1ms&#xff0c;见下图&#xff1a; 仔细检查代码&#xff0c;感觉还是有可优化的…

OpenCV中的GrabCut图像分割算法的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 GrabCut 算法是一种用于图像分割的技术&#xff0c;由 Carsten Rother、Vladimir Kolmogorov 和 Andrew Blake 在 2004 年 SIGGRAPH 会议的论文《…

AI多模态识别ALM大模型分享:Qwen-Audio

ALM (Large Audio Language Model) 1&#xff09;Qwen-Audio 声音音频对话 参考&#xff1a; https://qwen-audio.github.io/Qwen-Audio/ https://huggingface.co/Qwen/Qwen-Audio-Chat “Qwen-Audio 接受多种音频&#xff08;人类语音、自然声音、音乐和歌曲&#xff09;以及…

基于面向对象和递归的拦截器设计模式

1 定义 拦截器模式&#xff08;Interceptor Pattern&#xff09;&#xff0c;是指提供一种通用的扩展机制&#xff0c;可以在业务操作前后提供一些切面的&#xff08;Cross-Cutting&#xff09;的操作。这些切面操作通常是和业务无关的&#xff0c;比如日志记录、性能统计、安…

day2 单机并发缓存

文章目录 1 sync.Mutex2 支持并发读写3 主体结构 Group3.1 回调 Getter3.2 Group 的定义3.3 Group 的 Get 方法 4 测试 本文代码地址&#xff1a; https://gitee.com/lymgoforIT/gee-cache/tree/master/day2-single-node 本文是7天用Go从零实现分布式缓存GeeCache的第二篇。 …

【LeetCode】80.删除有序数组中的重复项II

1. 题目 2. 分析 3. 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) < 3:return len(nums)i 0j 1k 2while(k < len(nums)):if (nums[i] nums[j]):while(k < len(nums) and nums[j] nums[k] ):k1if (k < len(nums…

校验deb、rpm、apt、yum安装文件完整性测试

简介&#xff1a;deb包在Linux操作系统中类似于windows中的软件包&#xff08;msi&#xff09;&#xff0c;几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo&#xff08;含Maemo软件&#xff09;中。deb 格式是 Debian 系统(包含 D…

StringBuilder和StringBuffer

目录 &#xff08;一&#xff09;为什么要引入StringBuilder和StringBuffer &#xff08;二&#xff09;StringBuilder和StringBuffer &#xff08;1&#xff09;底层数组长度 (2)StringBuilder与StringBuffer扩容机制 &#xff08;3&#xff09;StringBuilder和StringBuf…

并发编程面试题1

并发编程 1、线程池中提交一个任务的流程是怎样的&#xff1f; 1、提交任务&#xff1a;首先&#xff0c;一个任务被提交到线程池。这个任务通常是一个实现了Runnable或Callable接口的对象&#xff1b; 2、检测线程池状态&#xff1a;线程池会首先检测其运行状态。如果线程池…

javafx使用发现的问题

1.按钮的方法 如果在fxml按钮的方法报错&#xff0c;并且你已在lei中添加了它的按钮及其按钮方法&#xff0c;那么可能是FXML和控制器类未正确关联&#xff1a; 确保你的FXML文件通过 fx:controller 属性正确指定了与之关联的控制器类。例如&#xff0c;fx:controller"c…

数据库之存储引擎

目录 一、MySQL支持的存储引擎 二、查看MySQL默认存储引擎 三、修改MySQL默认存储引擎 四、常用的存储引擎 1.InnoDB 2.MyISAM 3.MEMORY 一、MySQL支持的存储引擎 使用SHOW ENGINES \G; 命令查看 以“\G”结尾&#xff0c;其作用是将查询结果按列显示。 Engine&#xff…

更加深入Mysql-04-MySQL 多表查询与事务的操作

文章目录 多表查询内连接隐式内连接显示内连接 外连接左外连接右外连接 子查询 事务事务隔离级别 多表查询 有时我们不仅需要一个表的数据&#xff0c;数据可能关联到俩个表或者三个表&#xff0c;这时我们就要进行夺标查询了。 数据准备&#xff1a; 创建一个部门表并且插入…

Fiddler 导出请求为curl格式

来自:https://www.cnblogs.com/yudongdong/p/15418181.html Fiddler 下载地址: https://downloads.getfiddler.com/fiddler-classic/FiddlerSetup.5.0.20243.10853-latest.exe 这段代码加到类中 public static RulesOption("关闭请求体转代码", "生成代码&qu…

达梦数据库系列—29. DTS迁移ORACLE到DM

目录 1.ORACLE源端信息 2.DM目的端信息 3.DTS 迁移评估 4.数据库迁移 4.1 Oracle 源端数据库准备 4.2 目的端达梦数据库准备 初始化参数设置 兼容性参数设置 表空间规划 用户规划 创建迁移用户和表空间 4.3迁移步骤 创建迁移 配置数据源 配置迁移对象及策略 开…