15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
16.08.2025

如何检查 Linux 中的文件权限:完整指南

Linux 为全球大多数服务器提供动力——从 VPS Hosting 环境到企业级 Dedicated Servers——这是有充分理由的。它速度快、稳定,并且在核心处内置了安全性。该安全性的最基本支柱之一是 文件权限系统:一种精确、优雅的机制,可以精确控制谁可以读取、修改或执行系统上的任何文件或目录。

无论您是部署 Web 应用程序的开发人员、加固服务器的系统管理员,还是学习命令行的初学者,了解如何检查和解释 Linux 中的文件权限是一项不可协商的技能。本指南涵盖您需要了解的所有内容——从权限模型的基础到高级特殊位——包含实用命令和真实示例。

什么是 Linux 文件权限?

Linux 中的每个文件和目录都附加了一组 权限。这些权限定义了允许哪些操作以及由谁执行。有三种核心权限类型:

权限符号对文件的作用对目录的作用
读取r查看文件的内容列出内部文件的名称
写入w修改或删除文件在内部创建或删除文件
执行x将文件作为程序运行进入(导航到)目录

这三个权限独立应用于三个不同的 用户类别

  • 所有者(用户)——拥有文件的用户,通常是其创建者。
  • ——属于文件分配组的任何用户。
  • 其他——系统上的其他所有人。

这个三乘三的权限矩阵为 Linux 管理员提供了对系统上每个资源的细粒度、强大的访问控制。

如何检查文件权限:ls -l 命令

检查文件权限最快、最常用的方法是 ls -l 命令(长列表格式)。

ls -l file.txt

示例输出:

-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txt

让我们分解此输出的每个组件:

-  rw-  r--  r--   1   alice   developers   1024   Aug 16 12:30   file.txt
│   │    │    │    │     │          │          │         │             │
│   │    │    │    │     │          │          │         │             └─ Filename
│   │    │    │    │     │          │          │         └─ Last modified
│   │    │    │    │     │          │          └─ File size (bytes)
│   │    │    │    │     │          └─ Group name
│   │    │    │    │     └─ Owner name
│   │    │    │    └─ Number of hard links
│   │    │    └─ Others' permissions
│   │    └─ Group's permissions
│   └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)

所以 -rw-r--r-- 告诉我们:

  • 所有者(alice):读取 + 写入(rw-
  • 组(developers):仅读取(r--
  • 其他:仅读取(r--

检查多个文件的权限

要一次查看目录中所有文件的权限:

ls -la /var/www/html

-a 标志包括隐藏文件(以点开头的文件)。这在审计 Shared Web Hosting 或 VPS 环境中的 Web 服务器目录时特别有用。

使用 stat 获取详细权限信息

要获得更全面的分解——包括符号和数字表示——使用 stat 命令:

stat file.txt

示例输出:

  File: file.txt
  Size: 1024            Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 131073      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   alice)   Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000

关键行是:

Access: (0644/-rw-r--r--)  Uid: ( 1000/   alice)   Gid: ( 1000/developers)

这为您提供:

  • 数字(八进制)表示法: 0644
  • 符号表示法: -rw-r--r--
  • 用户 ID (UID)组 ID (GID) 及其人类可读的名称

stat 命令在生产服务器上排查权限错误时非常宝贵,因为它在单个输出中提供了所需的所有上下文。

理解数字(八进制)权限表示法

Linux 权限可以表示为数字,这是 chmod 等命令使用的格式。每个权限类型都分配了一个值:

权限数字值
读取(r4
写入(w2
执行(x1
无权限(-0

您通过 相加 值来计算每个用户类别的权限值:

组合计算数字值
rwx4 + 2 + 17
rw-4 + 2 + 06
r-x4 + 0 + 15
r--4 + 0 + 04
---0 + 0 + 00

一个三位八进制数表示完整的权限集:

0644  →  Owner: 6 (rw-)  |  Group: 4 (r--)  |  Others: 4 (r--)
0755  →  Owner: 7 (rwx)  |  Group: 5 (r-x)  |  Others: 5 (r-x)
0700  →  Owner: 7 (rwx)  |  Group: 0 (---)  |  Others: 0 (---)

检查目录的权限

目录使用相同的权限模型,但每个位的含义略有不同。使用 ls -ld(注意 -d 标志)来检查目录本身而不是其内容:

ls -ld myfolder

示例输出:

drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolder

前导 d 确认这是一个目录。权限分解为:

  • 所有者(alice): rwx——可以列出、创建/删除文件并进入目录
  • 组(developers): r-x——可以列出文件并进入,但无法创建或删除
  • 其他: ---——完全无法访问

> 重要:目录上的执行位(x)意味着能够 进入 它(即使用 cd)。没有 x,用户无法导航到目录,即使他们有读取权限。这是新手常见的混淆来源。

特殊权限位:setuid、setgid 和粘性位

除了标准的九个权限位之外,Linux 还支持三个 特殊权限位,提供高级访问控制:

1. setuid(s 在所有者的执行位上)

当在 可执行文件 上设置时,程序以 文件所有者的权限 而不是调用用户的权限运行。这是 passwd 等命令如何允许普通用户修改 /etc/shadow(由 root 拥有)的方式。

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwd

所有者执行位置中的 s 表示 setuid。

2. setgid(s 在组的执行位上)

文件 上,程序以 组的权限 运行。在 目录 上,在内部创建的新文件自动继承目录的组——对于共享项目文件夹很有用。

ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project

3. 粘性位(t 在其他人的执行位上)

当在 目录 上设置时,只有 文件的所有者(或 root)可以删除或重命名其中的文件,即使其他人有写入权限。这是 /tmp 的标准配置:

ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmp

末尾的 t 表示粘性位处于活动状态。

特殊位的数字表示:

特殊位数字值
setuid4000
setgid2000
粘性位1000

所以 drwxrwxrwt = 1777(1000 + 777)。

完整权限参考表

符号数字对文件的含义对目录的含义
---0无访问权限无访问权限
--x1仅执行仅进入
-w-2仅写入修改内容(带 x
-wx3写入 + 执行进入并修改
r--4仅读取列出名称(需要 x 才能有用)
r-x5读取 + 执行列出并进入
rw-6读取 + 写入列出并修改(不进入)
rwx7完全访问完全控制

真实世界权限示例

以下是您在实践中最常遇到的权限模式:

-rw-r--r--(0644)——标准文件

-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txt

所有者可以读取和写入。组和其他人只能读取。典型用于配置文件和 Web 内容。

-rwxr-xr-x(0755)——可执行脚本或二进制文件

-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.sh

所有者拥有完全访问权限。其他所有人可以读取和执行,但无法修改。标准用于 shell 脚本、Web 服务器二进制文件和公共可执行文件。

-rw-------(0600)——私有文件

-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsa

只有所有者可以读取或写入。其他人无法访问。SSH 私钥需要此权限——SSH 将拒绝使用权限更广泛的密钥文件。

drwxr-xr-x(0755)——标准公共目录

drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_html

Web 根目录的常见设置。所有者拥有完全控制权;其他人可以浏览和进入。

drwx------(0700)——私有目录

drwx------ 3 alice alice 4096 Aug 16 12:30 .ssh

完全私有。只有所有者可以访问。~/.ssh 目录需要此权限。

drwxrwxrwt(1777)——带粘性位的世界可写

drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmp

每个人都可以创建文件,但只有每个文件的所有者可以删除他们自己的文件。

服务器环境的实用提示

如果您管理 Linux 服务器——无论是运行 Web 应用程序的 VPS、使用 SSL Certificate 保护的邮件服务器,还是托管通过 Domain Registration 注册的多个域的机器——以下是一些基本的权限最佳实践:

  1. 永远不要在文件或目录上设置 777,除非您有非常具体的临时原因。世界可写文件是一个重大安全风险。
  2. Web 服务器文件(例如,在 /var/www/ 下)通常应为 644(文件)和 755(目录),由您的应用程序用户拥有。
  3. SSH 密钥必须是 600(私钥)和 644(公钥)。SSH 严格执行此操作。
15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用