그리고 지금은 그것을 다시 수정하거나 다른 시스템 프로그램을 사용할 수 없습니다. 운 좋게 이것은 내가 놀았 던 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
이 후 컴퓨터가 중단됩니다.
답변
다른 깨끗한 OS를 부팅하고 파일 시스템을 마운트하고 권한을 수정하십시오.
손상된 파일 시스템이 VM에 있으면 호스트 시스템을 사용할 수 있고 작동해야합니다. 손상된 파일 시스템을 마운트하고 수정하십시오.
QEMU / KVM의 경우 예를 들어 nbd를 사용하여 파일 시스템을 마운트 할 수 있습니다 .
답변
로도 권한 비트가 설정 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=
매개 변수 변화 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
그런 다음 파이썬 프롬프트에서 :
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 권한이없는 파일의 권한을 수정하십시오.
답변
파이썬 사용 🙂
$ python
>>> import os
>>> os.chmod('/bin', 0755)
/bin
작업을 수행하기 위해 필요한 것은 없습니다 . 분명히, 나는 이것을 시도하지 않았다 …
답변
sudo chmod -R 744 /path-to-your-system/bin
라이브 배포판에서 시도해 볼 수 있습니다 .