我可以使用linux组和文件权限来允许多人在多个文件夹中添加修改和删除文件吗?如何?
例如在本地计算机上:
让 Alice 和 Bob 处理 foo 和 bar
Alice 和 Bob 位于 foo 和 bar linux 组中 foo 和 bar 文件夹是根专有且尊重组的:
id Alice
uid=1000(Alice) gid=1000(Alice) groups=1000(Alice),10(wheel),1002(foo),1003(bar)
id Bob
uid=1001(Bob) gid=1001(Bob) groups=1001(Bob),10(wheel),1002(foo),1003(bar)
ll
drwxrwsr-x 7 root foo 4096 Jan 26 09:09 foo
drwxrwsr-x 7 root bar 4096 Apr 13 09:36 bar
Peter 只能对 foo 文件夹起作用,不能对 bar 文件夹起作用。
id Peter
uid=1002(Peter) gid=1004(Peter) groups=1001(Bob),10(wheel),1002(foo)
这可以在linux上实现吗?
我一直在使用 GUID 位和粘性位,但它们都不能完全满足需要。
让 Alice 和 Bob 访问 foo 意味着将他们放在 foo 组中。将 foo 添加到其补充组不会产生任何效果,Alice 和 Bob 无法访问 foo 文件夹。
Alice 和 Bob 不能同时在 foo 和 bar 主要组中,这就是我问这个问题的原因。
答案1
我没有看到任何方法允许两个用户修改同一共享文件夹中的相同文件。
通常的解决方法是使用版本控制工具。
在这种特殊情况下,这是可以的,因为我们在这里使用 GIT。
但再次产生了一个问题:即使 git 只将文件添加到对象文件夹中(除非您在这个问题的目标项目中做了我们不知道的事情),git 也会收集以前两个命名的对象子文件夹中的文件提交哈希的字符。
我们最终找到了一个解决方法,通过将所有目录创建为 root 来阻止用户创建它们:
for i in {0..255};do j=$(printf "%02x\n" $i);mkdir -p $j;chmod 2775 $j;done
在裸存储库的对象文件夹中完成它,现在一切正常。