Contents

设置新文件和目录的默认权限

1. 概述

在本教程中,我们将着眼于为目录或文件系统上新创建的文件和子目录设置默认权限。首先,我们将简要介绍 ACL 以及如何在文件系统上启用它。然后,我们将逐步设置主目录上新创建文件的权限。

2.设置默认权限

文件权限是对文件执行特定操作的权限。我们可以将这些权限授予某个用户或一组用户。用户可以对文件执行的操作可以是读取、写入、执行或这些操作的组合。

在 Linux 上,默认情况下,当我们创建新文件时,它们会被赋予rw-rw-r–权限。r、  wx分别表示读取、写入和执行权限。

让我们分解一下文件的*rw-rw-r–*权限:

  • 第一个*rw-*表示用户或文件所有者的读写权限
  • 第二个*rw-*表示文件所属组的读写权限
  • 最终的*r–*读取权限适用于所有其他用户

同样,对于新创建的目录,默认权限是rwxrwxr-x

2.1.什么是 ACL?

**访问控制列表 (ACL) 是一种允许我们为文件系统设置复杂权限的机制。**不仅如此,我们还可以使用 ACL 将权限应用于特定文件或目录。使用 ACL,我们可以修改新创建的文件和目录的默认权限。

**在ext4上,ACL 支持已经启用。**但是,我们也可以在其他文件系统类型上启用它,我们将在下一节中介绍。

2.2. 在文件系统上启用 ACL

通过在fstab文件的分区条目中添加acl选项,我们可以轻松地在其他文件系统类型上启用 ACL 支持,例如ext3fatfstab文件位于*/etc*目录中,包含我们分区的配置。

让我们打开fstab文件并为所需分区的条目添加acl选项:

# <file system> <dir> <type> <options> <dump> <pass>
/dev/sda4    /home    ext3    rw,relatime,acl    0 1
.
.
.

在这种情况下,我们将acl选项添加到我们的*/dev/sda*分区,该分区挂载在 /home目录中。添加选项后,我们可以简单地使用mount 重新挂载分区以使我们的更改生效:

$ mount -oremount /dev/sda4

现在,应该启用 ACL 支持,我们可以为*/dev/sda4*分区上新创建的文件和目录应用所需的权限。

2.3. 使用setfacl设置权限

**在 Linux 上,setfacl 实用程序用于管理目录和文件的 ACL。**该实用程序附带acl包,默认情况下应该已经安装在我们的机器上。但是,如果由于某种原因它没有安装在我们的机器上,我们可以从我们的发行版的官方存储库中安装它。

我们可以使用以下命令语法使用setfacl为文件和目录应用默认权限:

$ setfacl [OPTIONS] [PERMISSIONS] [FILE|DIRECTORY]

现在,让我们为*/dev/sda4分区下的文件和目录应用默认权限,该分区恰好安装在/home*上:

$ setfacl -PRdm u::rwx,g::rw,o::r /home

让我们分解一下:

  • -d设置*/home*目录的默认权限
  • -m 表示我们要对 ACL 进行更改
  • -R将权限递归应用到*/home文件夹中的所有文件和子目录*
  • -P将阻止操作跟随符号链接——以避免危及安全的风险
  • 之后的模式指定*/home*目录的默认权限

每类用户的权限以逗号分隔。例如,u::rwx指定用户或*/home目录所有者的默认权限。在这种情况下,所有者可以读取、写入和执行/home*目录中新创建的文件和目录。同样,所属组获得读写权限,而其他组仅获得读取权限。

现在,让我们在*/home*目录下创建一个文件来测试我们的新权限:

$ touch /home/hey/test
$ ls -l /home/hey/test
.rwxrw-r-- hey hey 0 B Fri Jan 21 22:42:01 2022 test

由于我们使用了*-R选项,因此/home*层次结构下的任何新文件和文件夹都将获得适当的默认权限。

2.4. 为不同的用户或组设置默认权限

**我们还可以在冒号之间放置一个uid(用户 ID)或一个gid (组 ID)。因此,如果我们想为不是文件或目录所有者的用户分配权限,我们应该使用这种方法。**例如,如果我们想为用户doe设置权限,使用uid 1001,我们可以简单地将权限指定为:

$ setfacl -PRdm u:1001:rw /home

2.5. 保留权限的工具

**cptarunziprsync 等工具会在创建新文件和目录时尝试保留源文件的权限。**换句话说,这些工具会屏蔽我们默认 ACL 的权限。因此,在使用这些工具时,我们应该使用chmod 手动将所需的权限应用于生成的新文件和目录。