在 Windows 上,如果用户对该lev5
目录具有读/写权限,但对其所有祖先没有任何权限,则 似乎cd c:\lev1\lev2\lev3\lev4\lev5
仍然有效。
在 Linux 上,即使我授予用户 完全权限lev5
和使用rx
权限,但如果他没有//的权限,则不起作用。lev4
setfacl
rx
lev1
lev2
lev3
cd /lev1/lev2/lev3/lev4/lev5
有没有办法让它像Windows那样工作?
我注意到的一件事是,如果用户的 shell 从/lev1/lev2/lev3/lev4/
( sudo 用户所在的 )开始/lev1/lev2/lev3/lev4/
,并切换到使用那里的用户sudo -u
,则用户可以cd ./lev5
。有一会儿,我想知道这是否是一个隐藏祖先目录存在的安全功能就像lev1
或lev2
来自用户(即,用户只知道lev5
存在于下lev4
,仅此而已),但情况似乎并非如此,因为pwd
在用户的 shell 中执行给出了完整路径/lev1/lev2/lev3/lev4/lev5
,所以我认为没有必要阻止用户使用完整路径cd
。
答案1
本质上有两种方式来看待类似的事物,/lev1/lev2/lev3/lev4/lev5
或者作为单个事物,或者作为一个序列/
,,,,,,,。如果您执行前者,那么确实没有理由不能只要求访问该对象。然而,将其视为一个序列并一次一步地解决它可以让您做更复杂的事情。例如,解析名称可能会将您带到某个网络存储。期望一台计算机上的操作系统了解可以连接的每个网络存储设备的详细信息,以便它可以决定您是否有权访问最终对象,这是不合理的。lev1
lev2
lev3
lev4
lev5
使用pwd
可能具有欺骗性。它通常是 shell 的内置函数,并从环境变量初始化PWD
。在过去,/bin/pwd
工作方式是更改为..
,然后在当前目录中查找与刚刚所在的位置相匹配的内容。它重复这个直到到达/
。使用这种方法,如果您删除了某些父目录中的访问权限,您可能会遇到失败/bin/pwd
。如今,在 Linux 上,内核会跟踪您所在的位置,而/bin/pwd
所做的就是调用getcwd
系统调用。