
✨前言:学习 Linux 时,最常遇到的问题之一就是“权限不足”。本文从基础到进阶,讲解 Linux 权限的组成、设置与管理,让你真正理解 rwx 权限的意义。 📖专栏:【把Linux“聊”明白】
首先,我们要知道,Linux下有两种用户:超级用户(root)、普通用户。
命令:su [用户名] 功能:切换用户。 例如,要从root用户切换到普通用户user,则使用su user。 要从普通用户user切换到root用户则使用su root(root可以省略),此时系统会提示输入root用户的口令。 实例:

在这里我们再介绍一个su -,用法是一样的,有一点不同:
su:只切换用户身份,但保持原用户的工作环境(环境变量、工作目录等)。 su - 或 su -l:切换用户身份,并同时切换到该用户的完整登录环境。
实例:

说明(基本都知道): 从超级用户->普通用户,权限降低; 从普通用户->超级用户,权限提高; 提高有什么用,简单来说,因为很多文件不允许普通用户操作。
首先,我们要知道权限是什么?
权限的本质,就是能或者不能做什么事情
其次,为什么要有权限?
在日常生活中,我们都听过,“谁谁谁没有权限做什么操作……” 权限就是为了控制用户的行为,防止错误的发生。 这里也很好理解,权限首先限制的是角色(谁有我的权限),权限还要求目标必须具备对应的属性(也就是,我想在LeetCode上玩游戏,但是,它不具备玩游戏的“属性”呀)。 所以,权限=角色+目标权限属性(目标有什么权限) 通俗一点,哪个角色有目标的什么权限。 在Linux下,一切皆文件,面对的都是文件,那文件有什么权限呢–>读、写、执行

这里显示的就是文件或者目录的属性,因为文件不仅仅是内容,文件=内容+属性。 那我们来详解一下这些属性都代表什么意思:



文件和文件目录的所有者:u—User(所有者) 文件和文件目录的所有者所在的组的用户:g—Group(所属组) 其它用户:o—Others(其它)
对于所属组,我们来简单介绍一下,我们可以用一个公司的部门来做一个形象的比喻:
概念 | 比喻 | 说明 |
|---|---|---|
文件所有者 | 项目负责人 | 这个文件的“主人”,拥有最高的控制权。 |
所属组 | 项目组/部门 | 这个文件所关联的团队,这个团队里的所有成员都享有为这个组设定的权限。 |
其他用户 | 公司其他部门 | 不属于这个项目组的其他所有人。 |
但是,我们在上面的截图中为什么不见Others呢,很简单,Others不需要记录,除了所有者和所属组其它的都是Others。

读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 “-”表示不具有该项权限
d:文件夹 -:普通文件 l:软链接(类似Windows的快捷方式) b:块设备文件(例如硬盘、光驱等) p:管道文件 c:字符设备文件(例如屏幕等串⼝设备) s:套接口文件


可以看出suxi(所有者)对test.cpp有读写权限,没有可执行权限,当然,所属组要是suxi,就不说了,然后,其它角色只有读权限。 这还是比较好理解的。 那下面我们来看一下如何改变权限。
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
-R -> 递归修改目录文件的权限chmod命令权限值的格式:
用户表示符+/-权限字符
+: 向权限范围增加权限代号所表示的权限-: 向权限范围取消权限代号所表示的权限=: 向权限范围赋予权限代号所表示的权限用户符号:
u: 拥有者g: 拥有者同组用户o: 其它用户a: 所有用户实例:


其他位类似,那也就是说,对于任意一个角色,最大的数字组合(权限)为111,最小为000。此时,转为8进制即为最大7,最小0;
所以我们也可以通过三位8进制数字在改变权限, 实例:

我们上面改变了文件的权限属性,如果我们要改变权限的所属角色,怎么办?看下面。
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
实例:

这里,我们再说一个提高权限的方法,也是最常用的:sudo
sudo是用来进行指令的短暂提权的。它允许一个被授权的普通用户以另一个用户(通常是 root 超级管理员)的安全权限来运行命令,而无需知道 root 的密码,也无需长时间保持在 root 权限状态。但是,它需要我们被授权,也就是把我们用户放在一个类似于白名单的文件中。
使用前需在 /etc/sudoers 文件中授权,所以,就需要改文件信息,使用vim。这个我后面在讲解vim编辑器的时候会有所说明。
现在就先用su吧,这里就先了解一下。看实例:

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

提醒:su之后退回到普通用户Ctrl+d就行,或者exit。


即在确认权限信息时,系统确认的顺序是所有者、所属组、其它;在Centos下,用户角色只确定一次。
功能:


可见,umask 目的是:凡是在umask中出现的权限,都不应该在最终权限中出现。 那为什么要有umask呢?(简单了解)
所以,我们是可以改变umask的值。 实例:

对于普通文件的权限来说,读、写、执行,很好理解。那rmx对于目录来说,意味着什么?

所以前面我们说,对于新建目录默认权限=0777,不难理解。 在这里,我们也可以看一下用户suxi所处的目录信息:

这样也就很好的理解了Linux下多用户是如何"隔离"的。 但是如果两个用户之间要进行文件级别的协作呢?那么文件就不能放在任何一个私人账号下,有权限的限制。 有了目录的权限的理解,我们在来看个问题: 换句话来讲,就是只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论这个用户是否有这个文件的写权限。 这好像不太科学啊,我张三创建的⼀个文件,凭什么被你李四可以删掉?我们用下面的过程印证一下。

为了解决这个不科学的问题,Linux引入了粘滞位的概念。


这样就很好的解决了多人进行文件级别的协作时不可以删除不属于自己的文件了。 总结: 当⼀个目录被设置为"粘滞位"(用chmod+t),则该目录下的文件只能由

权限体系是 Linux 安全与多用户协作的核心所在。 理解它,不仅能让你避免“Permission denied”的尴尬,也能让你在系统管理中更加游刃有余。