我的主文件夹中有一个目录,我希望其他用户能够访问。我为他创建了一个群组,我们都加入了,我做到了
sudo chgrp -R group folder/
他仍然无法进入目录,权限被拒绝。我也这样做了
sudo chmod -R 777 folder/
毫无效果。为什么这不起作用?谢谢。
答案1
您是否检查过他是否具有对父目录的执行权限?否则它将无法工作。
更准确地说,在用户引用文件系统对象的路径上,中间的所有目录都必须为其设置执行权限。实际上,通常最好也授予读取权限,因为只有当访问用户进入所需目录而无法查看这些中间目录时,仅授予执行权限才会起作用,而使用文件管理器或 shell 补全(制表符)时情况并非如此。
如果您不介意其他人对父目录具有读取+执行访问权限,您可能会对chmod o+rx
这些目录感到满意,或者您也必须对chgrp
这些目录具有访问权限chmod g+rx
。
或者...或者...您可以使用...POSIX ACL !
您可以使用setfacl
和getfacl
命令,或使用 Eiciel ( apt install eiciel
)(gnome 文件 ACL 编辑器)来设置这些 ACL。除其他功能外,POSIX ACL 允许向特定用户和组授予/撤销权限,而不必遵守传统的 UNIX“ugo”权限模型。如果您不觉得这种比较太过分,可以采用 NTFS 方式。
man acl
可能会对您有所帮助,但man setfacl
似乎更有趣,因为它涵盖了 Linux 特定的部分,例如所谓的默认 ACL,这些部分由目录中创建的文件系统对象继承。
例如,如果您想授予用户 bob 对目录“work”的“rwx”权限,并使用默认(继承)“r”权限,请输入:
setfacl -m u:bob:rwx,d:u:bob:r work
但是,您仍然需要授予 bob 对他可能需要跨越的任何目录的读取+执行权限才能达到“工作”目的(如果他还不具备这些权限):
setfacl -m u:bob:rx intermediate_directory
顺便提一下,POSIX ACL 并不新鲜。我记得二十多年前在 Digital Unix 系统上使用过它们。但是,系统忘记在 TTY 分配/释放时重置这些 ACL,只重置传统权限,这在设备文件静态创建的旧时代引发了一些漏洞...
编辑:您不必授予中间目录的 +rx 权限,而是可以将目标目录重新挂载到文件系统上的其他位置。假设您有一个目录“work”,其绝对路径为 /x/y/z/work,并且您不想修改 x、y 或 z 的权限。您可以创建一个 /shared/work 目录,然后使用以下命令将 /x/y/z/work 重新挂载到该目录:
mkdir -p /shared/work
mount --bind /x/y/z/work /shared/work
但是,该设置不会在系统重启后继续保留,因此如果您希望它继续保留,请将以下行附加到 /etc/fstab :
/x/y/z/work /shared/work none bind
这样做将使得工作目录内容可以通过 /x/y/z/work 和 /shared/work 访问。
但是当然,如果您不介意将 /x/y/z/work 移动到其他地方:
mkdir /shared
mv /x/y/z/work /shared
是最简单且最好的方法。