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

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

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

我想以递归方式维护父目录中所有新文件夹和文件的用户和组权限。我知道这需要设置粘性位,但我似乎找不到能准确显示我需要的内容的命令。

这是我目前所做的:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

此后,我希望将 660 权限递归设置为放置在 中的任何文件夹和文件/path/to/parent

但是,到目前为止我尝试的所有方法都失败了。有人能帮忙吗?

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

  1. /path/to/parent具有权限的用户可执行位于其下的目录
  2. 文件可由用户本人和某个组的成员读取/写入
  3. 文件和文件夹/path/to/parent不可被所有人读取

我正在 Ubuntu 10.0.4 LTS 上运行。

有人可以帮忙吗?

答案1

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

我建议保留 apache 用户/组所拥有的目录。这可能是阿帕奇或者httpd取决于您的分布。

例如

chown -R apache:apache /path/to/parent

然后你可以做类似的事情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

“o” 表示“其他”,“w” 表示“写入”。您还可以使用“u”表示“用户”,“g”表示“组”,以及“r”和“x”,希望这些符号不言自明。您可以使用“-”而不是“+”来删除权限。

答案2

您正在寻找的权限位是 0770 和 0660。

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

集团所有权可以通过设置 setgid 位来由文件夹 /path/to/parent 中创建的新文件和文件夹继承,chmod g+s如下所示:

chmod g+s /path/to/parent

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


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

不过,你可以使用POSIX ACL实现此目的。设置默认 ACL在目录上:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

这将适用setfacl于 /path/to/parent 目录,-m修改-d默认ACL – 将应用于新创建项目的 ACL。(大写X表示只有目录会收到该+x位。)

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


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

mount -o remount,acl /

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

答案3

我认为你把问题复杂化了。如果其他人无法访问顶层目录,那么其他人将无法在树中创建文件。如果只有 apache 进行写入,则不需要组写入权限。

这些步骤应该可以完成您想要的操作(将命令中的目录替换为您想要使用的目录):

  • 添加umask 027到 apache 默认脚本/etc/default/apache。这将阻止其他人访问 apache 创建的任何文件或目录。
  • chown www-data:www-data directory在您希望 apache 能够写入的目录上 执行。
  • chmod 750 directory在您希望 apache 能够写入的目录上执行。

允许 apache 写入目录会为您服务的内容注入各种恶意软件。请适当监视此目录树的内容。

相关内容