Kök kabuğunu ayarlamadan hatalı bir dosyaya kurtarma


23

Diyelim ki, kök kullanıcının kabuğunu kötü bir dosya yoluna dönüştürmek için 'chsh' kullanma gibi aptalca bir şey yaptım. Kök hesaba gelecekteki girişler aniden başarısız olur, atıfta bulunur / bin / bulunmazsa bulunmaz ve sizi giriş ekranına geri yükler. Kurtarma modunu engellemek veya / etc / passwd dosyasını düzenlemek için bir LiveCD eklemek, sistemimi geri almak için seçeneklerim nelerdir? Diyelim ki (eğlence için mi?) Direksiyonda başka bir kullanıcı olmadığını varsayalım. Düşünceler?


Bu önerdiğin varsayımsal bir durum mu?
Chris Down

Gerçekten de (nispeten taze) bir FreeBSD kurulumunda tam olarak bunu yapmıştı. O zamandan beri yeniden kurulmuştu, sanırım şimdi biraz varsayımsal, ancak gerçekten tam sisteme sahip olsaydım, iyileşmeye giden en iyi yolun ne olacağını merak ediyorum.
noffle

Orada bulundum, yaptım, tişörtü aldım. Ancak yönettiğim her makinenin bir sonucu olarak, her durumda, yedek bir kök hesabım var.
Mark D

Yanıtlar:


30

Önyükleme yaparken, init=/bin/bashönyükleme seçeneklerinizi (veya başka bir işlevsel kabuğa giden bir yolu) ekleyin - doğrudan tek bir kullanıcı kabuğuna bırakılırsınız. Bu ortamdaki girişi mount -o remount,rw /değiştirmeden önce yapmanız gerekebilir /etc/passwd. Ondan sonra, sadece yeniden başlat veya yap exec /sbin/init 3. Sadece do not yazın exitbu çekirdek panik olmasına neden olur olarak * Ctrl + D veya.

İki aşamalı modda yüklenen bazı sistemlerde (initrd görüntüsüyle) bu yöntemin ek bir varyasyonu gerekebilir. Önyükleme seçeneklerinin içerdiğini init=ve en önemlisi real_init=, o zaman yerleştirilecek yerin /bin/bashikinci parametre (yani real_init=/bin/bash) olması gerektiğini fark ederseniz .

* Bunun nedeni, o ortamda kabuğun çekirdek tarafından init programı olarak görülmesidir - ki bu, çekirdeğin bildiği tek işlemdir - çekirdeğin altında çalışan bir sistemi temsil eder. Bu işlemin aniden sona ermesi, çekirdeğin sistemi kapatmasını söylemeden çekirdek panikine neden olması gerekir. (Etrafınızdaki her şey siyah ve sessizleşse aniden panik olmaz mıydı?)


Güzel exec, ama sanırım daha önce montaj puanlarıyla fazla uğraşmamak daha iyi.
Stéphane Gimenez 18:11

2
@ Stéph Eğer çekirdeğiniz kök okuma-yazma yapmazsa bunu yapmanız gerekir . Aksi takdirde, hiçbir dosyayı değiştiremezsiniz (dahil /etc/passwd).
rozcietrzewiacz

İyi düşünmek! Tek kullanıcı kipine girmeyi başarmıştım, ancak / etc / passwd komutunu değiştirmek için / read / write olarak yeniden yapılanmam gerektiğine inanmadı. Teşekkürler!
noffle

@roz Elbette, init'i /çalıştırmadan önce (başka hariç ) monte edilmiş olan her şeyi sökmekle ilgileneceğimi söylemeye çalışıyordum .
Stéphane Gimenez 19:11

@ Stéph Bağlantılarla ilgili herhangi bir sorun olmamalıdır. /bin/bashTam olarak o noktada çalıştırıldığına, ardından /sbin/initnormal önyüklemede çalıştırıldığına dikkat edin . Dolayısıyla o zaman sistem tarafından herhangi bir işlem yapılamaz.
rozcietrzewiacz

10

suÇalıştırmak için bir kabuk kullanabilir ve belirtebilirsiniz (başka bir kullanıcının girmediğine dair notunuzda bunun mümkün olmadığını ima etmeye çalışıp çalışmadığınızı bilmiyorum wheel):

su -c /bin/bash

Aksi takdirde, eğer ssh daemon'unuz root ile giriş yapmanıza izin veriyorsa, benzer bir şey yapabilirsiniz:

ssh root@localhost /bin/bash

Ayrıca bir kabuğu bootloader'ınızdaki (örneğin init=/bin/kshveya benzeri) init olarak ayarlayabilirsiniz .


1
İyi fikirler. =) Şüphelendiğiniz gibi, başka hiçbir kullanıcı 'su' kullanamaz. sshd ayrıca kök girişini devre dışı bıraktı.
noffle

6

Eğer bootloader'ınız çekirdek parametrelerinin canlı olarak düzenlenmesine izin verecek şekilde yapılandırılmışsa, bir çözüm, init işlemi gibi bir kabuğu yeniden başlatıp kullanmaktır init=/bin/bash. Ardından, elle monte edilmesi gerekenleri monte edin ve düzenleyin /etc/passwd. syncve her zamanki gibi tekrar çizme init.


Wow, farkettim ki aynı cevabı benimle aynı dakika içinde
yolladım

6

Sorunuzun özü, kök olmanın tüm yollarını kapattıysanız, tanım olarak kök olamazsınız.

Bir unix sisteminde üç yolun kök olmasına izin vermek yaygındır:

  • Oturum rootaçma isteminde girerek ve root şifresini yazarak root olarak giriş yapın. Bu kök kabuğunu çalıştırır.
  • Sıradan bir kullanıcı olarak giriş yapın, ardından suroot şifresini çalıştırarak ve yazarak root olun. Bazı sistemlerde bu, belirli bir grupta olmayı gerektirir (genellikle denir wheel); diğer sistemlerde, root şifresini bilen herkes root olabilir. Kimlik doğrulama için PAM kullanan sistemler pam_wheel, varsa tekerlek grubunu yönetmek için kullanır . İle bir komut belirtirseniz su -c, kökün kabuğu ile yürütülür.
  • Sıradan bir kullanıcı olarak giriş yapın, sonra sudokendi şifrenizi çalıştırarak ve yazarak root olun. Kullanıcı hesabına bir yönetici tarafından sudo yetkiler verilmiş olması gerekir. sudoersDosyada kısıtlanmadıkça , kökün kabuğundan bağımsız olarak herhangi bir komutu çalıştırabilirsiniz.

Kökün kabuğunun kullanılamamasına karşı korumanın geleneksel bir yolu, UID 0 ile başka bir hesap ve farklı bir kabuk tanımlamaktır ( toorgeleneksel bir addır). Örneğin, kökün kabuğu dinamik olarak bağlı bir çalıştırılabilirse (belleği korumak için iyi bir fikir) ve bir kitaplık yükseltmesi yanlış giderse, kökün kabuğu kullanılamaz olabilir. Alternatif kök hesabının, muhtemelen BusyBox gibi yerleşik ortak programlara sahip olan statik olarak bağlı bir çalıştırılabilir dosyası olacaktır .


5

Yukarıdaki cevaplar harika ve onları okumayı öğrendim. Bu yaklaşımların ayrıntılarını hatırlamıyorsanız ve yeniden başlatmayı sakıncası yoksa, sisteminizi her zaman canlı bir CD dağıtımı kullanarak başlatabilir, / bölümünü düzenleyebilir ve / etc / passwd ile reboot komutlarını düzenleyebilirsiniz. Yukarıdaki çözümler kadar zarif değil, ancak hatırlaması daha kolay.


/etc/passwdDosyayı elle düzenleme ile bağlantılı riskleri belirtmelisiniz . Bunun dışında, iyi nokta - Ben sadece aynı öneriyi cevabıma eklemek istedim.
rozcietrzewiacz 28:11
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.