Skorupa korzenia błędnie zmieniona. Jak mogę zmienić go z powrotem na prawidłową powłokę?


19

Błędnie wszedłem

chsh -s /usr/bin 

zamiast

chsh -s /bin/bash 

a teraz nie mogę zalogować się do powłoki roota, jak ręcznie uruchomić powłokę bash jako root?


w jakim kontekście to zrobiłeś. W bieżącym terminalu dla domyślnej powłoki użytkownika?
jgr208

nie masz użytkowników w grupie sudo?
Rui F Ribeiro

3
nie sudo vipwdziała?
Rui F Ribeiro

1
@RuiFRibeiro tak, dzięki, nie wiedziałem, że mogę zmienić domyślną powłokę root w tym pliku
ChiseledAbs

1
W tym przypadku nie jest to konieczne, ale jeśli nieumyślnie stworzysz katastrofę z udziałem roota, zwykle możesz przełączyć komputer w tryb pojedynczego użytkownika, naprawić problem, a następnie powrócić do trybu wielu użytkowników.
boardrider

Odpowiedzi:


29

Chociaż root nie ma dostępu, użytkownik w grupie sudo może nadal uruchamiać uprzywilejowane polecenia - wygląda na to, że błąd nie występuje w sudo, ale w innym miejscu sudo chshpolecenia (np. Błąd chsh).

Jako takie twoje sudo najwyraźniej działa.

Plik passwd można edytować za pomocą:

sudo vipw

I powłoka root zmieniła się ręcznie.

( /etc/passwdzwykle pierwsza linia )

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

Fom Man Vipw

Komendy vipw i vigr edytują odpowiednio pliki / etc / passwd i / etc / group. Za pomocą flagi -s będą edytować wersje cień tych plików, odpowiednio / etc / shadow i / etc / gshadow. Programy ustawią odpowiednie blokady, aby zapobiec uszkodzeniu plików.


3
Nigdy nie wiedziałem vipwi vigrdziękuję! Zawsze używałemsudo vim /etc/passwd
kot

3
Możesz być także zainteresowany visudo sudo.ws/man/1.8.15/visudo.man.html , @tac
Rui F Ribeiro

3
Lub sudo -ewykonuje tę funkcję blokowania-edycji dla dowolnej edycji.
Kojiro

16

Inną opcją, zakładając, że masz dostęp do innego konta, jest ręczne zastąpienie domyślnej powłoki za pomocą su --shell=/bin/bash:

-s, --shell = SHELL
uruchom SHELL, jeśli pozwala na to / etc / shells

Podstawową zaletą tego jest to, że wymaga tylko dostępu do innego konta, a nie innego uprzywilejowanego .


8

Ze względów bezpieczeństwa loginy tekstowe lub graficzne oraz narzędzia podobne sui sudoumożliwiające uruchamianie poleceń jako inny użytkownik - wszystkie te polecenia uruchamiane są przez powłokę użytkownika docelowego. Jeśli powłoka docelowego użytkownika nie działa, cóż, zobaczyłeś wyniki :-(

Jeśli nie zdarzy Ci się, aby gdzieś nadal działała powłoka root lub coś takiego jak plik binarny z setuid-root lub coś, co pozwala ci to obejść, ponowne uruchomienie i usunięcie problemu za pomocą systemu ratunkowego lub obrazu na żywo jest prawdopodobnie najlepszym rozwiązaniem.

Uruchom system ratunkowy, zamontuj gdzieś na przykład główny system plików prawdziwego systemu /mnt/fooi edytuj, /mnt/foo/etc/passwdaby naprawić powłokę. Zapisz, odmontuj i gotowe.


ciekawe, co się stanie, jeśli to zrobisz, a plik / etc / passwd znajduje się w haszu zamiast w zwykłym tekście?
jgr208

1
/etc/passwdto nie jest zwykły tekst? Nie widziałem tego przynajmniej od dekady. Czy to wciąż coś na niektórych systemach? W każdym razie myślę, że chroot /mnt/foo chsh -s /bin/bashmoże załatwić sprawę?
Celada

Nigdy nie miałem opisanego problemu, jednak pracuję z zamkniętymi systemami, które muszą mieć / etc / passwd nie w postaci zwykłego tekstu, aby uniknąć hakerów i takie narażenie systemu jeszcze bardziej, jeśli uzyskają dostęp. Hmm, to może zadziałać, powiedzmy, że mam nadzieję, że nigdy nie będę musiał próbować sprawdzić, czy to rzeczywiście działa.
jgr208

Byłem w stanie edytować / etc / passwd za pomocą sudo z konta użytkownika, nie wiedziałem, że powłoka została zdefiniowana w tym pliku, dzięki
ChiseledAbs

@ChiseledAbs oh, byłeś? Dobrze dla ciebie, cieszę się, że rozwiązałeś swój problem. Nie sądziłem, że ci to pozwoli.
Celada

6

Dodaj init=/bin/bashdo wiersza poleceń jądra (jeśli uruchamiasz się z grub, naciśnij, eaby edytować pozycję rozruchową), a będziesz miał powłokę bash działającą jako root bez konieczności podawania hasła. Twój główny system plików prawdopodobnie nadal będzie montowany tylko do odczytu, więc najpierw musisz go ponownie zamontować, a następnie możesz z powrotem zmienić powłokę chsh.


4

sudo usermod -s /bin/bash jdoe

zmieni powłokę jdoe na bash. Następnie możesz to sudo egrep jdoe /etc/passwdzweryfikować.

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.