如何在没有 /usr/bin/chmod 的情况下 chmod?

如何在没有 /usr/bin/chmod 的情况下 chmod?

今天,一位 Unix 培训师向我讲述了一个故事,其中 root 密码被泄露给了学生,其中一个家伙删除了/usr/bin/chmod自己的执行权限。在这种情况下如何恢复chmod并使其再次可执行?假设从外部源获取它或重新编译它不是一个更好的选择,是否有一些聪明的黑客可以恢复它chmod本身?

请注意,这发生在很久以前,我并不是在寻找当前问题的解决方案,只是好奇 Unix 为我们提供了哪些解决此类问题的方法。

答案1

您可以直接运行加载程序,并向其传递您要运行的命令:

/lib/ld-linux.so /bin/chmod +x /bin/chmod

您的加载程序路径可能会有所不同。在 64 位系统上,您需要根据chmod编译方式选择正确的; 64 位版本的名称类似于/lib64/ld-linux-x86-64.so.2

答案2

chmod实用程序依赖于chmod()系统调用(请参阅 参考资料man 2 chmod)。因此,您可以使用几行 C 语言或任何其他具有包装器的语言(这将是其中的大多数)来完成此操作。很少有 *nix 系统会缺少 C 编译器和 perl 解释器;大多数 Linux 发行版都需要后者才能工作。

perl -e 'chmod 0755, "foobar.file"'

答案3

有些系统也已busybox安装,在这种情况下您可以运行:

busybox chmod +x /bin/chmod

既然你要求破解,我只想到另一种:

mv /bin/chmod /bin/chmod.orig
cp -a /bin/chown /bin/chmod

现在你有了一个/bin/chmod可执行文件,但它实际上是chown(即其他二进制文件)。现在我们要做的就是用原始二进制文件覆盖它。

dd if=/bin/chmod.orig of=/bin/chmod

它保留了 +x 标志,因此您只需为该文件窃取另一个文件的 +x 即可。

当然,如果所有这些替代二进制文件(包括加载程序、perl、python、gcc 等)都是 chmod -x,那么从救援系统修复它可能是唯一的选择。

答案4

首先我脑子里想的事情,

  • 从任何其他来源(网络图书、CD 等)启动并在该来源上使用 chmod 来设置权限。
  • 编写一个小型 C 程序来更改权限。
  • 编写perl脚本(ruby、php、python等)来更改权限

/usr/bin/chmod只是进行系统调用来更改权限,您可以通过多种方式自行进行该系统调用。

相关内容