如何设置文件权限,以便新文件继承相同的权限?[重复]


35

这个问题已经在这里有了答案:

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

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

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

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上运行。

有人可以帮忙吗?

Answers:


10

Grawity提供了一个很好的答案,但我怀疑编辑后的问题可能会稍有改变。

我建议保留该目录归apache用户/组所有。根据您的发行版,这可能是apachehttpd

例如

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”表示为“ group”,以及“ r”和“ x”,希望它们可以自我解释。您可以使用“-”而不是“ +”删除权限。


我认为最简单的解决方案是将自己添加到apache用户组中。感谢您的建议。我不知道为什么我自己没想到这个!
oompahloompah,2011年

1
这是o+w个好选择吗?更改不应该仅限于ug吗?否则,尝试维护目录和子目录的安全性有什么意义?
jww

61

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

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

组所有权可以通过使用设置setgid位新的文件和文件夹中的文件夹/路径/到/父创建继承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于/路径/到/父目录,-modifying的-dEFAULT的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


5
感谢您抽出宝贵的时间回答。不幸的是,我对所有这一切都是陌生的,您写的内容与希腊语对我来说是无法区分的(对不起任何希腊SO'ers!)。我不明白你写的大部分内容。我有一个Web进程,我想让Apache能够在父文件夹中创建文件夹和文件,而只有Apache(所有者)和我(该组)才可以读写文件并更改为目录。其他所有人均被禁止。那就是我想要做的。Apache需要能够创建子文件夹并将文件存储在其中。
oompahloompah 2011年

这不起作用unzip吗?
datasn.io

2

我认为您已经使问题复杂化了。如果其他人无法访问顶级目录,则其他人将无法在树中创建文件。如果只有apache在进行写操作,则不需要组写访问权限。

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

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

允许apache写入目录打开了将各种恶意软件注入您所服务内容的能力。适当监视此目录树的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.