如果仍然有root shell,则可能有机会修复系统。比方说,你感动了所有常见的目录(/bin
,/etc
,/lib
,/sbin
,/usr
-这是那些可能使回收困难的)下/oops
。
mv
即使您指定完整路径,也将无法直接发出命令/oops/bin/mv
。那是因为它mv
是动态链接的;因为您已经移动了/lib
目录,mv
所以无法运行,因为它找不到构成其代码一部分的库。实际上,这甚至比这更糟:mv
找不到动态加载器 /lib/ld-linux.so.2
(名称可能会因您的体系结构和Unix变体而有所不同,并且目录可能是不同的名称,例如/lib32
或/lib64
)。因此,在将/lib
目录移回之前,您需要显式调用链接器,并且需要指定移至库的路径。这是在Debian squeeze i386上测试的命令。
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
您可能需要针对其他发行版或体系结构进行一些调整。例如,对于x86_64上的CentOS:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
弄乱某些东西后/lib
,可以使用一个静态链接的工具箱。一些发行版(我不了解CentOS)提供了Busybox的静态链接副本。还有sash,它是一个内置许多命令的独立外壳。如果您有其中之一,则可以从那里进行恢复。如果您尚未安装它们,那就太迟了。
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
如果您不再具有root shell,但仍具有SSH守护进程监听功能,并且可以通过ssh以root身份直接登录,并且拥有这些静态链接的工具箱之一,则可以ssh进入。如果你可以移动的工作/lib
和/bin
,但不会/etc
。
ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
出于这种麻烦,一些管理员使用静态链接的shell设置了备用帐户,或者使根帐户使用静态链接的shell。
如果您没有根外壳并且没有采取预防措施,则需要从Linux live CD / USB引导(只要最新,只要能访问磁盘和文件系统,任何人都可以做)和将文件移回。