深入理解 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>显示指定用户最近一次登录信息(默认显示所有用户)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle版本、补丁及升级(12)——版本体系

12.1. 版本体系 Oracle作为最流行的一款关系数据库软件产品,其拥有自己一套成熟的版本管理体系。具体版本体系以12c为分界线,前后版本体系分别不同。 ​​​​​​​12.1.1. 12c之前版本 12c之前的Oracle,版本共有5位阿拉伯数字组成,其中的每位数字,都有各自的含义,具…

Maven 中的 pom.xml 文件

目录标题 1、根标签 <project> 的直接子标签顺序​2、常见子标签内部顺序​2.1、<build> 标签内部顺序2.2、<dependencies> 标签内部顺序 3、modelVersion 为什么是 4.0.0 &#xff1f;4、<parent> 标签&#xff1f;​​4.1、为什么需要 <parent>…

方案精读:华为与中软-智慧园区解决方案技术主打胶片【附全文阅读】

该文档是华为与中软国际的智慧园区轻量化解决方案推介&#xff0c;主要面向园区管理者、运营者及相关企业决策人。其核心围绕园区痛点&#xff0c;阐述智慧园区的发展趋势。 方案涵盖综合安防、便捷通行、设备管理等多领域应用场景&#xff0c;通过智能视频监控、人脸识别、远程…

# KVstorageBaseRaft-cpp 项目 RPC 模块源码学习

KVstorageBaseRaft-cpp 项目 RPC 模块源码学习 。 一、项目简介 KVstorageBaseRaft-cpp 是一个基于 Raft 一致性算法实现的分布式 KV 存储系统&#xff0c;采用 C 开发。项目的核心目标是帮助开发者理解 Raft 原理和分布式 KV 存储的基本实现。RPC 模块是分布式系统通信的关…

TeledyneLeCroy在OFC2025 EA展台上展示了其400G/800G的全包围的测试解决方案,满足了UEC联盟和UALINK联盟的技术需求

Teledyne LeCroy在OFC 2025上的EA展台 在2025年3月26日至28日于美国圣地亚哥举办的OFC&#xff08;Optical Fiber Communication Conference and Exhibition&#xff09;展会上&#xff0c;全球领先的测试测量解决方案提供商Teledyne LeCroy隆重展示了其最新研发的800G网络测试…

新一代电动门“攻克”行业痛点,远峰科技打造“智能出入”新标杆

在2025上海国际车展期间&#xff0c;远峰科技举办了一场面向车企合作伙伴和媒体的智能汽车解决方案实车展示会。 在这其中&#xff0c;远峰科技的新一代电动门首次亮相&#xff0c;突破性的解决了行业普遍存在的“运行抖动不平顺”、“窄车位车门开度过小”、“障碍物识别不准…

WEB UI自动化测试之Pytest框架学习

文章目录 前言Pytest简介Pytest安装Pytest的常用插件Pytest的命名约束Pytest的运行方式Pytest运行方式与unittest对比主函数运行命令行运行执行结果代码说明 pytest.ini配置文件方式运行&#xff08;推荐&#xff09;使用markers标记测试用例 pytest中添加Fixture&#xff08;测…

机器学习简单概述

Chatgpt回答&#xff1a; 机器学习&#xff1a;机器学习是人工智能的一个分支&#xff0c;侧重于通过数据训练模型&#xff0c;使计算机能够根据数据进行预测、分类、回归等任务。它通过算法从历史数据中学习规律&#xff0c;然后在新数据上进行推断。机器学习包括多种算法&…

openjdk底层汇编指令调用(一)——汇编指令及指令编码基础

汇编指令 计算机在执行过程时只识别代表0或者1的电信号。因此为了让计算机能够执行则须向计算机输入一系列01构成的指令。 例如在x64平台下&#xff0c;0x53&#xff0c;二进制为01010011&#xff0c;表示将rbx寄存器中的值压栈。 但是&#xff0c;对于程序员而言&#xff0c;…

Python Day 22 学习

学习讲义Day14安排的内容&#xff1a;SHAP图的绘制 SHAP模型的基本概念 参考学习的帖子&#xff1a;SHAP 可视化解释机器学习模型简介_shap图-CSDN博客 以下为学习该篇帖子的理解记录&#xff1a; Q. 什么是SHAP模型&#xff1f;它与机器学习模型的区别在哪儿&#xff1f; …

48.辐射发射RE和传导发射CE测试方法分析

辐射发射RE和传导发射CE测试方法分析 1. 所有测试项目总结2. 辐射发射RE测试方法3. 传到发射CE测试方法 1. 所有测试项目总结 所有EMC测试项目都是基于模拟现实的。 模拟现实中可能发生的各种真实场景&#xff0c;然后统计总结出各种场景下的真实应力&#xff0c;并通过制造测…

在 Vue 3 中实现刮刮乐抽奖

&#x1f389; 在 Vue 3 中实现刮刮乐抽奖 当项目中需要做一些活动互动页时&#xff0c;需要实现刮刮乐&#xff0c;请看如下效果&#xff1a; 这里感谢github用户Choicc分享的组件&#xff0c;具体可点击传送门查看 1. 引入组件 将/src/components下ScratchCard.vue复制到自…

c语言第一个小游戏:贪吃蛇小游戏01

hello啊大家好 今天我们用一个小游戏来增强我们的c语言&#xff01; 那就是贪吃蛇 为什么要做一个贪吃蛇小游戏呢&#xff1f; 因为这个小游戏所涉及到的知识有c语言的指针、数组、链表、函数等等可以让我们通过这个游戏来巩固c语言&#xff0c;进一步认识c语言。 一.我们先…

实战项目1(02)

目录 任务场景一 【sw1和sw2的配置如下】 任务场景二 【sw3的配置】 【sw4-6的配置】 任务场景一 某公司有生产、销售、研发、人事、财务等多个部门&#xff0c;这些部门分别连接在两台交换机&#xff08;SW1和SW2&#xff09;上&#xff0c;现要求给每个部门划分相应的V…

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南

一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…

Linux: 信号【阻塞和捕捉信号】

Linux&#xff1a; 信号【阻塞和捕捉信号】 &#xff08;一&#xff09;阻塞信号1.信号其他相关的概念2.在内核中表示3.sigset_t4.信号集操作函数5.sigprocmask&#xff08;设置阻塞&#xff09;6.sigpending&#xff08;得到未决状态&#xff09; &#xff08;二&#xff09;捕…

MySQL 数据库集群部署、性能优化及高可用架构设计

MySQL 数据库集群部署、性能优化及高可用架构设计 集群部署方案 1. 主从复制架构 传统主从复制&#xff1a;配置一个主库(Master)和多个从库(Slave)GTID复制&#xff1a;基于全局事务标识符的复制&#xff0c;简化故障转移半同步复制&#xff1a;确保至少一个从库接收到数据…

Java 多态:原理与实例深度剖析

一、多态概述 在 Java 面向对象编程体系中&#xff0c;多态是构建灵活、可扩展程序的核心机制之一&#xff0c;与封装、继承并称为面向对象的三大特性。其本质是同一操作作用于不同对象&#xff0c;产生不同的执行结果&#xff0c;这使得程序在运行时能根据实际对象类型动态调…

解决使用宝塔Linux部署前后端分离项目遇到的问题

问题一&#xff1a;访问域名转圈圈&#xff0c;显示404,403 没有解决跨域问题&#xff0c;在后端yml中设置content&#xff1a;/prod&#xff08;生产环境&#xff09;&#xff0c;在前端.env文件中将http&#xff1a;//127.0.0.1:8080/替换为公网IP&#xff0c;并在vite.conf…

《Python星球日记》 第54天:卷积神经网络进阶

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、深度CNN架构解析1. LeNet-5&#xff08;1998&#xff09;2. AlexNet&#x…