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"

권한을 복원할 때 주의하세요. 일부 파일에는 /bin0755 이외의 권한이 있을 수 있습니다.mountsu

그러나 재부팅하면 작동하는 perl지점 까지 도달하지 못할 수도 있습니다 ld.so. 하지만 문제를 해결할 수 있습니다 initramfs(initramfs에서 복구 쉘을 얻기 위해 잘못된 루트 디렉토리를 전달합니다. 루트 파일 시스템을 마운트한 후(읽기 전용) initramfs가 쉘을 제공하도록 하려면 Debian의 커널 인수도 참조하세요 break=bottom) break=init. 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 권한이 없는 파일의 권한을 수정합니다.

다음을 실행하여 수정하세요 python.init

에서 grub시작 항목을 편집합니다. 이번에는 root=매개변수를 유지하고 ro다음으로 변경 rw하고 추가합니다 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
>>> import os
>>> os.chmod('/bin', 0755)

그 일을 수행하는 데 아무것도 필요하지 않습니다 /bin. 물론 아직 시도해본 적은 없지만...

답변4

sudo chmod -R 744 /path-to-your-system/bin라이브 배포를 사용해 볼 수 있습니다 .

관련 정보