这是一个非常古老且愚蠢的技巧,您可以在过去的某些情况下对某些文件系统进行操作……并且今天仍然可以在一些地方进行操作。
假设您在一个模糊的 Unixy 机器上拥有一个您不运行的帐户,并且您正在寻找利用漏洞获取 root 权限。您注意到有一些程序安装了 suid root 并且具有糟糕的安全记录。它充满了可怕的做法,似乎每个月都有一个新的漏洞,管理员必须在世界上的脚本小子将它用于邪恶之前竞相修补它。
问题是,虽然版本 X 最终可能会有漏洞,但它会被删除,并且会被版本 Y 取代,而没有那个特定的漏洞。当你得到一个工具来闯入 X 时,它就会消失。
但是……如果你可以保留一份 X 的副本,你知道的,以备后用?
您要做的是创建一个指向您要保留的文件的硬链接,将其存储在您的帐户可写的位置。然后,比如说, /usr/bin/sudo (因为它从来没有安全问题……)在某个时候被一个新文件替换,你可以保留旧版本。当你得到弹出它的工具时,你就走了!
这就是为什么老式多用户系统过去常常将 /usr 之类的东西放在一个文件系统上,而将主目录之类的东西放在另一个文件系统上的原因之一。这样,他们就不能硬链接到这样的任意废话并延长潜在易受攻击文件的寿命。当然,他们也可以延长别人的东西的寿命,搞砸他们的配额,所以……
当然,这些天来,在您找到的更现代的系统上并不是那么容易。这里的 Debian 11 不允许我这样做——它是 EPERM 城市。 Rocky 8(CentOS 8 和 RHEL 8 也是如此)也不会这样做。他们都在 /usr/lib/sysctl.d 中有一些东西可以锁定它。但是,大约一年前我最后一次尝试安装的旧 Slackware 14.2 工作站让我可以这样做。那怎么样,嗯?我敢打赌,如果我挖出旧驱动器并启动它们,它仍然可以工作。
因此,如果您的生活中有旧机器,并且可能有可疑的角色在上面运行,您可能需要检查它们。你可能会学到一些新的和有趣的东西。
顺便说一句,这是神奇的调味汁: /proc/sys/fs/protected_hardlinks 阅读 proc(5) 的手册页以了解更多信息。
有趣的是,根据我关于这个主题的原始笔记,早在 2003 年 11 月的 linux-kernel 邮件列表上就有关于这个的讨论。所以,我去找它,果然,这就是我很久以前读过的线程。有趣的是,据我所知,上游实际上没有任何变化。这让像我这样偏执的管理员别无选择,只能使用(最优秀的)Openwall 补丁来锁定这类东西。我在我的工作机器上使用了它,这些机器有非员工用户……以防万一。
看起来这个 /proc 旋钮出现在 Linux 3.6 中,看起来可以追溯到 2012 年。嗯。 2003 年……和 2012 年。那是很长的时间。显然,疯狂的道具应该归功于勇敢的 lkml 并最终在上游发生的人。
这整个情况是可怕的。阅读更多关于它的信息。