linux 文件权限和访问控制

云淡#风清 / 2023-08-09 / 原文

文件权限和访问控制是Linux系统中保护文件和目录安全性的重要部分。以下是一些关于文件权限和访问控制的方法和示例说明:

1. **文件权限**:

- 在Linux中,每个文件和目录都有权限,这些权限决定了谁可以执行哪些操作(读取、写入、执行)。

2. **文件权限表示**:

- 权限通常用三个字母表示,分别代表文件所有者、所属用户组和其他用户的权限。

- r(读取)、w(写入)、x(执行)分别表示不同的权限。

3. **chmod 命令**:

- 使用 chmod 命令可以更改文件或目录的权限。

示例:将文件 "file.txt" 设置为所有者可读写,其他用户只能读取。

chmod u=rw,go=r file.txt

4. **chown 命令**:

- 使用 chown 命令可以更改文件或目录的所有者。

示例:将文件 "file.txt" 的所有者更改为用户 "john"。

chown john file.txt

5. **chgrp 命令**:

- 使用 chgrp 命令可以更改文件或目录的所属用户组。

示例:将文件 "file.txt" 的所属用户组更改为用户组 "developers"。

chgrp developers file.txt

6. **umask 命令**:

- umask 值定义了新创建文件和目录的默认权限。

示例:设置默认权限为所有者可读写,其他用户只能读取。

umask 022

7. **访问控制列表(ACL)**:

- ACL 是一种更灵活的权限控制方式,允许为特定用户和组分配更精细的权限。

- 使用 setfacl 和 getfacl 命令来管理 ACL。

示例:将用户 "alice" 授予文件 "file.txt" 的写入权限。

setfacl -m u:alice:rw- file.txt

8. **suid、sgid 和 sticky 位**:

- suid(设置用户ID)、sgid(设置组ID)和sticky 位是特殊的权限位,用于特定情况下的权限控制。

- suid:允许用户在执行文件时获得文件所有者的权限。
- sgid:允许用户在执行文件时获得文件所属用户组的权限。
- sticky:适用于目录,防止用户删除其他用户的文件。

示例:设置文件 "executable" 的 suid 位,使执行者获得所有者的权限。

继续介绍文件权限和访问控制的方法和示例说明:

9. **文件权限的数字表示法**:

- 权限也可以用数字表示,例如 644 表示所有者可读写,其他用户只能读取。

- 数字表示法使用三位数字,分别表示所有者、所属用户组和其他用户的权限。

示例:将文件 "file.txt" 设置为所有者可读写,所属用户组可读,其他用户只能读取。

chmod 644 file.txt

10. **限制文件访问**:

- 通过将文件的权限设置为只对所有者可读写,限制其他用户的访问。

示例:将文件 "confidential.txt" 设置为只有所有者可读写。

chmod 600 confidential.txt

11. **目录权限**:

- 对于目录,x 权限表示能否进入该目录,r 权限表示能否列出目录内容,w 权限表示能否在目录中创建、删除文件。

示例:将目录 "docs" 设置为所有者可读写,所属用户组和其他用户可读。

chmod 755 docs

12. **ACL 权限控制**:

- 使用 ACL,可以为不同用户和组分配不同的权限,实现更细粒度的访问控制。

示例:设置目录 "shared" 的 ACL,使用户 "alice" 具有读写权限。

setfacl -m u:alice:rwX shared

13. **suid、sgid 和 sticky 位的应用**:

- suid:允许普通用户执行某些程序时获得程序所有者的权限。常见应用于密码更改程序等。
- sgid:在目录上设置 sgid 位,新创建的文件将继承目录的所属用户组。
- sticky:在共享目录上设置 sticky 位,防止其他用户删除其他用户的文件。

示例:设置目录 "public" 的 sticky 位,保护其他用户的文件。

chmod +t public