如何从 chmod -R 000 /bin 恢复?

如何从 chmod -R 000 /bin 恢复?

现在我无法将其修改回来..或使用我的任何其他系统程序。幸运的是,这是在我一直在玩的虚拟机上,但是有什么方法可以解决这个问题吗?系统是Ubuntu Server 12.10。

我尝试重新启动进入恢复模式,不幸的是现在我根本无法启动进入系统,因为在 init-bottom 可用性之后没有授予某些程序运行的权限 - 系统只是挂起。这是我所看到的:

Begin: Running /scripts/init-bottom ... done
[   37.062059] init: Failed to spawn friendly-recovery pre-start process: unable to execute: Permission denied
[   37.084744]  init: Failed to spawn friendly-recovery post-stop process: unable to execute: Permission denied
[   37.101333] init: plymouth main process (220) killed by ABRT signal

此后计算机挂起。

答案1

即使作为root,您也无法执行没有x设置权限位的文件。不过,您可以做的是调用ld.so它(前提是它们是动态链接的可执行文件):

$ echo /lib/*/ld*.so
/lib/i386-linux-gnu/ld-2.27.so /lib/x86_64-linux-gnu/ld-2.27.so

使用与可执行文件的体系结构相匹配的一个chmod。就我而言x86_64

sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod

/usr/bin或者在其他地方调用某些东西来执行chmod类似的操作perl

sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"

恢复权限时要小心,某些文件/bin可能具有 0755 以外的权限。mountsu

但是,如果您重新启动,您可能无法达到可以运行的perl程度ld.so。不过,您可以修复问题initramfs(传递不正确的根目录以在 initramfs 中获取恢复 shell;另请参阅Debian 上的break=bottombreak=init内核参数,让 initramfs 在挂载根文件系统后为您提供一个 shell(只读)尽管))。或者从 Live CD 映像启动 VM,或者按照其他人的建议通过在主机上安装 VM 文件系统来修复。

修复 initramfs 方式:

在 中grub,编辑启动项并root=linux命令中删除参数:

setparams 'Ubuntu, with Linux 3.2.0-27-generic'                          
                                                                         
recordfail                                                               
gfxmode $linux_gfx_mode                                                  
insmod gzio                                                              
insmod ext2                                                              
set root='(hd1)'                                                         
search --no-floppy --fs-uuid --set=root dc02b07c-88ef-4804-afe0-4f02db2\ 
94561                                                                    
linux /boot/vmlinuz-3.2.0-27-generic                                     
initrd /boot/initrd.img-3.2.0-27-generic                                 
                                                                         

Ctrl-X启动。 Ubuntu 的 initramfs 找不到根文件系统,因此开始恢复sh。然后安装根文件系统(在我的例子中/dev/vdb,适应你的机器)并修复那里的东西:

Target filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.


BusyBox v1.18.5 (Ubuntu 1:1.18.5-1ubuntu4) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs) mkdir /x
(initramfs) mount /dev/vdb /x
[   48.430071] EXT3-fs (vdb): error: couldn't mount because of unsupported optio
nal features (240)
[   48.477406] EXT4-fs (vdb): recovery complete
[   48.477747] EXT4-fs (vdb): mounted filesystem with ordered data mode. Opts: (
null)
(initramfs) chmod -R 755 /x/bin
(initramfs) umount /x
(initramfs) reboot

启动后,通过与其他系统进行比较,修复不具有 755 权限的文件的权限。

通过运行修复pythoninit

在 中grub,编辑启动项,这次保留root=参数,更改rorw并添加init=/usr/bin/python

setparams 'Ubuntu, with Linux 3.2.0-27-generic'                          
                                                                         
recordfail                                                               
gfxmode $linux_gfx_mode                                                  
insmod gzio                                                              
insmod ext2                                                              
set root='(hd1)'                                                         
search --no-floppy --fs-uuid --set=root dc02b07c-88ef-4804-afe0-4f02db2\ 
94561                                                                    
linux /boot/vmlinuz-3.2.0-27-generic root=UUID=dc02b07c-88ef-4804-afe0-\
4f02db294561 rw init=/usr/bin/python
initrd /boot/initrd.img-3.2.0-27-generic                                 

然后,在 python 提示符处:

Begin: Running /scripts/init-bottom ... done.
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.chmod('/bin/sh',0755)
>>> os.chmod('/bin/chmod',0755)
>>> os.execl('/bin/sh','sh')
sh: 0: can't access tty; job control turned off
# chmod -R 0755 /bin
# mount -o remount,ro /
[  100.704720] EXT4-fs (vdb): re-mounted. Opts: errors=remount-ro
# exec /sbin/init

再次,启动后,通过与另一个系统进行比较来修复不具有 755 权限的文件的权限。

答案2

启动另一个干净的操作系统,挂载文件系统并修复权限。

由于损坏的文件系统位于虚拟机中,因此您的主机系统应该可用且正常工作。将损坏的文件系统挂载到此处并修复它。

对于 QEMU/KVM,您可以使用以下命令挂载文件系统:暂无

答案3

使用Python:)

$ python
>>> import os
>>> os.chmod('/bin', 0755)

那不应该需要任何东西来/bin完成它的工作。显然,我还没有尝试过这个......

答案4

您可以尝试 sudo chmod -R 744 /path-to-your-system/bin使用实时发行版。

相关内容