我有一个文件夹,其中的新子文件夹和文件将通过脚本自动创建。
我想以递归方式维护父目录中所有新文件夹和文件的用户和组权限。我知道这需要设置粘性位,但我似乎找不到能准确显示我需要的内容的命令。
这是我目前所做的:
sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent
此后,我希望将 660 权限递归设置为放置在 中的任何文件夹和文件/path/to/parent
。
但是,到目前为止我尝试的所有方法都失败了。有人能帮忙吗?
实际上八进制标志 660 可能甚至不正确。我想要的权限是:
/path/to/parent
具有权限的用户可执行位于其下的目录- 文件可由用户本人和某个组的成员读取/写入
- 文件和文件夹
/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 写入目录会为您服务的内容注入各种恶意软件。请适当监视此目录树的内容。