2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

如何设置文件权限,使新文件继承相同的权限?

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

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

这是我目前所做的。

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.

我在 Ubuntu 10.0.4 LTS 上运行。

谁能帮帮我?

答案 (3)

64
64
64
2011-03-30 10:28:30 +0000

你要找的权限位是0770和0660。

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

在/path/to/parent 文件夹下创建的新文件和文件夹可以通过设置 setgid 位来继承 group ownership

chmod g+s /path/to/parent

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


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

然而,你可以使用 POSIX ACLs 来实现这个目的。在一个目录上设置默认ACL

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

这将把chmod g+s应用于/path/to/parent目录,setfacl修改-mefault ACLs - 那些将应用于新创建的项目。(大写的-d表示只有目录会收到X位。)

(如果需要,你可以在ACLs中添加一个+xu:someuser:rwX–最好是一个组。)

  • *

注:在使用ext3/ext4的旧系统上,你过去需要用g:someuser:rwX选项来挂载文件系统,否则它会忽略所有的ACLs并不允许设置新的ACLs。

mount -o remount,acl /

要永久设置,使用acl或编辑tune2fs -o acl <device>

10
10
10
2011-03-30 12:09:01 +0000

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或其他随机的东西被执行。你应该根据需要改变权限。

你可以试试:

chmod o+w file

‘o'表示'其他','w'表示'写'。你也可以用'u'代表'用户','g'代表'组',还有'r'和'x',这些都是不言自明的。你可以使用’-‘而不是’+‘来删除权限。

2
2
2
2011-03-30 14:22:39 +0000

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

这些步骤应该可以达到你想要的目的(将命令中的目录替换为你想要使用的目录):

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

允许 apache 写入一个目录,就可以为你提供的内容注入各种恶意软件。适当地监控这个目录树的内容。