【Linux】深入理解linux权限

🌟🌟作者主页:ephemerals__****

🌟🌟所属专栏:Linux

目录

前言

一、权限是什么

二、用户和身份角色

三、文件属性

[1. 文件属性表示](#1. 文件属性表示)

[2. 文件类型](#2. 文件类型)

[3. 文件的权限属性](#3. 文件的权限属性)

四、修改文件的权限属性和角色

[1. 修改权限属性](#1. 修改权限属性)

[2. 修改文件角色](#2. 修改文件角色)

五、关于权限的三个问题

[1. 目录的权限](#1. 目录的权限)

[2. 默认权限与实际权限](#2. 默认权限与实际权限)

[3. 删除权限与粘滞位](#3. 删除权限与粘滞位)

总结


前言

在数字世界中,安全始终是最重要的基石,而Linux作为开源操作系统的璀璨明珠,其权限管理机制更是构筑安全防线的关键一环。本篇文章,我们将深入探讨Linux的权限体系,帮助你更好地掌控文件权限,构建更安全、可靠的工作环境。

一、权限是什么

在Linux当中,权限指的是操作系统用于控制用户对文件或目录进行访问的机制,说白了,权限能决定用户能不能访问一个文件或目录,能以什么样的方式访问文件或目录 。影响权限的因素:目标事物的属性和用户及其扮演的身份角色。

二、用户和身份角色

在Linux下,我们可以认为有两种用户:

  1. root用户(超级用户):几乎不受权限约束,可以任意访问文件或目录。

  2. 普通用户:Linux使用者,受权限约束。

创建用户:adduser 用户名

设置密码:passwd 用户名

切换用户:su 用户名

切换到root用户:su

回退到之前用户:ctrl+D 或exit

以root身份重新登录:su -

指令提权:sudo 指令

注:指令提权本质是以root用户的身份执行命令

而"身份角色"是针对于具体事物,由用户所扮演的。身份角色有如下三种:

  1. 文件拥有者(User,u)

  2. 文件所属组(Group,g)

  3. 其他人(Other,o)

对于一个目录或文件而言,身份角色不同,它们所拥有的权限也不尽相同,其权限由文件属性和身份角色共同决定。

三、文件属性

1. 文件属性表示

使用 ls -l 指令显示文件信息,就可以看到文件属性:

例如上图中的code文件,它的各项属性表示如下:

接下来,我们重点探讨一下文件类型 以及权限属性。

2. 文件类型

文件类型

d:目录

-:普通文件

c:字符设备文件

b:块设备文件

p:管道文件

l:软链接文件

s:套接口文件

3. 文件的权限属性

如上图所示,文件的权限属性针对三种角色可能有所不同,这就说明权限**由文件属性和身份角色共同决定。**权限类型有三种:

r:可读--可以查看文件内容

w:可写--可以修改文件内容

x:可执行--可以运行

当权限属性的相应位置上有r/w/x时,表示该文件针对的角色具有读/写/执行该文件的权限,否则不具有相应权限。

以下两点需要注意:

对于root用户,无论其扮演的角色是否具有权限,其都可以进行相应操作。

一个文件可执行的两个必要条件:1. 文件具备可执行权限;2. 文件的类型是可执行程序。

权限类型有字符表示方法 和八进制表示方法 两种**:**

当使用八进制表示方法表示权限属性时,一种角色的权限属性可以只用一位八进制数字表示,所以一个三位八进制数字就可以表示全部角色的权限属性(修改权限属性时方便使用)。

注意:针对某个文件来讲,一个扮演多种角色的用户的权限按照角色优先级进行对应。

角色优先级:拥有者>所属组>其他人

举例:对于一个文件test.txt,拥有者的权限是r-- ,而所属组的权限是**-x-** ,而一个用户既作为该角色的拥有者,也作为所属组时,其权限是r--(拥有者优先级较高,与拥有者权限相同)。

四、修改文件的权限属性和角色

1. 修改权限属性

我们可以使用chmod指令修改一个目录或文件的权限属性。它的语法如下:

bash 复制代码
chmod 选项 权限 文件名

常用选项 :-R 递归地修改目录及子目录的权限

其中,若使用字符表示法表示权限,则其格式是:(角色)(+/-)(r/w/x)

角色

u:表示拥有者

g:表示所属组

o:表示其他人

a:表示所有角色
+/-

+:表示新增权限

-:表示去除权限

使用示例:

bash 复制代码
chmod u+r test.txt  #对于该文件,给拥有者增加读权限

chmod g+rwx test.txt  #对于该文件,给所属组增加读、写、执行权限

chmod a-x test.txt  #对于该文件,去除所有人的执行权限
chmod -x test.txt  #与上条指令等价

chmod u+r,o-w test.txt  #对于该文件,给拥有者增加读权限,并去除其他人的写权限

当然我们也可以使用八进制表示方法设置文件权限。使用示例:

bash 复制代码
chmod 777 test.txt  #针对该文件,给所有人增加所有权限
chmod 456 test.txt  #针对该文件,设置拥有者的八进制权限编号为4,所属组为5,其他人为6

注意:只有文件的拥有者或具有root权限才能修改和设置文件的权限属性。

2. 修改文件角色

除了文件的权限属性,文件角色也可以被修改。

chown指令修改文件拥有者:

bash 复制代码
chown 用户名 文件名

使用示例:

bash 复制代码
chown user test.txt  #将test.txt的拥有者改为user
chown -R user mydir/...  #将目录mydir及其子目录的拥有者改为user

chgrp指令 修改文件所属组:

bash 复制代码
chgrp 用户名 文件名

使用示例:

bash 复制代码
chgrp user test.txt  #将test.txt的所属组改为user
chgrp -R user mydir/...  #将目录mydir及其所有子目录的所属组改为user

注意 :只有具有root权限才能修改文件拥有者;只有文件的拥有者或具有root权限才可以修改该文件所属组。

五、关于权限的三个问题

1. 目录的权限

对于一个目录而言:

如果没有读权限,就无法查看该目录下的文件信息;

如果没有写权限,那么就无法创建、删除、修改该目录内部的文件;

如果没有执行权限,那么无法进入该目录。

**注意:**即使一个目录有读权限,但若没有执行权限,那么仍然无法进入该目录,并且无法在该目录下执行命令和查看该目录下文件的详细信息。

2. 默认权限与实际权限

在Linux下,一个普通文件,它的默认权限是rw- rw- rw-(666) ;而一个目录的默认权限是rwx rwx rwx(777)。

但当我们创建一个普通文件和目录后,可以看到其权限属性并非是默认值:

相比默认权限,两者的实际权限貌似缺失了所属组和其他人的读权限。这是为什么呢?

实际上,存在一种叫做umask权限掩码的机制,它控制的是新创建文件和目录时,哪些权限将被去除。注意:它并不会直接赋予权限,而是通过限制默认权限来间接设定权限。

可以使用umask指令查看umask码:

可以看到,当前系统的umask为022 (最高位的0暂且省略),它其实是一个三位八进制数字,与八进制数字表示的权限属性相呼应。

掩码规则:文件的实际权限 = 默认权限(八进制)- umask**。**

所以我们看到的文件和目录的实际权限是:

目录:777 - 022 = 755 (rwx r-x -r-x)

文件:666 - 022 = 644 (rw- r-- r--)

当然,umask也可支持修改,使用示例如下:

bash 复制代码
umask 002  #将umask修改为002

修改umask,可以达到修改实际权限的效果。

3. 删除权限与粘滞位

要删除 一个文件,看的不是该文件的读/写/执行权限,而是需要该文件所在目录的写权限和****执行权限,因为执行权限决定了是否可以进入目录;写权限决定了是否可以删除目录下文件。

但这种设定似乎并不合理:假设有一个用户,其无权访问文件A,但可能有权删除文件A。

所以Linux出现了一种机制:粘滞位 ,用于防止无关人员删除重要文件。

当一个目录被设置为粘滞位后,其下的文件或目录只能由以下两者删除:

1. root用户

2. 当前文件或目录的所有者

也就是说,除了root用户之外,该目录下的文件或目录,只有自己的,才能被自己删除。

设置粘滞位的指令:

bash 复制代码
chmod +t 目录名

总结:如果想要共享一个目录,并且确保目录下的文件不被删除,那么就需要设置粘滞位。

有两点需要注意:

1. 根目录下的tmp目录自带粘滞位,可以用做共享目录。

2. 粘滞位只需给目录设置,不需要给普通文件设置。

总结

本篇文章,我们深入探讨了Linux系统中的权限管理,包括权限的概念、用户角色、文件属性及其权限设置的操作方法。了解并掌握这些内容对于管理Linux系统的安全性至关重要。通过合理配置文件权限和用户角色,可以有效控制文件访问、提高系统的安全性和灵活性。如果你觉得博主讲的还不错,就请留下一个小小的赞在走哦,感谢大家的支持❤❤❤

相关推荐
且从容.16 分钟前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道36 分钟前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达3 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.4 小时前
ubuntu安装flink
linux·ubuntu·flink
数字新视界5 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落5 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨5 小时前
WSL2的安装与使用
linux·wsl
微小的鱼5 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng6 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮6 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频