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

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

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Poseidon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值