在 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
。
本质上有两种看待事物的方式,例如,作为单个事物
/lev1/lev2/lev3/lev4/lev5
或作为序列,,,,,,。如果您执行前者,那么确实没有理由不要求访问该对象。然而,将其视为一个序列并一次解决一个步骤可以让您做更复杂的事情。例如,解析一个名称可能会将您带到某个网络存储。期望一台机器上的操作系统知道可以连接的每个网络存储设备的详细信息以便它可以决定您是否有权访问最终对象是不合理的。/
lev1
lev2
lev3
lev4
lev5
使用
pwd
可能具有欺骗性。它通常是 shell 的内置函数,并从PWD
环境变量中初始化。在过去,/bin/pwd
工作方式是切换到..
当前目录,然后在当前目录中查找与它刚刚所在位置相匹配的内容。它重复这个直到它到达/
。使用这种方法,如果您删除了某些父目录中的访问权限,您可能会从/bin/pwd
. 这些天在 linux 上,内核跟踪你的位置,/bin/pwd
所做的就是调用getcwd
系统调用。