如何授予对驻留在另一个组所拥有的文件夹中的文件夹的访问权限

情况:
A组需要访问/path/to/dir/foo才能通过ssh或ftp上传文件,但是有问题的目录: /path/to/dir/fooB组所有(如果您愿意: /pathB )递归拥有 ,出于安全考虑,它应该保持这种方式。

我尝试解决方案:
我创建了一个符号链接到/home/AA拥有。 接下来,我授予权限,以便A可以访问符号链接:

 sudo ln -s /path/to/dir/foo /home/A/foo sudo chown -h A:A /home/A/foo 

我认为/path/to/dir/foo至少应归A所属的组所有:

 sudo addgroup C sudo useradd -GCA sudo chown -RB:C /path/to/dir/foo sudo chmod -R 774 /path/to/dir/foo 

完成所有这些后,我通过FTPS客户端作为用户A并将目录更改为: /home/A 令我惊讶的是,符号链接不可见,这很奇怪,因为proFTPd设置为显示符号链接。

我也尝试通过SFTP连接到同一目录。 这次符号链接是可见的,但当我尝试访问它时,我收到以下提示:

无法打开远程文件’/ path / to / dir / foo’。

没有权限。
错误代码:3
来自服务器的错误消息:权限被拒绝

这让我几乎没有其他选择,因为这是我能想到的最简单的解决方案。

绝望的尝试:
我将全局权限授予/path/to/dir/foo ,但我仍无法访问/home/A的符号链接foo作为用户A 含义: ls -l /path/to/dir/foo将打印-rwxrwxrwx

题:
如何创建指向/path/to/dir/foo的符号链接/home/A/foo /path/to/dir/foo 。 哪个A可以访问,尽管/path/to/dir/foo主要由用户拥有:组B/pathB拥有)?

如果您的目录位于ext4文件系统中,则可以使用ACL 。 最好用例子解释; 我的用户是romano ,另一个用户是default用户。

作为romano

 [romano:~/tmp] % mkdir -pa/b/c/d [romano:~/tmp] % cd !$ cd a/b/c/d [romano:~/tmp/a/b/c/d] % touch f1 [romano:~/tmp/a/b/c/d] % ls -l total 0 -rw-rw-r-- 1 romano romano 0 nov 27 17:15 f1 

显然我可以写到目录d ,它是我的……但是default

 default@pern:/home/romano/tmp/a/b/c/d$ touch f2 touch: cannot touch 'f2': Permission denied 

是的。 没有符号链接会改变default无法写入的事实。

现在,作为romano ,我授予对组default附加访问权限:

 [romano:~/tmp/a/b/c/d] % setfacl -mg:default:rwx . 

(读作:将rwx权限添加到组default为当前.目录)

……现在, default

 default@pern:/home/romano/tmp/a/b/c/d$ touch f2 default@pern:/home/romano/tmp/a/b/c/d$ ls -l total 0 -rw-rw-r-- 1 romano romano 0 nov 27 17:15 f1 -rw-rw-r-- 1 default default 0 nov 27 17:17 f2 

ACL语法有点激动,但它是一个非常强大的工具。 有关完整信息和更多示例,请参阅man setfaclman getfacl

在你的情况下,如果您拥有A:A所拥有的/path/to/dir/foo ,并且您希望B组具有对foo写入权限,那么您应该:

  1. 为组B的每个目录添加+rx权限:

      setfacl -mg:B:rx /path setfacl -mg:B:rx /path/to setfacl -mg:B:rx /path/to/dir 
  2. +rwx permssion添加到组B到目录:

      setfacl -mg:B:rwx /path7to7dir/foo 

请注意 ,似乎我们周围有一个令人讨厌的错误…请参阅http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8527 。 我不确定后果 – 上面的简单案例工作正常,但请检查一下。

这个答案基于Rmano在答案结束时给出的提示,即使文件访问控制列表方法不起作用。

它不起作用,因为完整路径,例如/path/to/dir至少需要读取和执行权限: sudo chmod -R g+rx /path 。 这解决了我的问题,现在我可以访问A主目录中的符号链接,并写入包含的文件。