这应该很简单,但我没有在测试中让它发挥作用。
我正在使用的 torrent 应用程序(基于 CLI)尚无法定义所下载文件的用户/组/权限。它还喜欢以无法修改的方式设置文件的权限。
我想使用 set-uid 和 set-group-id 来解决这个问题。
给出这样的路径:/Volumes/torrents/movies
我希望“movies”目录允许系统上的所有用户完全读写。文件不应是可执行文件,但当然,目录需要是可执行文件,以便打开或进入。我相信这个系统上的所有用户,但我会避免对文件执行某些操作,以防止意外错误。
“电影”中保存/存储的任何内容都应继承电影的用户/组/权限,并向下渗透到所有子目录和文件。这样,我就不必担心应用程序缺少权限设置功能。如果电影将 foo:bar 的权限设置为 rw,并且用户 the_user 出现并将文件放入电影中,我希望文件变为 rw foo:bar。
谢谢。我尝试了几种不同的方法,但都失败了。我很少使用 set-uid 和 set-group-id 或 sticky 位。
答案1
您最多可以做的是将目录设置为 setgid,这将使在其中创建的文件和目录获得目录的组所有者。但是,setgid 位将不是被继承,这意味着第一层之后的任何内容都不会应用组所有权。解决此问题的唯一方法是使用 cron 或 incron 根据需要应用权限更改。
答案2
根据您之前的问题和您提到的“/Volumes”文件夹,我猜测您正在使用 Mac OS X。
我得到了一条来自本文它显示了如何创建 AppleScript 并将其附加为文件夹操作,该操作设置放入文件夹中的所有文件的权限。这是我刚才测试的脚本:
on adding folder items to this_folder after receiving added_items
tell application "Finder"
set fold_name to the name of this_folder
try
repeat with i from 1 to number of items in added_items
set new_item to item i of added_items
set the item_path to the quoted form of the POSIX path of new_item
do shell script ("/bin/chmod -R a+rw " & item_path)
end repeat
end try
end tell
end adding folder items to
将其输入到 AppleScript 编辑器中,然后将其保存在 /Library/Scripts/Folder Actions Scripts 中。然后右键单击文件夹并选择“文件夹操作设置...”(或 Leopard 或更早版本中的“附加文件夹操作”)。附加您的脚本并进行测试。将项目放入文件夹中,它应该会递归地 chmod 所有内容以允许所有人读取/写入。
如果您将任何内容直接放入文件夹(包括另一个文件夹),则此方法有效:所有内容都会递归更新。但是,如果您将文件放入已经存在的子文件夹中,则不会调用文件夹操作。我还没有找到解决这个问题的方法。
答案3
另一个答案中链接的 Wikipedia 页面确实与答案本身相矛盾:set-GID 位通常是继承的。这在 Linux 上当然是正确的,我相信在 Solaris 上也是如此。然而,在 Mac OS X 上似乎并非如此。手册页似乎更多地谈论 ACL 而不是正常权限,因此也许您会在将 file_inherity 和 directory_inherit 权限与传统权限相结合时获得一些运气。