何时强制执行 Unix 目录权限

何时强制执行 Unix 目录权限

假设我有一个只有 root 可以访问的目录:

 $ sudo -s
 $ mkdir ~/rootonly
 $ chmod 000 ~/rootonly

该目录下有一个具有全局所有权限的目录:

 $ cd ~/rootonly
 $ mkdir openforall
 $ chmod 777 openforall

不,如果我想以普通用户身份访问该目录,我似乎不能(正如我所料):

 $ su me
 $ cd ~/rootonly/openforall/
 bash: cd: /home/me/rootonly/openforall: Permission denied
 $ touch ~/rootonly/openforall/foo
 touch: cannot touch `/home/me/rootonly/openforall/foo': Permission denied

但是,如果我首先以 root 身份进入目录,然后通过 su 切换到普通用户,它就可以工作了:

 $ sudo -s
 $ cd /home/me/rootonly/openforall
 $ su www-data
 $ touch test
 $ ls
 $ -rw-r--r-- 1 www-data www-data 0 2011-08-05 14:17 test

为什么这样做有效?第一种情况只是“cd”的特定行为吗?它会尝试逐个文件夹地浏览目录层次结构?换句话说,对于绕过 bash 的攻击者,如果知道路径,内核是否会提供访问“openforall”的条目?

我对这里幕后发生的事情很感兴趣。

答案1

当命令需要“遍历”目录时,就会强制执行权限。

当你 时touch ~/rootonly/openforall/foo,touch 命令需要打开rootonly目录,以便它可以找到 的位置(inode 等),openforall然后它可以编辑openforall目录结构的内容来设置 的时间戳foo

相关内容