użytkownik nie istnieje w / etc / passwd podczas próby zmiany domyślnej powłoki

22

Chcę zmienić moją domyślną powłokę z tcsh na bash. Więc próbowałem i oto co się stało:

>sudo chsh userid
Changing the login shell for userid
Enter the new value, or press ENTER for the default
        Login Shell [/xhbin/tcsh]: /bin/bash
chsh: user 'userid' does not exist in /etc/passwd

Rzeczywiście, nie jestem w / etc / passwd. Nie wiem dlaczego.

Co mogę zrobić?

rmp251
źródło
11
Czy Twój system używa uwierzytelniania rozproszonego (np. Kerberos / Winbind)? W takim przypadku dane użytkownika nie pojawią się w lokalnym pliku / etc / passwd (ale powinny być widoczne przy użyciu getent passwd <userid>). Myślę, że to, czy uruchomiony chshjest obsługiwana w tym przypadku może zależeć od ustawień w/etc/pam.d/
steeldriver

Odpowiedzi:

15

Mój komputer jest częścią sieci korzystającej z uwierzytelniania rozproszonego, więc moje dane użytkownika nie pojawią się w lokalnym pliku / etc / passwd (ale są widoczne przy użyciu identyfikatora użytkownika getent passwd). (dzięki @steeldriver) W moim przypadku musiałem wykonać polecenie chsh na komputerze głównym.

rmp251
źródło
11
czy możesz wyjaśnić, czym jest „maszyna główna”?
Nerrve
W moim przypadku mam na myśli zestaw dedykowanych maszyn dostarczanych przez uniwersytet w ramach ich sieci, do których studenci mogą się logować i używać (udostępniać). W przeciwieństwie do mojej własnej maszyny w moim biurze.
rmp251
4
@ rmp251 To jest dokładnie mój scenariusz. Nie mam dostępu do podstawowej maszyny. Czy w inny sposób znalazłeś sposób na zmianę powłoki?
Geek
@Geek, czy znalazłeś sposób, aby go rozwiązać?
milushov
13

Istnieje obejście dla gnome-terminal:

  1. Przejdź do Edycja -> Preferencje profilu -> Tytuł i polecenie
  2. Zaznacz Uruchom niestandardowe polecenie zamiast mojej powłoki
  3. Podaj bashjako polecenie niestandardowe ( fishlub cokolwiek innego)
MrMeszaros
źródło
Dzięki! Podanie polecenia uruchomienia natychmiast po otwarciu terminala (lub nowej karty terminalu) za pomocą ustawień, które działały dla mnie.
kakoder
Działa to również w przypadku Konsoli i yakuake w KDE.
xgdgsc
6

Jeśli używasz uwierzytelniania LDAP przez PAM lub coś takiego, musisz znaleźć odpowiedź na swoim serwerze LDAP. Celujmy w Microsoft AD, w którym to przypadku twoje konto domeny nie jest /etc/passwdzalogowane, ale możesz zobaczyć swoją własność użytkownika w AD, przez getent passwd | grep user.

Jeśli na końcu pokazuje, że twoja powłoka jest /bin/csh, to dlatego, że w twojej reklamie jest do tego atrybut. Więc jeśli masz konto administratora w AD, możesz to naprawić samodzielnie. W przeciwnym razie po prostu powiedz administratorowi AD, aby włączył zaawansowane funkcje na karcie Widok użytkowników i komputerów usługi Active Directory> Właściwości użytkownika> Atrybuty UNIX . Tam możesz zmienić powłokę logowania na /bin/bash.

Upewnij się, że nie zapomnisz uruchomić:

sudo /opt/pbis/bin/config LoginShellTemplate /bin/bash

Źródło: Użytkownik nie istnieje w / etc / passwd podczas próby zmiany domyślnej powłoki .

Masoud
źródło
1
Pytanie dotyczyło zmiany powłoki dla jednego użytkownika, podczas gdy zmiany konfiguracji pbis dla wszystkich użytkowników.
kubańczyk
5

Jeśli chcesz zmienić powłokę dla swojego użytkownika, nie musisz być rootem. Po prostu wpisz:

chsh

bez sudoargumentów i bez.


Zobacz także man chsh:

Polecenie chsh zmienia powłokę logowania użytkownika. To określa nazwę
początkowej komendy logowania użytkownika. Normalny użytkownik może zmienić tylko
powłoka logowania dla własnego konta ; administrator może zmienić login
shell dla dowolnego konta.
Andrea Corbellini
źródło
Powodem, dla którego użyłem sudo było to, że bez niego nic nie zrobiłoby. > whoami userid > chsh You may not change the shell for 'userid'.
rmp251
Powodem tego jest to, że chsh nie działa z Kerberos
Lennart Rolland
2

Jeśli nie pamiętasz nazwy użytkownika, możesz użyć whoamipolecenia, aby Cię zapamiętać.

Więc spróbuj z:

sudo chsh $(whoami)

Jeśli rzeczywiście nie istnieje wiersz zaczynający się od Twojej nazwy użytkownika w /etc/passwdpliku (który wydaje się niewytłumaczalny), możesz dodać nowy taki:

nazwa użytkownika : x: 1000: 1000: twoje prawdziwe imię ,,,: / home / nazwa użytkownika : / bin / bash

Zobacz także: Zrozumienie formatu pliku / etc / passwd .

Radu Rădeanu
źródło
1
Jednym z powodów, dla których użytkownik może nie istnieć w / etc / passwd, jest brak uwierzytelnienia na tym komputerze (np.
Ldap
1

Jeśli próbujesz ssh na zdalnym hoście z użytkownikiem domeny, zmiana powłoki może nie być możliwa, chshjak wspomniano w @Masoud. Ale oto proste obejście tego przypadku - za każdym razem, gdy ssh do komputera, wykonaj następujące czynności:

ssh my-host -t "zsh --login"

lub

ssh my-host -t "cd /data/repos; zsh --login"

Jeśli chcesz również zalogować się bezpośrednio do innego działającego katalogu.

dux2
źródło