如何设置目录的权限,将其权限授予所有子目录?

如何设置目录的权限,将其权限授予所有子目录?

有没有办法设置 *nix 目录的权限,以便在创建子目录时,该子目录将具有与父目录相同的所有权限?


这是下列的,但它似乎并没有满足我的所有要求:

在大多数系统中,如果设置了目录的 set-group-ID 位,则新创建的子文件将继承与目录相同的组,而新创建的子目录将继承父目录的 set-group-ID 位。在少数系统中,目录的 set-user-ID 位对新子文件的所有权和新子目录的 set-user-ID 位具有类似的影响。这些机制让用户更轻松地共享文件,减少了使用 chmod 或 chown 共享新文件的需要。

答案1

创建子文件夹时,新子文件夹的权限定义为:

  1. 创建目录的用户的属性:

    a. 用户 ID

    b. 群组 ID

  2. 定义的umask

  3. 父文件夹default ACL(如果存在)

注意:更多信息可以参见访问控制列表

对象创建和默认 ACL

使用 creat()、mkdir()、mknod()、mkfifo() 或 open() 函数创建文件对象时,将初始化文件对象的访问 ACL。如果默认 ACL 与目录相关联,则创建文件对象的函数的模式参数和目录的默认 ACL 将用于确定新对象的 ACL:

1. 新对象继承包含目录的默认 ACL 作为其访问 ACL。

2. 修改与文件权限位对应的访问 ACL 条目,使得它们不包含 mode 参数指定的权限中不包含的权限。

如果目录没有关联的默认 ACL,则使用创建文件对象的函数的模式参数和文件创建掩码(请参阅 umask(2))来确定新对象的 ACL:

  1. 新对象被分配一个访问 ACL,其中包含标签类型为 ACL_USER_OBJ、ACL_GROUP_OBJ 和 ACL_OTHER 的条目。这些条目的权限设置为文件创建掩码指定的权限。

  2. 修改与文件权限位相对应的访问 ACL 条目,使得它们不包含模式参数指定的权限中未包含的权限。

如何设置默认 ACL 的说明是从这个问答中复制而来的

chmod g+s <directory>  //set gid 
setfacl -d -m g::rwx /<directory>  //set group to rwx default 
setfacl -d -m o::rx /<directory>   //set other

接下来我们可以验证:

getfacl /<directory>

输出:

# file: ../<directory>/
# owner: <user>
# group: media
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

更多信息umask请参见umask 人

   umask() sets the calling process's file mode creation mask (umask) to
   mask & 0777 (i.e., only the file permission bits of mask are used),
   and returns the previous value of the mask.

   The umask is used by open(2), mkdir(2), and other system calls that
   create files to modify the permissions placed on newly created files
   or directories.  Specifically, permissions in the umask are turned
   off from the mode argument to open(2) and mkdir(2).

   Alternatively, if the parent directory has a default ACL (see
   acl(5)), the umask is ignored, the default ACL is inherited, the
   permission bits are set based on the inherited ACL, and permission
   bits absent in the mode argument are turned off.  For example, the
   following default ACL is equivalent to a umask of 022:

       u::rwx,g::r-x,o::r-x

   Combining the effect of this default ACL with a mode argument of 0666
   (rw-rw-rw-), the resulting file permissions would be 0644 (rw-
   r--r--).

   The constants that should be used to specify mask are described under

相关内容