如何设置文件权限以便新文件继承相同的权限?

oom*_*pah 44 linux permissions ubuntu

我有一个文件夹,其中将通过脚本自动创建新的子文件夹和文件。

我想递归地维护放置在父目录中的所有新文件夹和文件的用户和组权限。我知道这涉及设置一个粘性位,但我似乎无法找到一个能准确显示我需要的命令。

这是我到目前为止所做的:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent
Run Code Online (Sandbox Code Playgroud)

此后,我希望将 660 权限递归设置到/path/to/parent.

但是,到目前为止我尝试过的一切都失败了。有人可以帮忙吗?

实际上,八进制标志 660 甚至可能都不正确。我想要的权限是:

  1. 放置在其下的目录/path/to/parent可由具有权限的用户执行
  2. 用户自己和某个组的成员可以读/写文件
  3. 中的文件和文件夹/path/to/parent不是世界可读的

我在 Ubuntu 10.0.4 LTS 上运行。

有人可以帮忙吗?

use*_*686 70

您要查找的权限位是 0770 和 0660。

  • rw-权限?110二进制 ? 6八进制

组所有权可以通过使用设置setgid位新的文件和文件夹中的文件夹/路径/到/父创建继承chmod g+s这样的:

chmod g+s /path/to/parent
Run Code Online (Sandbox Code Playgroud)

现在,在 /path/to/parent 下创建的所有新文件和文件夹都将分配与 /path/to/parent 上设置的相同的组。


POSIX 文件权限不会被继承;它们由创建过程给出,并与其当前的 umask 值相结合。

但是,您可以使用POSIX ACL来实现这一点。在目录上设置默认 ACL

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent
Run Code Online (Sandbox Code Playgroud)

这将适用setfacl于/路径/到/父目录,-modifying的-dEFAULT的ACL -那些将被应用到新创建的项目。(大写X表示只有目录会收到该+x位。)

(如果需要,您可以向 ACL添加一个u:someuser:rwXg:someuser:rwX- 最好是一个组。)


注意:在使用 ext3/ext4 的旧系统上,您过去需要使用该acl选项挂载文件系统,否则它会忽略所有 ACL 并不允许设置新的 ACL。

mount -o remount,acl /
Run Code Online (Sandbox Code Playgroud)

要永久设置它,请使用tune2fs -o acl <device>或编辑/etc/fstab

  • 感谢您抽出时间来回答。不幸的是,我对这一切都很陌生,你写的东西对我来说与希腊语没有区别(对不起任何希腊语 SO'ers!)。我不明白你写的大部分内容。我有一个 Web 进程,我想让 Apache 能够在父文件夹中创建文件夹和文件,其中只有 Apache(所有者)和我(组)能够读取文件并更改为目录。其他所有人都被禁止。这就是我想要做的。Apache 需要能够创建子文件夹并在其中存储文件。 (5认同)

Pri*_*cey 11

Grawity 给出了一个很好的答案,但我怀疑编辑过的问题可能会略有改变。

我建议离开 apache 用户/组拥有的目录。这可能是apachehttpd,具体取决于您的发行版。

例如

chown -R apache:apache /path/to/parent
Run Code Online (Sandbox Code Playgroud)

然后您可以执行类似https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian 之类的操作,甚至将自己添加到 apache 组以确保您具有对目录的组访问权限。(类似的东西usermod -aG apache username

我不会chmod -R整个目录,因为你不想要 html 脚本或 jpg 或其他随机可执行的东西。您应该根据需要更改权限。(尽管将其重置为 660 可能不是最糟糕的想法。)

您可能想尝试的是:

chmod o+w file
Run Code Online (Sandbox Code Playgroud)

“o”表示“其他”,“w”表示“写”。您还可以将 'u' 用于 'user' 和 'g' 用于 'group',以及 'r' 和 'x',希望它们是不言自明的。您可以使用“-”而不是“+”来删除权限。

  • `o+w` 是一个不错的选择吗?更改不应该仅限于`u`和`g`吗?否则,试图维护目录和子目录的安全有什么意义? (2认同)