今天,一位 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
只是进行系统调用来更改权限,您可以通过多种方式自行进行该系统调用。