Jak odzyskać z chmod -R 000 / bin?


36

A teraz nie jestem w stanie przeskoczyć z powrotem .. ani użyć żadnego z moich innych programów systemowych. Na szczęście jest to na maszynie wirtualnej, z którą bawiłem się, ale czy jest jakiś sposób na rozwiązanie tego? System to Ubuntu Server 12.10.

Próbowałem zrestartować się w trybie odzyskiwania, niestety teraz nie jestem w stanie uruchomić się w systemie z powodu uprawnień, które nie przyznają niektórym programom dostępności od początku do początku - system po prostu się zawiesza. Oto co widzę:

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

Następnie komputer się zawiesza.


Czy to /binchmoded czy pliki w, /binczy oba?
— Stéphane Chazelas

1
katalog / bin z opcją -R ... oba
— jett

Dobrze jest mieć pod ręką USB z Tinycore. Przydatne, gdy dzieje się coś takiego.
— saga

Odpowiedzi:


28

Uruchom inny czysty system operacyjny, zamontuj system plików i napraw uprawnienia.

Ponieważ uszkodzony system plików mieszka na maszynie wirtualnej, system hosta powinien być dostępny i działać. Zamontuj tam uszkodzony system plików i napraw go.

W przypadku QEMU / KVM możesz na przykład zamontować system plików za pomocą nbd .


Myślę, że jest to prawdopodobnie poprawny sposób, aby to naprawić, jednak muszę spróbować zainstalować system - teraz właśnie pobieram pre-system z pliku obrazu - jak w initrd.img memtest & abi.
— jett

1
@jett, zamontowałeś /bootpartycję tej maszyny wirtualnej. Spróbuj zlokalizować główny system plików. Jeśli na LVM, uruchom vgchange -aypo podłączeniu, nbdaby go aktywować.
— Stéphane Chazelas

1
@StephaneChazelas Mam to. Dziękuję obojgu bardzo - uwielbiam tego rodzaju błędy, nauczyłem się mnóstwo!
— jett

Cieszę się, że to naprawiono. Coś mi brakuje. Jeśli jest to vm, to jest to tylko jeden duży plik do systemu hosta, prawda? Jak zamontować coś w środku, aby wykonać naprawy? (Rozumiem, jak to zrobić w systemie innym niż VM).
— Joe

68

Mimo rootto nie można wykonywać plików, które nie mają xustawionego bitu uprawnień. Możesz jednak wywołać ld.sogo (pod warunkiem, że są to pliki wykonywalne połączone dynamicznie):

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

Użyj tej, która pasuje do architektury chmodpliku wykonywalnego. W moim przypadku ten x86_64:

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

Lub zadzwoń coś /usr/binlub gdzie indziej, aby wykonać chmodjak perl:

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

Uważaj podczas przywracania uprawnień, które niektóre pliki /binlubią mountlub sumają mieć uprawnienia inne niż 0755.

Jeśli po ponownym uruchomieniu komputera, jednak może nie być w stanie dostać się do punktu, w którym można uruchomić perlalbo ld.sochociaż. Możesz to naprawić z tego powodu initramfs(przekaż niepoprawny katalog główny, aby uzyskać powłokę odzyskiwania w initramfs; zobacz także parametr break=bottomlub break=initjądro Debiana, aby initramfs dał ci powłokę po zamontowaniu głównego systemu plików (tylko do odczytu) chociaż)). Lub uruchom maszynę wirtualną z obrazu CD na żywo lub napraw, instalując system plików VM na hoście, jak sugerowali inni.

Naprawianie sposobu initramfs:

W grubdokonaj edycji wpisu rozruchu i usuń root=parametr z linuxpolecenia:

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-Xuruchomić. Initramfs Ubuntu nie znajdzie głównego systemu plików, więc rozpocznij odzyskiwanie sh. Następnie zamontuj główny system plików (w moim przypadku /dev/vdbdostosuj się do swojego komputera) i napraw tam rzeczy:

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

Po uruchomieniu popraw uprawnienia do plików, które nie mają mieć uprawnień 755, porównując z innym systemem.

Naprawianie przez uruchomienie pythonjako init:

W grubedytujemy wpisu rozruchu, tym razem zachować root=parametr, zmiany rodo rwi dodaj 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                                 

Następnie w pytaniu 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

Ponownie, po uruchomieniu, napraw uprawnienia do plików, które nie mają mieć uprawnień 755, porównując z innym systemem.


5
+1, kolejna świetna odpowiedź, Stephane. Dodałbym: w already try to rebootprzypadku: uruchom na żywo CD, zamontuj rw partycję zawierającą / bin oraz chmod 755 /bin(i pliki wewnątrz, jeśli również zostały zmienione). Ale potem sprawdź, czy wszystkie pliki mają odpowiednie uprawnienia (w zależności od dystrybucji Linuksa, prawdopodobnie możesz sprawdzić / bin w stosunku do oryginalnego pakietu)
— Olivier Dulac

4
ŁAŁ. Twoja głębia wiedzy jest przerażająca 8-).
— slm

Nie mogę użyć ld.so do wykonania. pb.abhijeetr.com/fRWf Co się tutaj dzieje nie tak?
— Abhijeet Rastogi

@shadyabhi, prawdopodobnie masz system wielościeżkowy i próbujesz użyć 32-bitowego pliku ld.so na 64-bitowym pliku wykonywalnym. Musisz mieć inny ld.so, może w jakimś katalogu /lib/x86_64-linux-gnu.
— Stéphane Chazelas

1
@Kwpolska, os.execli execsą do wykonania, ale nie wybulić proces, wystarczy zastąpić plik wykonywalny w tym samym procesie , więc wszystko odbywa się w pid 1. 1 Proces początkowo biegnie python, potem sh, potem init.
— Stéphane Chazelas

8

Użyj Pythona :)

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

To nie powinno wymagać niczego, /binaby wykonać swoją pracę. Oczywiście nie wypróbowałem tego ...


Hmm, zawsze myślałem, że ten i inne języki skryptowe wywołują program chmod. Całkiem dobrze wiedzieć!
— jett

1
Nie, chmodto wywołanie systemowe wywoływane przez chmodprogram, a także przez chmodfunkcję w python / perl / ruby ​​itp. Powłoki wywołują jednak chmodnarzędzie.
— Dennis Kaarsemaker

2
Z wyjątkiem tych, które mają chmodwbudowane. W takiej sytuacji sashprzydatne są takie pociski . Jest statycznie powiązany i ma większość poleceń odzyskiwania , takich jak chmodwbudowane (więc nie polega na niczym innym). Zwykle siedziałby w /sbinnim, chociaż nie zaszkodziłoby posiadanie dodatkowych kopii na wszystkich systemach plików, i może być używany w połączeniu z memlockd. zshi ksh93mają wbudowany chmod (choć domyślnie nie jest włączony).
— Stéphane Chazelas

1
@Dennis Ale jak go uruchomić, jeśli w ogóle nie można uruchomić systemu? Jak mówi PO: „niestety nie mogę w ogóle uruchomić systemu”.
— Nadir Sampaoli

@NadirSampaoli Jest to zdecydowanie jedna z tych rzeczy, które musisz złapać przed ponownym uruchomieniem. Można to z powodzeniem zrobić po chmodding root i przed zamknięciem systemu.
— Ken Bellows

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.