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

深入理解 Linux 权限控制机制

引言

在 Linux 系统中,权限控制是保障系统安全的核心机制。通过限制用户对文件和资源的访问,它能有效防止未授权操作,保护数据不被篡改或泄露。合理设置权限不仅有助于实现用户隔离最小权限原则,还能降低系统被滥用或攻击的风险,是每位系统管理员必须掌握的基础技能。
在 Web 服务管理中,权限控制尤为重要。多数情况下,即便攻击者利用漏洞入侵,所获得的权限也仅限于普通用户级别。正是依靠 Linux 严格的权限机制,才能将 Web 漏洞的影响局限在最小范围内,避免演变为更严重的系统级破坏。关于 Linux 系统中常见的权限提升手法,可以参考这个专栏:点击查看。

用户与用户组在 Linux 中的记录机制,可以参考这篇文章了解更多细节:Linux提权原理

ls -l 命令详解

示例

-rwxr-xr-x   1 root root  25451544 Apr 19 15:22 d-eyes
字段示例值含义说明
文件类型+权限-rwxr-xr-x- 表示普通文件;rwx 为所有者权限,r-x 为组权限,r-x 为其他用户权限
硬链接数1指向该文件的硬链接数量,普通文件通常为 1
所有者(用户)root文件所有者
所属组(用户组)root文件所属的用户组
文件大小25451544文件大小(以字节为单位),约 24.3 MB
修改时间Apr 19 15:22文件最后修改时间
文件名d-eyes文件的名称
Linux 权限基础
用户、用户组与其他用户的权限

在 Linux 中,每个文件或目录都归属于一个特定的用户(owner)和用户组(group)。系统通过权限位将访问控制划分为三类主体:文件所有者(用户)所属用户组成员以及其他用户(others),每类主体都可以拥有各自的权限设置。

截屏2025-04-24 19.22.55

⚠️ :除去最前面的文件类型符号,后面的每三个字符依次表示所有者用户组其他用户的权限。

这种三段式的权限模型,使得 Linux 能够灵活地控制资源的访问,既能保护敏感数据,也能根据需要开放部分资源,确保系统的安全与多用户协作效率。

权限的类型

在 Linux 中,每个文件或目录的权限由三种基本类型组成:

  • r(read)读权限
    • 对文件:允许查看文件内容
    • 对目录:允许列出目录中的文件和子目录
  • w(write)写权限
    • 对文件:允许修改或覆盖文件内容
    • 对目录:允许在目录中创建、删除或重命名文件和子目录
  • x(execute)执行权限
    • 对文件:允许将文件作为程序运行
    • 对目录:允许使用 cd 命令进入该目录
查看与修改文件权限
使用 ls -l 查看权限

在 Linux 中,可以使用 ls -l 命令查看文件或目录的权限信息,输出内容包括权限、所有者、用户组、文件大小和修改时间等。若加上 -a 参数(即 ls -la),还能查看隐藏文件的权限情况。需要特别注意的是,权限字段的最左侧字符表示文件类型:- 表示普通文件,d 表示目录,l 表示符号链接等。

使用 chmod 修改权限
符号法(适合读写改)
chmod u+x script.sh     # 给所有者添加执行权限
chmod go-w file.txt     # 移除用户组和其他用户的写权限
chmod a+r config.cfg    # 所有人添加读权限
数字法(适合整体设置)

权限通过三位八进制数表示,每位分别对应所有者、用户组和其他用户。

  • 读(r)= 4,写(w)= 2,执行(x)= 1,叠加计算
chmod 755 run.sh        # 所有者 rwx,用户组和其他用户 rx
chmod 644 index.html    # 所有者 rw,用户组和其他用户 r

在实际使用中,我常通过 chmod +x examp 给可执行程序添加执行权限。需要注意的是,不建议直接使用 chmod 777 这样的权限设置,因为它会赋予所有用户读、写、执行权限,等于完全开放,可能导致系统权限控制形同虚设,带来安全隐患。

文件所有者与用户组管理

在 Linux 中,每个文件或目录都有一个所有者(user)和一个所属用户组(group),它们决定了该文件的访问权限归属。合理设置文件的所有权是权限控制的重要组成部分。

文件所有者

文件的所有者通常是创建该文件的用户,拥有对文件最全面的控制权限。所有者可以使用 chmod 修改权限,也可以通过 chown 更改所有权。

在 Linux 中,文件所有者对文件具有最高的权限控制能力。除非主动赋权,其他用户无法查看、修改或执行该文件。这种机制是 Linux 用于保护用户数据安全和隐私的核心方式之一。

只有在所有者显式开放权限后,其他用户才能访问该文件。但如果系统仅区分“文件所有者”和“其他用户”,那么一旦授权,所有非所有者用户都将获得访问权限,这在实际使用中往往过于宽泛。

查看所有者

ls -l filename

截屏2025-04-24 19.38.52

第一个root所在的位置为文件所有者。

修改文件所有者

sudo chown newuser filename

用户组

用户组是 Linux 中用于归类管理用户的机制。每个文件或目录都归属于一个用户组,组内用户可以根据设定的权限访问或修改资源。通过用户组,文件所有者可以仅向特定用户开放权限,而非对所有其他用户一视同仁。当文件所有者与部分用户属于同一组时,只需为该组设置权限,这些用户即可访问文件,而其他用户仍被限制。这种方式在团队协作中尤为实用,能够实现团队成员间资源共享,同时对非成员保持私有。

查看用户组
# 查看当前用户所属的所有组
groups
# 查看指定用户的所属组
groups 用户名
# 查看系统中所有用户组
cat /etc/group
# 优化输出
cut -d: -f1 /etc/group
修改文件所属用户组
sudo chown 用户名:用户组 文件名
sudo chgrp newgroup 文件名
特殊权限

除了基本的 r(读)、w(写)、x(执行)权限外,Linux 还支持三种特殊权限,用于增强权限控制,常用于提升系统安全性或实现特定功能。下图可以看到一些隐藏文件或系统文件设置了这些特殊权限,以确保它们在共享、执行或删除时受到更严格的管理。

截屏2025-04-24 19.51.43

SUID(Set User ID)

SUID 设定后,用户执行该文件时,将临时以文件所有者的身份运行。常见于需要普通用户执行部分系统操作的程序,如 passwd
chmod u+s 文件名
权限标识:所有者的执行位显示为 s,如 -rwsr-xr-x

SGID(Set Group ID)

SGID 对文件作用类似于 SUID,而对目录则更常见,表示新建的文件将继承目录的所属组。常用于共享目录。
设置命令:chmod g+s 目录名
权限标识:组执行位显示为 s,如 drwxr-sr-x

Sticky Bit

设置 Sticky Bit 后,目录中的文件只能被其所有者或 root 删除,即使其他用户拥有写权限。常用于 /tmp 目录。
设置命令:chmod +t 目录名
权限标识:其他用户执行位显示为 t,如 drwxrwxrwt

用户身份管理
身份切换

在 Linux 系统中,出于安全考虑,日常使用一般不建议直接以 root 用户登录。但某些操作需要 root 权限,这时可以通过用户身份切换命令完成。常用命令有两种:susudo

su命令(Switch User)

su [options] [username]
用于切换到指定用户身份,若不指定 username,则默认切换为 root 用户。

常用参数说明:

  • --l:使用 login shell 的方式读取目标用户的环境变量(推荐使用)
  • -m:保留当前用户的环境设置
  • -c "command":仅执行一次命令后返回当前身份

区别说明:

  • su:切换用户但不加载目标用户环境(non-login shell),如 PATH 变量等不会更新
  • su -:切换并加载目标用户完整环境(login shell),推荐使用

注意事项: 使用 su 切换到 root 时需要输入 root 用户密码。完成操作后可使用 exit 返回原用户。

sudo 命令(Superuser Do)

sudo 允许普通用户在不知晓 root 密码的情况下,临时以 root 权限执行命令。前提是该用户已被授权使用 sudo,授权信息存储在 /etc/sudoers 文件中。

执行流程:

  1. 系统检查当前用户是否在 sudo 白名单中(通过 /etc/sudoers
  2. 若有权限,用户输入自己的密码(root 用户免密)
  3. 验证通过后执行命令
sudoers文件配置

sudoers 文件用于配置哪些用户或用户组可以使用 sudo 以及他们能以何种身份执行哪些命令。

截屏2025-04-25 10.59.07

格式说明:

用户名 主机名=(可切换身份:目标组) 可执行命令

示例:

testuser    ALL=(ALL:ALL)              ALL        # 可切换为任意用户身份,执行任意命令
testuser    ALL=(root:root)            ALL        # 仅能以 root 身份执行任意命令
testuser    ALL=(root:root)    /usr/bin/passwd    # 仅能以 root 身份执行 passwd 命令

这种权限分配机制保证了在保障系统安全的同时,也赋予用户必要的操作能力。如果你有团队管理需求,还可以通过用户组与 sudoers 配合实现更细粒度的权限控制。

查询用户信息

Linux 提供了多种命令,用于查询当前或指定用户的相关信息,常见命令如下:

命令功能说明
id <user>显示指定用户的 UID、GID、所属用户组等信息(默认显示当前用户)
who am i / who -m显示当前登录会话用户的信息(来源于登录终端)
whoami显示当前有效用户的用户名(可能与登录用户不同)
w显示当前系统所有登录用户的信息及其活动状态
who显示当前系统所有登录用户的信息
last <user>显示指定用户的历史登录记录(默认显示当前用户)
lastlog -u <user>显示指定用户最近一次登录信息(默认显示所有用户)

注:此处不再展示各命令的执行效果,建议读者自行实验。

相关文章:

  • [思维模式-29]:《本质思考力》-9- 两种相反的构建与解构系统的思维模式:①自顶向下的规划、分解、牵引;②自底向上的堆叠、聚合。
  • Java--图书管理系统(简易版优化)
  • 基于zernike 拟合生成包裹训练数据-可自定义拟合的项数
  • MySQL数据库容灾设计案例与SQL实现
  • stm32week15
  • Linux之进程概念
  • 命令行解释器中shell、bash和zsh的区别
  • Linux中常见开发工具简单介绍
  • 微软向现实低头:悄悄延长Windows 10的Microsoft 365支持
  • Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出
  • k8s的flannel生产实战与常见问题排查
  • 设计模式简述(十八)享元模式
  • 游戏引擎学习第274天:基于弹簧的动态动画
  • 5.1.1 WPF中Command使用介绍
  • 2025第九届御网杯网络安全大赛线上赛 区域赛WP (MISC和Crypto)(详解-思路-脚本)
  • 力扣刷题——二分查找总结
  • 三、Hive DDL数据库操作
  • [工具]B站缓存工具箱 (By 郭逍遥)
  • 【LeetCode Hot100 | 每日刷题】排序数组
  • Python中,async和with结合使用,有什么好处?
  • 多家外资看好中国市场!野村建议“战术超配”,花旗上调恒指目标价
  • 中国女足将于5月17日至6月2日赴美国集训并参加邀请赛
  • 从“求生”到“生活”:医保纳入创新药让梗阻性肥厚型心肌病患者重拾生活掌控权
  • 印巴战火LIVE丨“快速接近战争状态”?印度袭击巴军事基地,巴启动反制军事行动
  • 兵韬志略|美2026国防预算未达1万亿,但仍寻求“暗度陈仓”
  • 经济日报刊文:品牌经营不能让情怀唱“独角戏”