Linux 文件权限控制详解

在 Linux 操作系统中,文件和目录的权限控制至关重要,用于管理用户对文件和目录的访问和操作。以下是关于 Linux 文件权限控制的深入说明,适合有编程和计算机基础的读者。

1. 基本概念

Linux 中的每个文件或目录都由三类身份对其进行访问控制:

  • 用户(User, u):文件的拥有者。

  • 组(Group, g):与文件拥有者同组的用户。

  • 其他用户(Others, o):系统中的其他用户。

每类身份都有三种权限:

  • 读取(Read, r):可以查看文件内容或列出目录内容。

  • 写入(Write, w):可以修改文件内容或在目录下创建、删除文件。

  • 执行(Execute, x):可以执行文件(如脚本)或访问目录(进入目录)。

2. 权限表示

Linux 文件权限分为两种表示方式:

  1. 符号表示法: 权限用 10 个字符表示,其中第一位表示文件类型,后面 9 位按组排列,每三位一组,依次代表用户、组和其他用户的权限:

    drwxr-xr-x
    • 第一位:文件类型 (d 表示目录,- 表示普通文件,l 表示符号链接)。

    • 接下来的三组字符:分别代表用户、组、其他用户的权限。

    • 在 Linux 文件权限的符号表示法中,最后出现的 . 表示该文件或目录有扩展属性(extended attributes)。

  2. 八进制表示法: 每三位权限表示可以用一个八进制数字表示:

    • rwx = 7(即 4 + 2 + 1)

    • rw- = 6(即 4 + 2)

    • r-x = 5(即 4 + 1)

    • r-- = 4

    常见的权限组合:

    • 777:所有用户都有 rwx 权限。

    • 755:用户有 rwx 权限,组和其他用户有 r-x 权限。

    • 644:用户有 rw- 权限,组和其他用户有 r-- 权限。

3. 修改权限命令
3.1 chmod 改变文件权限

chmod 命令用于更改文件或目录的权限。可以使用符号表示法或八进制表示法。

  • 符号表示法

    • 添加权限:chmod u+x file.txt

    • 移除权限:chmod g-w file.txt

    • 设置权限:chmod o=r file.txt

  • 八进制表示法

    • chmod 755 file.txt

3.2 chown 改变文件拥有者
chown new_owner:new_group file.txt

示例:

chown alice:developers project/
3.3 chgrp 改变文件所属组
chgrp developers file.txt
4. 权限应用场景
4.1 文件权限
  • 可执行文件需要执行权限:

    chmod +x script.sh
4.2 目录权限
  • r:允许读取目录内容。

  • w:允许在目录中创建、删除文件。

  • x:允许进入目录。

使用递归选项更改所有子目录及文件的权限:

chmod -R 755 /path/to/directory
5. 高级权限控制
5.1 SetUID 和 SetGID
  • SetUID:程序以文件所有者的权限运行。

    chmod u+s /path/to/file
  • SetGID:类似于 SetUID,但作用于组。此外,它还可以用于目录,使新建的文件继承目录的组:

    chmod g+s /path/to/directory
5.2 粘滞位(Sticky Bit)

用于防止非所有者删除文件。通常用于 /tmp

chmod +t /shared_directory

显示为 drwxrwxrwt.

5.3 umask 默认权限掩码

设置新建文件默认权限掩码:

umask 002
6. ACL(访问控制列表)

提供更精细的权限控制。

  • 设置 ACL

    setfacl -m u:alice:rwx file.txt
  • 查看 ACL

    getfacl file.txt
SELinux 和扩展属性

SELinux 是增强安全机制,用来严格限制操作。当符号表示法末尾出现 . 时,可能存在 SELinux 安全上下文信息。

查看扩展属性:

ls -lZ err.log
getfattr -d err.log

禁用 SELinux(如果需要):

sudo setenforce 0 
附录:常见问题解答

为什么使用 ls --color=auto 会报错?

这是因为它需要读取更多元数据来决定着色,而缺少执行权限会导致错误。解决方法是确保有执行权限或直接使用不带颜色编码的 ls

希望这份文档能帮助你更深入理解 Linux 文件权限控制。如果有进一步的问题或需要示例代码,请告诉我!

你可能感兴趣的:(linux,运维,服务器)