如何授予对驻留在另一个组所拥有的文件夹中的文件夹的访问权限
情况:
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 -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
( /path
由B
拥有)?
如果您的目录位于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 setfacl
和man getfacl
。
在你的情况下,如果您拥有A:A所拥有的/path/to/dir/foo
,并且您希望B组具有对foo
写入权限,那么您应该:
-
为组B的每个目录添加
+rx
权限:setfacl -mg:B:rx /path setfacl -mg:B:rx /path/to setfacl -mg:B:rx /path/to/dir
-
将
+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
主目录中的符号链接,并写入包含的文件。