Windows有一个特权叫做“绕过遍历检查”(也称为更改通知权限)。它允许系统绕过父对象中的 ACL 检查,以便用户可以[潜在]访问子对象。
一个例子可能会有所帮助:
<file system>
|
+-- john.doe
|
+-- public
在上面的示例中,人们通常会限制目录,john.doe
以便他拥有完全控制权(也许他的组具有读取权限)。然而,Doe 的public
目录是全世界可读的,因此任何人都可以看到他共享的内容。
在 Windows 中,绕过遍历检查将用于促进上述场景。
Unix/Linux 是否提供与 Windows 绕过遍历检查等效的功能?如果是这样,那是什么?
如果不是,如何public
在不打开父目录中安全漏洞的情况下提供对该目录的访问?
有趣的是,我所有的 Ubuntu 机器都解除了主目录的限制,以便任何人都可以在访问该public
目录的过程中访问它,甚至是来宾帐户!并且来宾帐户也可以探测根目录。但桌面和服务器上的来宾帐户完全是“另一种蠕虫病毒……”
我最近发现了这个Cryptree:加密文件系统的文件夹树结构。我认为这种说法不太正确(如“绕过遍历检查”演示):
访问权限的向上继承:显式授予对文件夹的访问权限意味着继承对该文件夹的祖先文件夹名称的访问权限。例如,当授予 Alice 对位于 /bob/projects/ 中的文件夹 Documents/ 的递归访问权限时,应自动允许 Alice 查看其祖先文件夹 /bob/ 和 /bob/projects/ 的名称。如果无法看到父文件夹的名称,她就无法重建文档/的正确路径。
答案1
Linux 没有与“绕过遍历检查”完全相同的功能。它使用其他手段来实现相同的政策。
传统上,用户的主目录是公开可读的。用户可以为私有文件创建子目录,并将其设置为私有。 Unix 权限(包括现代 ACL 方案)的一个很好的特性是,如果路径的任何组成部分是私有的,则无论文件的权限是什么(即没有办法绕过遍历检查......),该文件都是私有的,因此,私有目录中的文件不存在被意外公开的风险。应用程序根据以下方式创建文件掩码默认情况下;如果用户将 umask 设置为 077,则默认情况下他们的文件将是私有的(默认 umask 传统上为 022,使文件可公开读取但不可写入)。期望文件内容是私有的(例如电子邮件)的应用程序会创建私有文件,而不管 umask 是什么。
有一种方法可以让另一个用户访问私有目录中的文件:移动文件时,打开该文件的任何进程都保留对该文件的访问权限。因此,在私有目录中创建的文件是安全的,但移动到那里的文件可能仍会打开。仅当您在移动文件后向文件写入更多数据时,这才有意义。
可以在另一个位置创建目录视图,可能具有不同的权限。视图上的权限不受遍历实际目录的权限影响,仅受遍历视图位置的权限、目录本身及其文件的权限以及(如果适用)参数的影响。看法。可以使用以下命令创建视图绑定文件系统文件系统或使用 Linux 的绑定安装。看允许非 root 进程访问所有主目录而不影响安全性?,允许用户读取其他用户的主目录和如何只允许特定用户访问已挂载分区的一个NTFS文件夹?举些例子。
答案2
在某种程度上:
在 Unix 权限模型中,r
目录上的位允许列出其内容,并且这些x
位允许获取目录的句柄。如果您知道文件和目录的名称,句柄允许您引用该目录中的文件和目录,并且使用它们受到该对象 inode 的权限的约束。
因此,对于您描述的场景,您将授予x
许可其他的,允许每个人在到达该目录的途中通过该public
目录——但是该目录中的其他所有内容都需要将权限设置为锁定其他的, 明显地。
这是(或曾经是)public_html
用户主目录中目录的常见配置。