chmod -R 000 / bin에서 복구하는 방법?


36

그리고 지금은 그것을 다시 수정하거나 다른 시스템 프로그램을 사용할 수 없습니다. 운 좋게 이것은 내가 놀았 던 VM에 있지만 이것을 해결할 수있는 방법이 있습니까? 시스템은 Ubuntu Server 12.10입니다.

복구 모드로 다시 시작하려고했지만 불행히도 이제 시스템을 시작할 수있는 초기 상태 이후에 일부 프로그램에 권한을 부여하지 않아 시스템으로 부팅 할 수 없습니다. 이것이 내가 보는 것입니다.

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

이 후 컴퓨터가 중단됩니다.


그 것이다 /bin당신은 chmoded하거나 파일 /bin또는 둘 다?
Stéphane Chazelas

1
-R 옵션이있는 / bin 디렉토리 ... both
jett

tinycore를 사용하여 USB를 편리하게 유지하는 것이 좋습니다. 이와 같은 일이 발생할 때 유용합니다.
saga

답변:


28

다른 깨끗한 OS를 부팅하고 파일 시스템을 마운트하고 권한을 수정하십시오.

손상된 파일 시스템이 VM에 있으면 호스트 시스템을 사용할 수 있고 작동해야합니다. 손상된 파일 시스템을 마운트하고 수정하십시오.

QEMU / KVM의 경우 예를 들어 nbd를 사용하여 파일 시스템을 마운트 할 수 있습니다 .


나는 이것이 아마도 그것을 고치는 방법으로 맞다고 생각하지만, 시스템을 마운트하려고 시도해야합니다. 지금 initrd.img memtest & abi에서와 같이 이미지 파일에서 사전 시스템을 가져오고 있습니다.
jett

1
@jett, /boot해당 VM 의 파티션 을 마운트했습니다 . 루트 파일 시스템을 찾아보십시오. LVM에있는 경우 vgchange -ay연결 후 실행 nbd하여 활성화합니다.
Stéphane Chazelas

1
@StephaneChazelas 알았습니다. 너무 감사합니다-나는 이런 종류의 실수를 좋아하고 톤을 배웠습니다!
jett

다행입니다. 뭔가 빠졌습니다. vm이라면 호스트 시스템에 하나의 큰 파일일까요? 수리를 위해 내부에 어떤 것을 장착합니까? (비 VM 시스템에서이 작업을 수행하는 방법을 이해합니다.)
Joe

68

로도 권한 비트가 설정 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처럼 mount또는 su의미가 0755 이외의 권한을 가지고 있습니다.

당신이 다시 부팅 한 경우, 그러나, 당신은 당신이 실행할 수있는 지점에 도착하지 못할 수도 있습니다 perl또는 ld.so생각. 당신은에서 일을 해결할 수 있습니다 initramfs또한 참조 (비록 initramfs에 회복 쉘을 얻기 위해 잘못된 루트 디렉토리를 통과 break=bottom하거나 break=init커널 매개 변수를 루트 파일 시스템이 마운트 된 후 다시 initramfs 당신에게 쉘을 제공하는 데비안 (읽기 전용 그러나)). 또는 라이브 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부팅합니다. 우분투의 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=매개 변수 변화 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                                 

그런 다음 파이썬 프롬프트에서 :

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 권한이없는 파일의 권한을 수정하십시오.


5
+1, 또 다른 훌륭한 답변, Stephane. 나는 추가한다 : already try to reboot경우 : 라이브 CD로 부팅하고, rw를 / bin을 포함하는 파티션 및 chmod 755 /bin(그리고 파일이 변경된 경우 내부 파일도) 마운트하십시오 . 그러나 나중에 모든 파일이 올바른 권한인지 확인하십시오 (리눅스 배포판에 따라 / bin을 원래 패키지와 비교하여 확인할 수 있음)
Olivier Dulac

4
와. 당신의 지식의 깊이는 무섭습니다 8-).
slm

ld.so를 사용하여 실행할 수 없습니다. pb.abhijeetr.com/fRWf 여기서 무엇이 잘못 되었습니까?
Abhijeet Rastogi 2016 년

@shadyabhi, 아마도 다중 아치 시스템이 있고 64 비트 실행 파일에서 32 비트 ld.so를 사용하려고합니다. ld.so아마도 같은 디렉토리에 다른 디렉토리 가 있어야합니다 /lib/x86_64-linux-gnu.
Stéphane Chazelas

1
@Kwpolska는, os.execlexec실행하기 위해, 그들은 단지 실행 교체 프로세스를 포크하지 않습니다되는 동일한 프로세스에서을 모두 PID 1. 공정 1에서 수행되도록 처음 실행 python한 후, sh다음, init.
Stéphane Chazelas

8

파이썬 사용 :)

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

/bin작업을 수행하기 위해 필요한 것은 없습니다 . 분명히, 나는 이것을 시도하지 않았다 ...


흠, 나는 항상 이것과 다른 스크립트 언어가 chmod 프로그램을 호출 할 것이라고 생각했다. 알아두면 좋겠다!
jett

1
아니요, 프로그램과 python / perl / ruby ​​등 의 함수에 chmod의해 호출되는 시스템 호출입니다 . 쉘은 유틸리티를 호출합니다 . chmodchmodchmod
Dennis Kaarsemaker

2
chmod내장 된 껍질을 제외하고 . 그것이 쉘과 같은 sash유용한 상황 입니다. 정적으로 연결되어 있으며 내장 과 같은 대부분의 복구 명령이 있습니다 chmod(따라서 다른 것에 의존하지 않음). 일반적 /sbin으로 모든 파일 시스템에서 추가 사본을 갖는 데 해를 끼치 지 않지만 memlockd와 함께 사용할 수 있습니다. zsh그리고 ksh93chmod를의 내장 (그러나 기본적으로 활성화되지 않음)를 가지고있다.
Stéphane Chazelas

1
@Dennis 그러나 시스템으로 부팅 할 수 없다면 어떻게 실행할 수 있습니까? OP가 말한 것처럼 : "안타깝게도 이제 전혀 시스템으로 부팅 할 수 없습니다".
Nadir Sampaoli 2016 년

@NadirSampaoli 이것은 재부팅하기 전에 꼭 잡아야 할 것들 중 하나입니다. 루트를 chmodding 한 후 시스템을 종료하기 전에이 작업을 성공적으로 수행 할 수 있습니다.
Ken Bellows

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.