Ripristino dall'impostazione della shell di root su un file errato


23

Diciamo che sono andato e ho fatto una cosa stupida, come usare 'chsh' per cambiare la shell dell'utente root in un percorso di file errato. I futuri accessi all'account root falliranno bruscamente, citando / bin / qualunque cosa non venga trovata, e ti riavvieranno alla schermata di accesso. Escludendo una modalità di ripristino o inserendo un LiveCD per modificare / etc / passwd, quali sono le mie opzioni per ripristinare il mio sistema? Supponiamo anche (per divertimento?) Che non ci siano altri utenti nella ruota. Pensieri?


È una situazione ipotetica che stai proponendo?
Chris Down,

Avevo davvero fatto esattamente questo su un'installazione (relativamente nuova) di FreeBSD. Da allora è stato reinstallato, quindi suppongo che ora sia un po 'ipotetico, ma sono curioso di sapere quale sarebbe la migliore strada per il recupero se davvero avessi presente l'intero sistema.
noffle

Sono stato lì, fatto quello, ho preso la maglietta. Ma di conseguenza su ogni macchina che gestisco mantengo un account root di backup, per ogni evenienza.
Segna D il

Risposte:


30

All'avvio, aggiungi init=/bin/bash(o un percorso a qualsiasi altra shell funzionale) alle tue opzioni di avvio: verrai portato direttamente a una singola shell utente. Potrebbe essere necessario fare mount -o remount,rw /prima di modificare la /etc/passwdvoce in quell'ambiente. Successivamente, basta riavviare o fare exec /sbin/init 3. Basta non digitare exito premere Ctrl + D, poiché ciò comporterebbe il panico del kernel *.

Un'ulteriore variante di questo metodo potrebbe essere necessaria su alcuni sistemi caricati in modalità a due stadi (con un'immagine initrd). Se noti che le opzioni di avvio contengono init=e, soprattutto real_init=, il posto da inserire /bin/bashdovrebbe essere l'ultimo parametro (cioè real_init=/bin/bash).

* Questo perché in quell'ambiente, la shell è vista dal kernel come il programma init - che è l'unico processo che il kernel conosce - rappresenta un sistema in esecuzione sotto l'occhio del kernel. Terminare improvvisamente quel processo, senza dire al kernel di arrestare il sistema, deve provocare il panico del kernel. (Non ti preoccuperesti se all'improvviso tutto intorno a te diventasse nero e silenzioso?)


Bello per il exec, ma immagino sia meglio non sbagliare troppo con i punti di montaggio in anticipo.
Stéphane Gimenez,

2
@ Stéph Si deve fare che se il kernel non montare radice lettura-scrittura. Altrimenti non sarai in grado di modificare alcun file (incluso /etc/passwd).
rozcietrzewiacz,

Pensare bene! Ero riuscito a entrare in modalità utente singolo, ma non mi ha colpito il fatto che dovevo rimontare / leggere / scrivere per modificare / etc / passwd. Grazie!
noffle

@roz Certo, stavo cercando di dire che mi sarei occupato di smontare tutto il resto avrebbe potuto essere montato (diverso da /) prima di eseguire init.
Stéphane Gimenez,

@ Stéph Non dovrebbero esserci problemi con i supporti. Si noti che /bin/bashviene eseguito esattamente nel punto, quindi /sbin/initverrà eseguito all'avvio normale. Quindi in quel momento non è possibile eseguire alcuna azione dal sistema.
rozcietrzewiacz,

10

È possibile utilizzare sue specificare una shell da eseguire (non sono sicuro se si sta tentando di sottintendere che ciò non è possibile con la nota in merito alla presenza di altri utenti wheel):

su -c /bin/bash

Altrimenti potresti fare qualcosa di simile se il tuo demone ssh consente l'accesso al root:

ssh root@localhost /bin/bash

Puoi anche impostare una shell come init nel tuo bootloader, per esempio, init=/bin/ksho simili.


1
Buone idee. =) Come sospettavi, nessun altro utente può usare "su". sshd ha anche il login root disabilitato.
noffle

6

Se il tuo bootloader è configurato per consentire la modifica live dei parametri del kernel, una soluzione è riavviare e usare una shell come processo di init, ad es init=/bin/bash. Quindi, montare tutto ciò che deve essere montato a mano e modificarlo /etc/passwd. synce riavvia con il solito init.


Caspita, ho appena notato che hai pubblicato la stessa risposta nello stesso minuto di me :-)
rozcietrzewiacz,

6

Se l'essenza della tua domanda è che hai bloccato tutti i modi per diventare root, allora per definizione non puoi diventare root.

È comune consentire tre modi per diventare root su un sistema unix:

  • Accedi come root, inserendo rootun prompt di accesso e digitando la password di root. Questo esegue la shell di root.
  • Accedi come un normale utente, quindi diventa root eseguendo sue digitando la password di root. Su alcuni sistemi, questo richiede di essere in un particolare gruppo (spesso chiamato wheel); su altri sistemi, chiunque conosca la password di root può diventare root. I sistemi che utilizzano PAM per l'autenticazione utilizzano pam_wheelper gestire il gruppo di ruote se ne hanno uno. Se si specifica un comando con su -c, viene eseguito tramite la shell di root.
  • Accedi come un normale utente, quindi diventa root eseguendo sudoe digitando la tua password. L'account utente deve essere stato dotato dei poteri sudo da un amministratore. A meno che non sia limitato nel sudoersfile, è possibile eseguire qualsiasi comando, indipendentemente dalla shell di root.

Un modo tradizionale per proteggersi dalla non disponibilità della shell di root è quello di definire un altro account con UID 0 e una shell diversa ( toorè un nome tradizionale). Ad esempio, se la shell di root è un eseguibile collegato dinamicamente (una buona idea per conservare la memoria) e un aggiornamento della libreria va storto, la shell di root potrebbe essere inutilizzabile. L'account root alternativo avrebbe un eseguibile collegato staticamente, possibilmente uno con utilità comuni integrate come BusyBox .


5

Le risposte di cui sopra sono fantastiche e ho imparato leggendole. Se non ricordi i dettagli di questi approcci e non ti dispiace riavviare, puoi sempre avviare il sistema usando una distribuzione CD live, montare la / partizione e quindi modificare / etc / passwd e riavviare. Non elegante come le soluzioni di cui sopra, ma più facile da ricordare.


È necessario sottolineare i rischi connessi alla modifica manuale del /etc/passwdfile. Oltre a questo, buon punto: volevo solo aggiungere lo stesso suggerimento alla mia risposta.
rozcietrzewiacz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.