La shell di root è cambiata per errore. Come posso cambiarlo in una shell valida?


19

Sono entrato per errore

chsh -s /usr/bin 

invece di

chsh -s /bin/bash 

e ora non riesco ad accedere a una shell root, come posso avviare manualmente una shell bash come root?


in quale contesto hai fatto questo. In un terminale corrente, per la shell predefinita degli utenti?
jgr208

non hai utenti nel gruppo sudo?
Rui F Ribeiro,

3
fa sudo vipwil lavoro?
Rui F Ribeiro,

1
@RuiFRibeiro sì, grazie, non sapevo che avrei potuto cambiare la shell di root predefinita in quel file
ChiseledAbs

1
In questo caso non è necessario, ma quando si è inavvertitamente creata una catastrofe che coinvolge root, è possibile in genere portare la macchina in modalità utente singolo, risolvere il problema e quindi tornare alla modalità multiutente.
boardrider

Risposte:


29

Mentre root non ha accesso, un utente nel gruppo sudo può comunque eseguire comandi privilegiati - sembra che l'errore non sia in sudo, ma altrove nel sudo chshcomando (es. Errore chsh).

Pertanto il tuo sudo sembra funzionare.

Il file passwd può essere modificato con:

sudo vipw

E la shell di root è cambiata manualmente.

(prima riga del /etc/passwdsolito)

root:x:0:0:root:/root:/bin/bash

Fom man vipw

I comandi vipw e vigr modificano i file / etc / passwd e / etc / group, rispettivamente. Con il flag -s, modificheranno rispettivamente le versioni shadow di quei file, / etc / shadow e / etc / gshadow. I programmi imposteranno i blocchi appropriati per prevenire il danneggiamento dei file.


3
Non l'ho mai saputo vipwe vigr, grazie! Ho sempre usatosudo vim /etc/passwd
cat

3
Potresti essere interessato anche a visudo sudo.ws/man/1.8.15/visudo.man.html , @tac
Rui F Ribeiro

3
Oppure sudo -e, che esegue questa funzione di blocco-modifica per qualsiasi modifica.
Kojiro,

16

Un'altra opzione, supponendo che tu abbia accesso a un altro account, è quella di sostituire manualmente la shell predefinita usando su --shell=/bin/bash:

-s, --shell = SHELL
esegue SHELL se / etc / shells lo consente

Il vantaggio principale di questo è che richiede solo l'accesso a un altro account, non a un altro privilegiato .


8

Per motivi di sicurezza, gli accessi testuali o grafici e programmi di utilità simili sue sudoche consentono di eseguire comandi come utente diverso eseguono tutti questi comandi attraverso la shell dell'utente di destinazione. Se la shell dell'utente di destinazione non è funzionale, beh, hai visto i risultati :-(

A meno che non ti capiti di avere una shell root ancora funzionante in esecuzione da qualche parte o qualcosa come un binario setuid-root o qualcosa che ti permetta di aggirare questo, riavviare e correggere il problema utilizzando un sistema di salvataggio o un'immagine live è probabilmente la soluzione migliore.

Avvia il sistema di salvataggio, monta il filesystem di root del tuo sistema reale da qualche parte, diciamo /mnt/foo, e modifica /mnt/foo/etc/passwdper riparare la shell. Salva, smonta e il gioco è fatto.


curioso, cosa succede se lo fai e il file / etc / passwd è in un hash invece che in un semplice testo?
jgr208

1
/etc/passwdnon è un testo in chiaro? Non lo vedo da almeno un decennio. È ancora qualcosa su alcuni sistemi? Ad ogni modo, immagino che chroot /mnt/foo chsh -s /bin/bashpotrebbe fare il trucco in quel caso?
Celada,

Non ho mai avuto il problema descritto, tuttavia lavoro con sistemi bloccati che devono avere / etc / passwd non in testo normale per evitare che gli hacker e tali compromettano ulteriormente il sistema se ottengono l'accesso. Hmm che potrebbe funzionare, diciamo solo che spero di non dover mai provare a vedere se funziona davvero.
jgr208

Sono stato in grado di modificare / etc / passwd con sudo da un account utente, non sapevo che la shell fosse definita in questo file, grazie
ChiseledAbs

@ChiseledAbs oh, eri? Buon per te, felice di aver risolto il tuo problema. Non pensavo che ti avrebbe permesso.
Celada,

6

Aggiungi init=/bin/bashalla tua riga di comando del kernel (se fai il boot con grub, premi eper modificare la voce di avvio), e avrai una shell bash in esecuzione come root senza nemmeno dover fornire una password. Probabilmente il tuo filesystem di root verrà comunque montato in sola lettura, quindi dovrai rimontarlo prima, quindi puoi cambiare la shell con chsh.


4

sudo usermod -s /bin/bash jdoe

cambierà il guscio di jdoe in bash. È quindi possibile sudo egrep jdoe /etc/passwdverificare.

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.