Bir chmod -R 000 / bin'den nasıl kurtarılır?


36

Ve şimdi geri chmod edemiyorum .. veya diğer sistem programlarımdan herhangi birini kullanamıyorum. Neyse ki bu, birlikte çalıştığım bir VM'de, ancak bunu çözmenin bir yolu var mı? Sistem Ubuntu Sunucusu 12.10'dur.

Kurtarma moduna yeniden girmeye çalıştım, ne yazık ki şimdi, sistemin çalışabilmesi için en alt düzeyde kullanılabilirlikten sonra bazı programlar vermeme izinleri nedeniyle sisteme ön yükleme yapamıyorum. Gördüğüm bu:

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

Bundan sonra bilgisayar kilitleniyor.


O mi /binsen CHMOD değeri veya dosyalar halinde /binya da her ikisi?
Stéphane Chazelas

1
-R seçeneği olan / bin dizini ... ikisi de
jett

Tinycore'lu bir usb'in kullanışlı olmasına dikkat edin. Böyle bir şey olduğunda faydalıdır.
destan

Yanıtlar:


28

Başka bir temiz işletim sistemi önyükleyin, dosya sistemini bağlayın ve izinleri düzeltin.

Bozuk dosya sisteminiz bir Sanal Makinede yaşadığından, ana bilgisayar sisteminizin kullanılabilir ve çalışıyor olması gerekir. Kırık dosya sisteminizi oraya yerleştirin ve düzeltin.

QEMU / KVM durumunda, örneğin dosya sistemini nbd kullanarak bağlayabilirsiniz .


Bunu düzeltmenin bir yolu olarak muhtemelen doğru olduğunu düşünüyorum, ancak şu anda sistemi monte etmeye çalışmam gerekiyor - şu an sadece initrd.img memtest & abi'deki gibi görüntü dosyasından sistemi alıyorum.
jett

1
@jett, /bootbu VM'nin bölümünü kurdunuz . Kök dosya sistemini bulmaya çalışın. LVM'de vgchange -ayise nbd, etkinleştirmek için bağladıktan sonra çalıştırın .
Stéphane Chazelas

1
@StephaneChazelas Anladım. İkinize de çok teşekkürler. Bu tür hataları seviyorum, bir ton öğrendim!
jett

Sabit olmasına sevindim. Bir şey özlüyorum. Eğer bir vm ise, o zaman ana sistem için sadece büyük bir dosyadır, değil mi? Onarım yapmak için içine bir şey nasıl monte edersiniz? (Bunu vm olmayan bir sistemde nasıl yapacağımı biliyorum.)
Joe

68

Yine de root, xizin biti ayarlanmamış dosyaları çalıştıramazsınız . Gerçekte yapabileceğiniz şey ld.soonu çağırmaktır (dinamik olarak bağlanabilir çalıştırılabilir olmaları koşuluyla):

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

chmodYürütülebilir yapının mimarisine uygun olanı kullanın . Benim durumumda x86_64bir:

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

Veya benzeri şeyler için bir yer /usr/binveya başka yerler arayın :chmodperl

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

Bazı dosyaların /binbenzer mountveya su0755 dışındaki izinlere sahip olması gereken izinleri geri yüklerken dikkatli olun .

Ancak, yeniden başlatıldıysanız, koşabileceğiniz perlveya ld.sogerileyebileceğiniz bir noktaya gelemeyebilirsiniz . Bunları düzeltebilirsiniz initramfs(initramfs'ta kurtarma kabuğu almak için yanlış bir kök dizini iletin; ayrıca , initramfs dosyasının kök dosya sistemi kurulduktan sonra size bir kabuk vermesi için Debian'daki break=bottomveya break=initçekirdek parametresine de bakın) gerçi)). Veya VM'nizi canlı bir CD görüntüsünden önyükleyin veya VM dosya sistemini diğerlerinin önerdiği gibi ana bilgisayara monte ederek düzeltin.

İnitramfs yolunu düzeltme:

In grub, boot girişini düzenleyin ve root=parametreyi linuxkomuttan kaldırın :

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önyükleme için. Ubuntu'nun initramfs'ı, kök dosya sistemini bulamayacak, bu yüzden bir kurtarma işlemi başlat sh. Ardından, kök dosya sistemini bağlayın (benim durumumda /dev/vdb, makinenize adapte olun) ve buradakileri düzeltin:

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

Önyükleme yaptıktan sonra, başka bir sistemle karşılaştırarak 755 izne sahip olmayan dosyaların izinlerini düzeltin.

Çalıştırarak Sabitleme pythonolarak init:

Olarak grub, düzenleme çizme girişi, bu sefer tutmak root=parametreyi, değişim roiçin rwbir ekleme 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                                 

Sonra python komut isteminde:

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

Yine, bir kez önyüklenirken, başka bir sistemle karşılaştırarak 755 izne sahip olmayan dosyaların izinlerini düzeltin.


5
+1, başka büyük cevap, Stephane. Eklerdim: bu already try to rebootdurumda: canlı bir CD'de önyükleme yapın, / bin içeren bölümü rw olarak yerleştirin ve chmod 755 /bin(ve bunlar da değiştirildiyse içindeki dosyalar). Ancak daha sonra, tüm dosyaların doğru izin olup olmadığını kontrol edin (linux dağıtımınıza bağlı olarak, muhtemelen orijinal pakete göre kontrol edebilir /
silebilirsiniz

4
VAY. Bilgi derinliğiniz korkutucu 8-).
slm

Çalıştırmak için ld.so kullanamıyorum. pb.abhijeetr.com/fRWf Burada yanlış giden ne?
Abhijeet Rastogi

@shadyabhi, muhtemelen çok işlevli bir sisteme sahipsiniz ve 32bit ld.so dosyasını 64bit bir çalıştırılabilir üzerinde kullanmaya çalışıyorsunuz. ld.soBelki başka bir dizinde olmalı /lib/x86_64-linux-gnu.
Stéphane Chazelas

1
@Kwpolska, os.execlve execçalıştırmak için, sadece yürütülebilir yerine, bir süreç çatal yok edilir aynı süreçte tüm pid 1. Proses 1 yapılır böylece başlangıçta çalışır python, sonra shsonra, init.
Stéphane Chazelas,

8

Python kullan :)

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

/binİşini yapmak için hiçbir şeye ihtiyacı olmamalı . Açıkçası bunu denemedim ...


Hmm, her zaman bunun ve diğer betik dillerinin sadece chmod programını çağıracağını düşündüm. Bilmek oldukça iyi!
jett

1
Hayır, program chmodtarafından çağrılan chmodve chmodpython / perl / ruby ​​vb chmod.
Dennis Kaarsemaker

2
Yapılı kabukları hariç chmod. Bu gibi mermilerin sashişe yaradığı bir durum . Statik olarak bağlanmıştır ve yerleşik gibi çoğu kurtarmachmod komutuna sahiptir (bu nedenle başka hiçbir şeye güvenmez). /sbinTüm dosya sistemlerinde fazladan kopyalara zarar vermeyecek olmasına rağmen genellikle oturur ve memlockd ile birlikte kullanılabilir. zshve ksh93chmod yerleşiği var (varsayılan olarak etkin olmasa da).
Stéphane Chazelas

1
@Dennis Eğer sisteme hiç ön yükleme yapamıyorsanız, nasıl çalıştırabilirsiniz? OP'nin dediği gibi: “Maalesef şu anda sisteme ön yükleme yapamıyorum”.
Nadir Sampaoli

@NadirSampaoli Bu kesinlikle yeniden başlatmadan önce yakalamanız gereken şeylerden biri. Bu, chmodding root işleminden sonra ve sistemi kapatmadan önce başarılı bir şekilde yapılabilir.
Ken Bellows

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.