为啥这个文件我删不了??? 浅析 Linux 文件权限

91 阅读3分钟

Linux 文件权限是控制文件和目录访问的核心机制,决定用户可以对文件执行的操作。本文将以简明的技术语言介绍 Linux 文件权限的组成、查看方式、修改方法及实际应用,适合初学者了解基础知识。

  1. 文件权限的定义

Linux 文件权限定义了三类用户的访问权限:

  • 所有者(User):创建文件的用户。
  • 组(Group):与文件关联的用户组。
  • 其他用户(Others):除所有者和组成员外的用户。

每类用户有三种权限:

  • 读(r, read):允许读取文件内容或列出目录内容。
  • 写(w, write):允许修改文件内容或在目录中创建/删除文件。
  • 执行(x, execute):允许运行可执行文件或进入目录。
  1. 查看文件权限

使用 ls -l 命令查看文件或目录权限。例如:

bash

ls -l

输出:

-rwxr-xr-x 1 alice alice 1234 Jun 25 12:00 myfile.sh
  • 第一个字符(-):表示文件类型,- 为普通文件,d 为目录。

  • 后续 9 个字符分为三组:

    • 第 2-4 位(rwx):所有者权限,读+写+执行。
    • 第 5-7 位(r-x):组权限,读+执行。
    • 第 8-10 位(r-x):其他用户权限,读+执行。

权限也可用数字表示:

  • 读(r)= 4,写(w)= 2,执行(x)= 1,无权限 = 0。
  • 每组权限的数字为三者之和。例如,rwx = 4+2+1 = 7,r-x = 4+1 = 5。 因此,rwxr-xr-x 对应数字 755。
  1. 修改文件权限

使用 chmod(change mode)命令修改权限,支持两种模式:

字母模式

通过 u(所有者)、g(组)、o(其他用户)和 +(添加)、-(移除)、=(设定)调整权限。例如:

  • 给其他用户添加写权限:

    bash

    chmod o+w myfile.sh
    

    原权限 rwxr-xr-x(755)变为 rwxr-xrwx(777)。

  • 移除组的执行权限:

    bash

    chmod g-x myfile.sh
    

    原权限 rwxr-xr-x(755)变为 rwxr--r-x(745)。

数字模式

用三位数字直接设置权限。例如:

bash

chmod 655 myfile.sh

权限变为 rw-r-xr-x:

  • 所有者:6(读+写,4+2)
  • 组:5(读+执行,4+1)
  • 其他用户:5(读+执行,4+1)
  1. 删除文件的权限要求

删除文件需要对文件所在目录有写(w)和执行(x)权限,即使文件本身没有写权限。例如,目录权限为 rwxr-xrwx(777),任何用户都可删除目录中的文件。

  1. 权限设置注意事项
  • 避免 777 权限:rwxrwxrwx 允许所有用户读、写、执行,存在安全风险,仅用于临时共享。

  • 谨慎使用 root 权限:通过 sudo 修改权限时,需确保不会影响系统文件安全。

  • 使用组或 ACL:多人协作时,可通过组权限或访问控制列表(ACL)精确分配权限。例如:

    bash

    setfacl -m u:bob:rw myfile.sh
    

    授予用户 bob 读写权限。

  1. 实际应用:PHP 程序权限设置

以运行 PHP 程序为例,假设程序在 /var/www/html/myapp,由 webroot 用户执行:

  1. 设置目录权限,允许 webroot 读写执行:

    bash

    chmod -R 755 /var/www/html/myapp
    chown -R webroot:webroot /var/www/html/myapp
    
  2. 允许其他用户读取但不可修改:

    bash

    chmod -R 755 /var/www/html/myapp