前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻松掌握 Linux 权限(一文搞懂)

轻松掌握 Linux 权限(一文搞懂)

作者头像
用户11375356
发布于 2025-05-09 00:49:09
发布于 2025-05-09 00:49:09
19000
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

1.Linux权限的概念

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

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

命令:su[⽤户名]

命令:su [⽤户名]

功能:切换⽤户

例如,要从root⽤户切换到普通⽤户user,则使⽤su  user。

要从普通⽤户user切换到root⽤⼾则使⽤su root(root可以省略),此时系统会提⽰输⼊root⽤户的⼝令。


补充sudo:

sudo:用来进行指定的短暂提权的。

比如:安装软件,安装到系统中,需要超级管理员root权限,其实只按照了一份,允许大家同时使用。

whoami 显示当前登录的用户名。

在普通用户下输入sudo ls如果报错的话我们需要把这个普通用户添加到一个类型白名单里面,因为系统默认是不然你执行sudo命令的。

我们可以修改一下,前提是超级管理员vim /etc/sudoers把普通用户添加进去即可。

普通用户名字      ALL=(ALL:ALL) ALL 

为什么会这样呢我们可以这样理解有一个保安他有一个本子里面记录了他认识的人凡是他认识的人无条件相信他们,他还有一个本子了记录凡是出现在这个本子上的人无条件不相信他们。

sudo第一次需要输入密码第二次有10~15分钟的时间免密码。

使用sudo输入的是普通用户的密码。


2.权限管理


2.1. 文件访问者的分类(人)

1. 文件拥有者(Owner)

文件的创建者,或者被显式指定为文件所有者的用户,文件拥有者可以设置自己对文件的权限。

文件权限中通常会有一个“拥有者”权限栏,它决定了文件拥有者可以对文件执行哪些操作,比如读取(r)、写入(w)或执行文件(x)。

特点:拥有者对文件拥有最高权限,可以自由更改文件内容、权限或将其转移给其他用户。

2. 文件所属组(Group)

文件所属组是指文件所属的用户组。每个文件都会被分配一个所属的组,可以有多个用户属于同一

个组。文件的所属组拥有权限,允许组内的用户执行对该文件的某些操作。

文件权限中的“所属组”权限栏决定了该组内的用户对文件的访问权限。

特点:同一组内的用户可以共享文件的访问权限,方便团队协作,管理员可以通过更改文件的所属组来控制访问权限。

补充:为什么要有所属组呢,如果没有所属组,假如某一天公司让你们组和别的组来写一个程序让你们组和别的组进行竞争谁做得好能让大家认可就推谁上,假如公司只有一台机器在这台机器上创建了两个工作目录分别是xxxA和xxxB,A组用A组的B组用B组的,写完之后你的组长说把你们组的代码给我看看,这个文件所属于我,别人是不能看的,那么组长要看只能公开,那就是other权限,假如我们没有所属组,那么另一个组也可以看到我们的代码了,所以这时候需要用所属者来限制我们把组长拉入这个组他就可以看到了,另一个组也不会看到我们的内容了。


3. 其他用户(Others)

其他用户指的是系统中不属于文件拥有者且不属于文件所属组的所有用户。

在文件权限中,"其他用户"(也叫做“其他人”)指的是所有没有明确权限的用户。这个类别的权限

通常比较宽松,因为它涉及的是文件权限的“公共”部分。

3.权限位解析

红色框中的三个字符是文件拥有者的权限。

中间框中的三个字符是文件所属组的权限。

粉色框中的三个字符是其他用户的权限。

一共9个字符


2.2 文件类型和访问权限(事物属性)

1.文件类型

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

2.基本权限

  • 读(r):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限
  • 写(w):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限
  • 执⾏(x):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权限
  • “—”表⽰不具有该项权限

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

8进制数值表示方法

字符表示方法


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

1. chmod

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

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

常⽤选项: R -> 递归修改⽬录⽂件的权限 说明:只有⽂件的拥有者和root才可以改变⽂件的权限


2.chmod命令权限值的格式

⽤户表⽰符+/-=权限字符

+:向权限范围增加权限代号所表⽰的权限

 -:向权限范围取消权限代号所表⽰的权限 

=:向权限范围赋予权限代号所表⽰的权限

⽤户符号:

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

实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod u+w /home/abc.txt //给文件 /home/abc.txt 的 所有者(user) 增加写权限(w)

chmod o-x /home/abc.txt //移除其他用户(others)的执行权限

chmod a=x /home/abc.txt //设置所有用户只具有执行权限,去除所有其他权限(读和写权限)

chomd g-r 文件名   //取消所属者的读权限

chomd g+r 文件名   //添加所属者的读权限

chomd o+w 文件名   //添加other的允许写权限

chomd o-r-w 文件名 //取消other只读和写权限

//用逗号隔开可以修改多个人的多个权限。如:
chmod u-rwx,g-rwx,o-rwx 文件名

 三位8进制数字

实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod 664 /home/abc.txt //设置所属者和组有读写权限,其他用户只有读权限。

chmod 640 /home/abc.txt //设置所属者有读写权限,组有读权限,其他用户没有任何权限。

rw-rw-r--上面说3个字符为一段,这里用8进制表示为110 110 100 

输入chomd 000 文件名 所有人都没有只读只写执行权限了。 输入chomd 444 文件名 所有人的只读权限就有了。 输入chomd 666 文件名 所有人的只读只写权限就有了。 输入chomd 777 文件名 所有人的只读只写执行权限都有了。

总结:

用户只能更改自己的文件权限。 如果没有权限系统会拒绝让我们访问。 确定权限信息的时候,系统会会先确定用户是谁?拥有者 所属组 还是other Centos下,用户角色确定,只确定一次,顺序是:拥有者 所属者other。 root用户不受权限约束


3. chown

功能:修改⽂件的拥有者

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

实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//如sudo chown xc cmd把cmd这个文件的拥有者改成xc这个用户。

sudo chown user1 f1 // f1这个文件名的拥有者改成user1

sudo chown -R user1 filegroup1 //将filegroup1 及其所有子文件和子目录的拥有者更改为 user1

 总结:

系统默认不允许我们把文件给别人是合理的,万一别人给你个有bug的程序那不就成你背锅了,所以是合理的,想给别人,必须最高权限,sudo / su(切换成为root)。


4. chgrp

功能:修改⽂件或⽬录的所属组

格式:chgrp [参数] ⽤户组名 ⽂件名

常⽤选项:-R 递归修改⽂件或⽬录的所属组

实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
如sudo chgrp xc cmd把cmd这个文件的所属组给xc这个用户。
sudo chgrp users /abc/f2 //把 /abc/f2这个文件的所属组给users

 结合如上我们就可以一起改拥有者和所属组。


5. umask

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

新建⽂件夹默认权限=0666

新建⽬录默认权限=0777

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

格式:umask 权限值

说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。

只关注掩码的后三位。 

希望凡是在umask中出现的权限,都不应该出现在最终权限中。

umask绝对不能是减法,不要写入权限设置不为0不能使用减法。

实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
umask 755    //更改权限掩码为755
umask       //查看
umask 044   //更改权限掩码为044

总结: 为什么要有 umask? 默认权限,有OS决定,无法在创建前进行修改,系统可配置,可以灵活满足需要的一种表现。 特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控。


6.目录的权限

可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中

可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容

可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件

于是, 问题来了~~ 换句话来讲, 就是只要⽤户具有⽬录的写权限, ⽤户就可以删除⽬录中的⽂件, ⽽不论 这个⽤户是否有这个⽂件的写权限. 这好像不太科学啊, 我张三创建的⼀个⽂件, 凭什么被你李四可以删掉? 我们⽤下⾯的过程印证⼀下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 修改 /home/ 目录的权限为 0777
# 给 /home/ 目录设置了全员可读、可写、可执行权限。
[root@localhost ~]$ chmod 0777 /home/
[root@localhost ~]$ ls /home/ -ld
drwxrwxrwx. 3 root root 4096 919 15:58 /home/

# 在 /home/ 目录下创建一个名为 root.c 的文件,并赋予文件 rw-r--r-- 权限。
[root@localhost ~]$ touch /home/root.c
[root@localhost ~]$ ls -l /home/
总⽤量 4
-rw-r--r--. 1 root root 0 919 15:58 abc.c
drwxr-xr-x. 27 lisi lisi 4096 919 15:53 lisi
-rw-r--r--. 1 root root 0 919 15:59 root.c

# 即使 lisi 用户没有写权限(文件的 rw-r--r-- 权限),
# 它依然能删除该文件,因为 /home/ 目录的写权限允许删除目录中的文件。
[root@localhost ~]$ su - lisi
[lisi@localhost ~]$ rm /home/root.c # lisi 可以删除 root 创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[lisi@localhost ~]$ exit
logout

结论:一个文件是否能被删除,与文件本身无关!与文件所处的目录w权限有关!

这样有问题没?

其实是没有问题的一般普通用户的目录下只有自己和root可以进入,别人是进不来的,那么要是别人来我目录创建文件,我把他删了那也没问题啊,这是我的目录。

如果两个用户之间要进行文件级别的协作呢??

不能放在一个私人账号下,我们放到 /home/xxx把权限都放开,实现共享,都可以进去这个目录下创建文件进行读写执行,那么要是张三在这个共享文件下创建了一个文件那么李四确可以删除,我们不想让他删除怎么办?

共享类文件,不想让非文件的拥有者删除对应的文件,可以使用权限标志位:t,粘滞位。

特征:只能给需要共享的目录添加粘滞位

粘滞位
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]$ chmod +t /home/ # 加上粘滞位
[root@localhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 919 16:00 /home/
[root@localhost ~]$ su - lisi
[lisi@localhost ~]$ rm /home/abc.c #lisi不能删除别⼈的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/abc.c"?y
rm: ⽆法删除"/home/abc.c": 不允许的操作

当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的⽂件只能由

1. 超级管理员删除

2. 该⽬录的所有者删除

3. 该⽂件的所有者删除


关于权限的总结

⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。 如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读 权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件) ⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。但由于没有 ⽬录的读权限 所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
详解Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
---- Hello、Hello大家好,我是木荣,今天我们继续来聊一聊Linux中多线程编程中的重要知识点,详细谈谈多线程中同步和互斥机制。 同步和互斥 互斥:多线程中互斥是指多个线程访问同一资源时同时只允许一个线程对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的; 同步:多线程同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
Linux兵工厂
2023/02/28
3.9K0
详解Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
【线程同步】读写锁
读写锁是一种与互斥量类似的锁,它允许更高的并行性,具有写独占,读共享的特点。读写锁总共有三种状态:
mindtechnist
2024/08/08
1350
【线程同步】读写锁
【Linux】:多线程(读写锁 && 自旋锁)
🔥 读写锁(Read-Write Lock)是一种用于多线程环境下同步访问共享资源的锁。它与传统的互斥锁(Mutex)有所不同,提供了更细粒度的控制,以便提高并发性能。它允许多个线程同时 读取 数据,但在写入数据时,必须确保只有一个线程可以进行写操作,并且在写操作期间,所有的读操作都必须等待。
IsLand1314
2024/12/20
3720
【Linux】:多线程(读写锁 && 自旋锁)
多线程编程C语言版
什么是多线程,提出这个问题的时候,我还是很老实的拿出操作系统的书,按着上面的话敲下“为了减少进程切换和创建开销,提高执行效率和节省资源,我们引入了线程的概念,与进程相比较,线程是CPU调度的一个基本单位。”
DeROy
2021/11/16
3.7K0
多线程编程C语言版
【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁
通过对比可以看出,读者写者模型更适合于数据的并发读取,而生产消费者模型更适合于数据的生产和消费。在实际应用中,应根据具体的业务需求选择合适的模型。
枫叶丹
2024/12/04
1460
linux中实现线程同步的6种方法
最后运行的结果不是固定的,有可能是0、-1,如果有这个ticket_num变量代表是库存的话,那么就会出现库存为负数的情况,所以需要引入线程同步来保证线程安全。
全栈程序员站长
2022/09/14
9210
C++读写锁介绍_数据库读写锁
先看看互斥锁,它只有两个状态,要么是加锁状态,要么是不加锁状态。假如现在一个线程a只是想读一个共享变量 i,因为不确定是否会有线程去写它,所以我们还是要对它进行加锁。但是这时又有一个线程b试图去读共享变量 i,发现被锁定了,那么b不得不等到a释放了锁后才能获得锁并读取 i 的值,但是两个读取操作即使是同时发生的,也并不会像写操作那样造成竞争,因为它们不修改变量的值。所以我们期望在多个线程试图读取共享变量的时候,它们可以立刻获取因为读而加的锁,而不是需要等待前一个线程释放。
全栈程序员站长
2022/09/22
9010
Linux学习——浅谈读写锁的使用
读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的。 读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,
全栈程序员站长
2022/09/22
1.8K0
Linux学习——浅谈读写锁的使用
linux读写锁
2. 读写锁是“读模式加锁”时, 如果线程以读模式对其加锁会成功;如果线程以写模式加锁会阻塞。
全栈程序员站长
2022/09/22
3.5K0
【Linux】读者写者问题与读写锁
在读者写者问题中,读者与读者是并发的,不同读者之间不会互相影响,因为只是访问数据,并不会读数据进行修改。写者与写者是互斥的,临界资源只能让一个写者进行书写。读者与写者的关系比较复杂,是互斥与同步,读写不能同时进行,读完了要与写进行同步,写完了要与读同步。
叫我龙翔
2024/09/08
2840
【Linux】读者写者问题与读写锁
封装pthread_rwlock读写锁,实现嵌套调用
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/82969947
10km
2019/05/25
1.9K0
Linux线程互斥学习笔记--详细分析
    在Linux下, 线程的互斥量数据类型是pthread_mutex_t 在使用前, 要对它进行初始化:
用户6754675
2019/12/09
8330
Linux系统编程-(pthread)线程通信(读写锁)
​ 1. 读写锁有三种状态,读模式下加锁(共享)、写模式下加锁(独占)以及不加锁。
DS小龙哥
2022/02/17
1.5K0
Linux系统编程-(pthread)线程通信(读写锁)
Linux内核编程--进程控制,线程控制,锁机制
每个进程都有一个非负整型表示的唯一进程ID。进程ID是可复用的,当一个进程终止后,其进程ID也会被其他进程使用。
Coder-ZZ
2022/05/09
1.2K0
Linux内核编程--进程控制,线程控制,锁机制
linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
文章主要介绍了在Linux系统中,如何利用自旋锁来实现线程之间的同步和互斥。主要包括了自旋锁的定义、工作原理、使用方式和注意事项,并通过实例介绍了如何在C语言中实现自旋锁。
s1mba
2017/12/28
1.6K0
linux读写锁_共享内存读写锁
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169974.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
6.6K0
linux读写锁_共享内存读写锁
【Linux】多线程(自旋锁、读写锁)
自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问的影响。在多个线程尝试获取锁时,它们会持续自旋(即在一个循环中不断检查锁是否可用)而不是立即进入休眠状态等待锁的释放。这种机制减少了线程切换的开销,适用于短时间内锁的竞争情况。但是不合理的使用,可能会造成 CPU 的浪费。
秦jh
2024/12/03
2880
【Linux】多线程(自旋锁、读写锁)
嵌入式Linux:线程同步(读写锁)
在Linux中,读写锁(Read-Write Lock)提供了一种同步机制,允许多个线程并发读取共享资源,但只有一个线程可以对该资源进行写操作。
不脱发的程序猿
2025/02/18
1770
嵌入式Linux:线程同步(读写锁)
Linux同步机制(一) - 线程锁
1 互斥锁 在线程实际运行过程中,我们经常需要多个线程保持同步。 这时可以用互斥锁来完成任务。互斥锁的使用过程中,主要有 pthread_mutex_init pthread_mutex_destory pthread_mutex_lock pthread_mutex_unlock 这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。 1.1 锁的创建 锁可以被动态或静态创建,可以用宏PTHREAD_MUTEX_INITIALIZER来静态的初始化锁,采用这种方式比较容易理解,互斥锁是pthread_m
三丰SanFeng
2018/01/16
3.6K0
线程同步与互斥
不是什么时候都要靠上锁的。从根源出发,我们为什么需要上锁?因为线程在使用资源的过程中可能会出现冲突,对于这种会出现冲突的资源,还是锁住轮着用比较好。
看、未来
2021/10/09
8960
线程同步与互斥
推荐阅读
相关推荐
详解Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 1.Linux权限的概念
  • 2.权限管理
    • 2.1. 文件访问者的分类(人)
      • 1. 文件拥有者(Owner)
      • 2. 文件所属组(Group)
      • 3. 其他用户(Others)
      • 3.权限位解析
    • 2.2 文件类型和访问权限(事物属性)
      • 1.文件类型
      • 2.基本权限
      • 3.文件权限值的表示方法
    • 2.3文件访问权限的相关设置方法
      • 1. chmod
      • 2.chmod命令权限值的格式
      • 3. chown
      • 4. chgrp
      • 5. umask
      • 6.目录的权限
      • 粘滞位
      • 关于权限的总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档