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

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

情况:
A需要访问权限/path/to/dir/foo才能通过 ssh 或 ftp 上传文件,但相关目录:/path/to/dir/foo归组所有B (如果你想:/path递归地拥有B,出于安全原因,应该保持这种状态。


我尝试解决方案:
我创建了一个指向 的符号链接/home/A,它A拥有。接下来,我授予权限以便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 -G C A
sudo chown -R B: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,但我仍然无法以用户 身份访问foo中的符号链接。含义:将打印。/home/AAls -l /path/to/dir/foo-rwxrwxrwx


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

答案1

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

作为romano

[romano:~/tmp] % mkdir -p a/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 -m g: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获取完整信息和更多示例。

在您的情况下,如果您拥有/path/to/dir/foo A:A,并且您希望组 B 具有写访问权限,foo您应该:

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

     setfacl -m g:B:r-x /path
     setfacl -m g:B:r-x /path/to
     setfacl -m g:B:r-x /path/to/dir
    
  2. +rwx目录的权限添加到 B 组:

     setfacl -m g:B:rwx /path7to7dir/foo
    

注意然而,我们似乎遇到了一个令人讨厌的错误...参见http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8527。我不确定后果 --- 上面的简单情况可以正常工作,但请检查一下。

答案2

这个答案是基于 Rmano 在答案结尾给出的提示,尽管文件访问控制列表方法不起作用。

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

相关内容