当前位置: 首页 > news >正文

Linux - 权限的理解(深入浅出,详细细微)

大家好,这里是彩妙呀~

    Linux权限是系统安全的基石,通过读(r)、写(w)、执行(x)三类权限,精准控制用户、用户组及其他用户对文件/目录的访问行为。权限以数字(如755)或符号(如u=rwx)表示,结合SUID、SGID、Sticky Bit等特殊权限,构建起多层级的保护机制。理解权限逻辑,不仅能避免“Permission denied”问题,更能从源头守护系统资源,是运维与开发的必修课。这里,彩妙将从底层原理一步步带着大家来学习本博客所讲述的内容:从shell基本原理出发->到怎样才能玩转权限。


目录

Shell命令以及运行原理

Linux权限的概念

 Linux当中的用户

su命令

sudo命令

 Linux权限管理

 ⽂件访问者的分类(⼈)

文件权限值的表示方法

字符表示法

8进制数值表示法

⽂件访问权限的相关设置⽅法

chmod命令

chown命令

chgrp命令

umask命令

Linux 目录权限与粘滞位详解

1. 目录权限的作用

可执行权限(x)

可读权限(r)

可写权限(w)

2. 粘滞位(Sticky Bit)的作用

3. 权限总结表

小结


Shell命令以及运行原理

    Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“ ,但我们⼀般⽤⼾,不能直接使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。那为什么不能直接使用kernel呢?

[user1@hcss-ecs-d397 ~]$ ls -a -l

上面的代码就是一个命令行,下面我将带着大家逐一拆讲每一部分:

命令提示符部分: [user1@hcss-ecs-d397 ~]$

  • user1:表示当前登录的用户名(也可以是root)
  • hcss-ecs-d397:主机名或服务器名称(每一个主机都不一样,可以在root权限下使用hostname这个命令进行更改)
  • ~:表示当前位于用户的家目录(home directory)(或者当前所在目录名)
  • $:普通用户权限提示符(root用户会显示为#)

命令主体部分: ls -a -l 这是一个常见的Linux文件列表命令,包含:

  • ls:list的缩写,基础命令用于列出目录内容
  • -a:all选项,显示所有文件(包括隐藏文件,Linux中隐藏文件以.开头)
  • -l:long listing format选项,以详细列表格式显示

    而其中,输出的命令行并不是由操作系统所提供的功能,而是由一个外壳程序所给我们打印出来、操作的。

原理图是这样的:

从技术⻆度,上图所对应的操作,在Shell中,其最简单定义:命令⾏解释器(command Interpreter)主要包含:

  • 使⽤者的命令翻译给核⼼(kernel)处理。
  • 同时,将核⼼的处理结果翻译给使⽤者。

对⽐windows GUI,我们操作 windows 不是直接操作windows内核,⽽是通过图形接⼝,点击,从⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤序)。

shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过shell解析给⽤⼾。

总的来说,shell就是一个外壳程序。

Linux权限的概念

 Linux当中的用户

在Linux中,用户分为两种用户:

  • 超级⽤⼾:可以再linux系统下做任何事情,不受限制 。(root用户,在windows中是administer)

  • 普通⽤⼾:在linux下做有限的事情。

PS:超级⽤⼾的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”。

我们可以使用 su 命令来从普通用户切换为超级用户:

su命令

命令:su [⽤⼾名]

功能:切换⽤⼾。

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

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

#su命令切换超级用户(root用户)时需要输入密码(密码是不显示的)。
#可以使用Ctrl + D 来切换用户#使用su来切换用户时,所处用户时不变的。
[user1@hcss-ecs-d397 ~]$ su 
Password: 
[root@hcss-ecs-d397 user1]# #使用su - 是以root身份重新登录一次,所以路径会发生改变。
[user1@hcss-ecs-d397 lession2]$ ls
ceshi  ce_shi.txt  other_zip  text.c[user1@hcss-ecs-d397 lession2]$ su -
Password: 
su: Authentication failure                #密码输入错误,需要重新输入[user1@hcss-ecs-d397 lession2]$ su -
Password: 
Last login: Tue Jul 29 18:30:12 CST 2025 on pts/0
Last failed login: Tue Jul 29 18:30:54 CST 2025 on pts/0
There were 2 failed login attempts since the last successful login.#使用Ctrl + D 时,会自动填充logout命令来退出当前用户
[root@hcss-ecs-d397 ~]# logout
[user1@hcss-ecs-d397 lession2]$ 

在Linux中,切换为超级用户(root)的主要作用是获得最高系统权限,以便执行需要管理员级别的操作。例如:

  • 安装或卸载软件包。
  • 修改系统配置文件(如/etc目录下的文件)。
  • 管理用户账户和权限。
  • 运行特权命令或服务。

这有助于系统维护和故障排除,但需谨慎使用,以避免安全风险或意外损坏系统。

通常建议通过sudo命令临时提升权限,而非长期保持root登录。

需要注意的是:以root用户身份登录普通用户时,是不需要密码的。

 所以,下面就要介绍 sudo命令。

sudo命令

命令:sudo [命令]

功能:短暂以root身份执行代码。

常用参数

参数作用示例
-u指定目标用户sudo -u bob whoami
-l列出当前用户可用命令sudo -l
-i启动目标用户的 shellsudo -i -u postgres
-v刷新认证有效期sudo -v

安全实践建议

  1. 避免直接使用sudo susudo -i进入 root shell
  2. 通过visudo命令编辑配置文件(语法检查防锁死)
  3. 遵循最小权限原则,仅授权必要命令

⚠️ 警告:滥用sudo可能导致系统损坏,例如sudo rm -rf /会彻底删除文件系统。

#查看现在登录的用户
[user1@hcss-ecs-d397 ceshi]$ whoami 
user1
#user1没有权限执行sudo
[user1@hcss-ecs-d397 ceshi]$ sudo whoami
[sudo] password for user1: 
user1 is not in the sudoers file.  This incident will be reported.
#切换超级用户
[user1@hcss-ecs-d397 ceshi]$ su
Password: 
#提权(修改文件)
[root@hcss-ecs-d397 ceshi]# vim /etc/sudoers
[root@hcss-ecs-d397 ceshi]# exit#再次执行命令
[user1@hcss-ecs-d397 ceshi]$ sudo whoami
[sudo] password for user1: 
root                                #用户为root(端在提权)[user1@hcss-ecs-d397 ceshi]$ 

 Linux权限管理

 来观察下面的命令行:

#user1用户创建文件
[user1@hcss-ecs-d397 ceshi]$ touch user_file
[user1@hcss-ecs-d397 ceshi]$ ll
total 0
-rw-rw-r-- 1 user1 user1 0 Jul 29 18:41 user_file#root用户创建文件
[user1@hcss-ecs-d397 ceshi]$ su
Password: 
[root@hcss-ecs-d397 ceshi]# ll
total 0
-rw-r--r-- 1 root  root  0 Jul 29 18:42 root_file
-rw-rw-r-- 1 user1 user1 0 Jul 29 18:41 user_file

 我们会发现,创建文件后,文件的属性会出现相关内容:

-rw-r--r--  1  root   root     0 Jul 29 18:42 root_file
-rw-rw-r-- 1 user1 user1  0 Jul 29 18:41 user_file 

其中,第一个名字为文件所属人,第二个名字为文件所属组。

前面的字符串(-rw-r--r--)为权限字段,下面会详细解释。

 所以,在访问文件时,分人

 ⽂件访问者的分类(⼈)

 在文件访问者中,分为一下三类:

  • ⽂件和⽂件⽬录的所有者:u---User(中国平⺠ 法律问题)
  • ⽂件和⽂件⽬录的所有者所在的组的⽤⼾:g---Group(不多说)
  • 其它⽤⼾:o---Others (外国⼈)

 而文件对访问者的所开发一下三个基本权限:

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

 所以,在上一篇博客中,给大家介绍ls时,出现下面表格:

类型所有者权限组权限其他权限大小日期名称
-rw-rw-r--827B07-19 19:49install.sh
drwxrwxr-x4KB07-17 01:51lesson2
drwxrwxr-x4KB07-19 19:52lesson7
drwxrwxr-x4KB05-01 18:44mydir

 其中,可以非常清楚来看到所有人所拥有的权限。下面给大家介绍两个有关文件权限所表示的方法。

文件权限值的表示方法

文件权限在Linux系统中主要有两种表示方法:字符表示法8进制数值表示法

字符表示法

字符表示法使用10个字符来表示文件权限:

第1位表示文件类型(文件类型在Linux命令大全-从入门到精通中给大家做了解释)

后9位分为3组,每组3位,分别表示:

第1组:所有者(user)权限

第2组:所属组(group)权限

第3组:其他用户(other)权限

每组中的3位依次表示读(r)、写(w)、执行(x)权限,而无相应权限用-表示

示例:

  •  - rwx r-x r--  表示:
    • 普通文件( - )
    • 所有者有读、写、执行权限( rwx)
    • 所属组有读、执行权限( r-x )
    • 其他用户只有读权限( r-- )
8进制数值表示法

8进制数值表示法使用3位8进制数表示权限,每位8进制数对应一组权限(所有者、所属组、其他用户):

  • 每个权限位对应一个数值:
    • 读(r) = 4
    • 写(w) = 2
    • 执行(x) = 1
    • 无权限 = 0
  • 将每组的权限数值相加得到该组的8进制值

示例:

  • 755 表示:
    • 所有者:4(r) + 2(w) + 1(x) = 7
    • 所属组:4(r) + 0 + 1(x) = 5
    • 其他用户:4(r) + 0 + 1(x) = 5
    • 对应字符表示为 -rwxr-xr-x

常见权限设置:

  • 644:所有者读写,其他用户只读
  • 755:所有者完全控制,其他用户读和执行
  • 777:所有用户都有完全权限(不推荐使用)

那么,我们有该如何去修改用户所对应的权限呢?

⽂件访问权限的相关设置⽅法

chmod命令

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

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

常⽤选项:R -> 递归修改⽬录⽂件的权限

说明:只有⽂件的拥有者和root才可以改变⽂件的权限

chmod命令权限值的格式:

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

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

⽤⼾符号:

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

 代码示例:

#修改文件权限,将rwx权限都不赋予。
[root@hcss-ecs-d397 ceshi]# chmod a-rwx root_file 
[root@hcss-ecs-d397 ceshi]# ll
total 0
---------- 1 root  root  0 Jul 29 18:42 root_file
-rw-rw-r-- 1 user1 user1 0 Jul 29 18:41 user_file#修改文件,赋予其 rwx 权限给拥有者 ;rw权限给所属组 ; r权限给其他人。
[root@hcss-ecs-d397 ceshi]# chmod u+rwx root_file [root@hcss-ecs-d397 ceshi]# chmod o+r root_file [root@hcss-ecs-d397 ceshi]# chmod g+rw root_file [root@hcss-ecs-d397 ceshi]# ll
total 0
-rwxrw-r-- 1 root  root  0 Jul 29 18:42 root_file
-rw-rw-r-- 1 user1 user1 0 Jul 29 18:41 user_file#使用三位8进制数字来修改文件权限
[root@hcss-ecs-d397 ceshi]# chmod 224 user_file [root@hcss-ecs-d397 ceshi]# ll
total 0
-rwxrw-r-- 1 root  root  0 Jul 29 18:42 root_file
--w--w-r-- 1 user1 user1 0 Jul 29 18:41 user_file
chown命令

功能:修改文件所有者
格式:chown [选项] 用户名 文件名

示例:

chown user1 f1

chown -R user1 filegroup1(递归修改整个目录组的所有者)

chgrp命令

功能:修改文件或目录所属组
格式:chgrp [选项] 用户组名 文件名

常用选项:

-R 递归修改文件或目录的所属组
示例:

chgrp users /abc/f2

umask命令

功能:

  • 查看或修改文件权限掩码
  • 设置新建文件的默认权限(0666)
  • 设置新建目录的默认权限(0777)

实际创建的文件/目录权限会受umask值影响。计算方式为:默认权限 & ~umask

格式: umask [权限值]

说明:

  • 通过默认权限减去权限掩码得到最终权限
  • 超级用户默认掩码:0022
  • 普通用户默认掩码:0002

示例:

  • umask 755 # 设置权限掩码
  • umask # 查看当前掩码
  • umask 044 # 修改掩码值

Linux 目录权限与粘滞位详解

1. 目录权限的作用

Linux 中的目录权限决定了用户对目录及其内容的操作能力:

可执行权限(x)

功能:允许用户进入目录(cd)或执行目录中的命令

关键限制

若无 -x 权限,即使用户拥有 -r 权限,也无法进入目录

示例:可执行 ls -l /home/ 查看内容,但 cd /home/ 会失败

可读权限(r)

功能:允许用户查看目录中的文件列表(如 ls

关键限制

若无 -r 权限,用户无法列出文件,但拥有 -x 权限时仍可通过已知路径操作文件(需文件权限支持)

可写权限(w)

功能:允许用户在目录中创建或删除文件/子目录

安全隐患

任何用户都可删除目录中的文件,不论文件所有者是谁

示例:

[root@localhost ~]$ chmod 777 /home/
[root@localhost ~]$ touch /home/root.c
[litao@localhost ~]$ rm /home/root.c  # 普通用户可删除root创建的文件
2. 粘滞位(Sticky Bit)的作用

为解决"目录写权限导致任意用户删除他人文件"的问题,Linux 引入了粘滞位机制。

  • 功能
    设置后,目录中的文件仅允许以下用户删除或重命名:

    1. 文件所有者
    2. 目录所有者
    3. root 用户
  • 设置方法

    chmod +t /path/to/directory   # 添加粘滞位
    chmod -t /path/to/directory   # 移除粘滞位
    
  • 查看方法
    执行 ls -ld 查看目录权限:

    [root@localhost ~]$ ls -ld /home/
    drwxrwxrwt. 3 root root 4096 9月19日16:00 /home/  # 权限末尾的't'表示粘滞位生效
    
  • 效果验证

    [root@localhost ~]$ chmod +t /home/
    [litao@localhost ~]$ rm /home/abc.c
    rm: 无法删除"/home/abc.c": 不允许的操作
    
3. 权限总结表
权限功能注意事项
可执行(x)允许进入目录或执行命令-x权限时,即使有-r也无法进入目录
可读(r)允许查看目录内容-r权限时无法列出文件
可写(w)允许创建/删除文件任何用户都可删除目录中的文件
粘滞位(t)限制文件删除权限常用于公共目录防止误删


小结

Linux采用读(r)、写(w)、执行(x)三种基本权限来控制系统资源访问。这些权限分别作用于三类对象:

  1. 用户(u):文件所有者
  2. 组(g):所属用户组
  3. 其他(o):其他所有用户

主要权限管理命令包括:

  • chmod:修改权限(支持数字模式755或符号模式u+rx)
  • chown:变更文件所有者
  • chgrp:修改文件所属组
  • umask:设置默认权限(如022对应文件默认权限644)

目录权限特点:

  • 执行权限(x):允许进入目录(cd命令)
  • 写权限(w):可创建/删除文件(需注意安全隐患)
  • 粘滞位(Sticky Bit):通过chmod +t设置,限制只有文件所有者、目录所有者或root能删除文件(常用于/tmp等共享目录)

下一章将会讲解有关linux中一个工具的使用:vim,关注博主,获取更多优质好文吧。

我们下次再见啦

http://www.xdnf.cn/news/1210375.html

相关文章:

  • 书籍推荐算法研究
  • gRPC性能陷阱:低延迟网络下的客户端瓶颈揭秘
  • Spark SQL 数组函数合集:array_agg、array_contains、array_sort…详解
  • Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:GPIO扩展与中断控制技术,万字详解!!
  • 【变更性别】
  • TCPDump实战手册:协议/端口/IP过滤与组合分析指南
  • ESP32学习-1.第一个程序helloworld
  • 子数组和 问题汇总
  • FPGA实现SRIO高速接口与DSP交互,FPGA+DSP异构方案,提供3套工程源码和技术支持
  • Linux_库制作与原理浅理解
  • Python高效历史记录管理:保存最后N个元素的完整指南
  • 【CSS】盒子类型
  • 功率场效应晶体管MOSFET关键指标
  • leaflet中绘制轨迹线的大量轨迹点,解决大量 marker 绑定 tooltip 同时显示导致的性能问题
  • 车载刷写架构 --- 刷写思考扩展
  • Redis的持久化策略-AOF和RDB(详细图解)
  • Java面试宝典:MySQL8新特性底层原理
  • Vue2 vs Vue3:核心差异与升级亮点
  • DeepSeek MoE 技术解析:模型架构、通信优化与负载均衡
  • 飞书 —— 多维表格 —— AI生成
  • 系统学习算法:专题十五 哈希表
  • 数据库02 网页html01 day44
  • 抵御酒店管理系统收银终端篡改攻击 API 加密的好处及实现——仙盟创梦IDE
  • 如何创建一个 Solana 钱包?
  • 文件操作与IO流
  • 如何编写好的测试用例?
  • 泛微E9 引入高版本spring导致webservices接口报错
  • 青少年软件编程图形化Scratch等级考试试卷(四级)2025年6月
  • SpringBoot之起步依赖
  • 在 Web3 时代通过自我主权合规重塑 KYC/AML