授予用户访问另一个用户的主文件夹中的目录的权限

Tes*_*ter 3 permissions directory groups

我的主文件夹中有一个目录,我希望其他用户能够访问该目录。我为他创建了一个小组,我们都加入了,我也加入了

sudo chgrp -R group folder/
Run Code Online (Sandbox Code Playgroud)

他仍然无法进入该目录,因为权限被拒绝。我也做了

sudo chmod -R 777 folder/
Run Code Online (Sandbox Code Playgroud)

无济于事。为什么这个不工作?谢谢。

Nov*_*Hak 7

你检查一下他对父目录\xc2\xa0有执行权限吗?否则它将无法工作。

\n\n

更准确地说,沿着用户引用文件系统对象的路径,其间的所有目录都必须为其设置执行权限。在实践中,通常最好也授予读取权限,因为只有当访问用户前进到所需目录而无法查看这些中间目录时,仅授予执行权限才有效,而事实并非如此。例如,当使用文件管理器或 shell 完成(选项卡)时。

\n\n

如果您不介意其他人对父目录具有 read+exec 访问权限,您可能会对这些目录感到满意,或者您也chmod o+rx必须对这些目录进行访问chgrpchmod g+rx和。

\n\n

或者...或者...您可以使用... POSIX ACL \xc2\xa0!

\n\n

您可以使用setfaclgetfacl命令,或使用apt install eicielgnome 文件 ACL 编辑器 Eiciel ( ) 来设置这些 ACL。除此之外,POSIX ACL 可以向特定用户和组授予/撤销权限,而不必坚持传统的 UNIX“ugo”权限模型。更多以 NTFS 方式,如果您不觉得这种比较太下流的话。

\n\n

man acl可能对您有帮助,但man setfacl似乎更有趣,因为它涵盖了 Linux 特定的部分,例如所谓的默认 ACL,它们由目录中创建的文件系统对象继承。

\n\n

例如,如果您想授予用户 bob 对目录“work”的“rwx”权限,以及默认(继承)“r”权限,请输入\xc2\xa0:

\n\n

setfacl -m u:bob:rwx,d:u:bob:r work

\n\n

不过,您仍然必须向 Bob 授予他可能必须跨越才能到达“工作”的任何目录的读取+执行权限(如果他还没有这些权限)\xc2\xa0:

\n\n

setfacl -m u:bob:rx intermediate_directory

\n\n

附带说明一下,POSIX ACL 并不新鲜。我记得二十多年前在 Digital Unix 系统上使用它们。然而,系统忘记在 TTY 分配/解除分配时重置这些 ACL,仅重置传统权限,这在静态创建设备文件的旧时代启用了一些漏洞利用......

\n\n

EDIT\xc2\xa0:您可以将目标目录重新挂载到文件系统上的其他位置,而不必授予中间目录的 +rx 权限。假设您有一个目录“work”,其绝对路径是/x/y/z/work,并且您不想修改x、y或z的权限。您可以创建一个 /shared/work 目录,并使用 \xc2\xa0 重新挂载 /x/y/z/work :

\n\n
mkdir -p /shared/work\nmount --bind /x/y/z/work /shared/work\n
Run Code Online (Sandbox Code Playgroud)\n\n

不过,这不会在重新启动后继续存在,因此如果您希望它持续存在,请将以下行附加到 /etc/fstab\xc2\xa0 中:

\n\n

/x/y/z/work /shared/work none bind

\n\n

这样做将使工作目录内容也可以通过 /x/y/z/work 和 /shared/work 访问。

\n\n

但是当然,如​​果您不介意将 /x/y/z/work 移动到其他地方\xc2\xa0:

\n\n
mkdir /shared\nmv /x/y/z/work /shared\n
Run Code Online (Sandbox Code Playgroud)\n\n

是最简单也是最好的方法。

\n