为什么用户不应该使用绝对路径 cd 到目录而不 rx 到其所有祖先?

为什么用户不应该使用绝对路径 cd 到目录而不 rx 到其所有祖先?

在 Windows 上,如果用户对该lev5目录具有读/写权限,但对其所有祖先没有任何权限,则 似乎cd c:\lev1\lev2\lev3\lev4\lev5仍然有效。

在 Linux 上,即使我授予用户 完全权限lev5和使用rx权限,但如果他没有//的权限,则不起作用。lev4setfaclrxlev1lev2lev3cd /lev1/lev2/lev3/lev4/lev5

有没有办法让它像Windows那样工作?

我注意到的一件事是,如果用户的 shell 从/lev1/lev2/lev3/lev4/( sudo 用户所在的 )开始/lev1/lev2/lev3/lev4/,并切换到使用那里的用户sudo -u,则用户可以cd ./lev5。有一会儿,我想知道这是否是一个隐藏祖先目录存在的安全功能就像lev1lev2来自用户(即,用户只知道lev5存在于下lev4,仅此而已),但情况似乎并非如此,因为pwd在用户的 shell 中执行给出了完整路径/lev1/lev2/lev3/lev4/lev5,所以我认为没有必要阻止用户使用完整路径cd

答案1

本质上有两种方式来看待类似的事物,/lev1/lev2/lev3/lev4/lev5或者作为单个事物,或者作为一个序列/,,,,,,,。如果您执行前者,那么确实没有理由不能只要求访问该对象。然而,将其视为一个序列并一次一步地解决它可以让您做更复杂的事情。例如,解析名称可能会将您带到某个网络存储。期望一台计算机上的操作系统了解可以连接的每个网络存储设备的详细信息,以便它可以决定您是否有权访问最终对象,这是不合理的。lev1lev2lev3lev4lev5

使用pwd可能具有欺骗性。它通常是 shell 的内置函数,并从环境变量初始化PWD。在过去,/bin/pwd工作方式是更改为..,然后在当前目录中查找与刚刚所在的位置相匹配的内容。它重复这个直到到达/。使用这种方法,如果您删除了某些父目录中的访问权限,您可能会遇到失败/bin/pwd。如今,在 Linux 上,内核会跟踪您所在的位置,而/bin/pwd所做的就是调用getcwd系统调用。

相关内容