Benutzer existiert nicht in / etc / passwd, wenn versucht wird, die Standard-Shell zu ändern

22

Ich möchte meine Standard-Shell von tcsh auf bash ändern. Also habe ich es versucht und das ist passiert:

>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

In der Tat bin ich nicht in / etc / passwd. Ich weiß nicht warum.

Was kann ich tun?

rmp251
quelle
11
Verwendet Ihr System verteilte Authentifizierung (z. B. Kerberos / WinBind)? In diesem Fall werden Ihre Benutzerdaten nicht in der lokalen Datei / etc / passwd angezeigt (sie sollten jedoch mit angezeigt werden getent passwd <userid>). Ich denke, ob chshin diesem Fall Laufen unterstützt wird, kann von den Einstellungen in/etc/pam.d/
steeldriver 21.09.13

Antworten:

15

Mein Computer ist Teil eines Netzwerks, das die verteilte Authentifizierung verwendet, sodass meine Benutzerdaten nicht in der lokalen Datei / etc / passwd angezeigt werden (sondern mit getent passwd userid angezeigt werden). (danke @steeldriver) In meinem Fall musste ich chsh auf einer Core-Maschine machen.

rmp251
quelle
11
Können Sie erklären, was eine "Kernmaschine" ist?
Nerrve
In meinem Fall beziehe ich mich auf einen Satz dedizierter Maschinen, die von der Universität in ihrem Netzwerk bereitgestellt werden und bei denen sich die Studenten anmelden und verwenden können (gemeinsam genutzt). Im Gegensatz zu meiner eigenen Maschine in meinem Büro.
rmp251
4
@ rmp251 Das ist genau mein Szenario. Ich habe keinen Zugriff auf die Core-Maschine. Haben Sie eine Möglichkeit gefunden, die Shell anderweitig zu ändern?
Geek
@Geek hast du den Weg gefunden, wie man es löst?
Milushov
13

Es gibt eine Problemumgehung für gnome-terminal:

  1. Gehen Sie zu Bearbeiten -> Profileinstellungen -> Titel und Befehl
  2. Aktivieren Sie "Benutzerdefinierten Befehl anstelle meiner Shell ausführen"
  3. Geben Sie bashals kundenspezifische Befehl (oder fish, oder irgendetwas)
MrMeszaros
quelle
Vielen Dank! Geben Sie einen Befehl an, der sofort ausgeführt werden soll, wenn ich mein Terminal (oder eine neue Terminalregisterkarte) über die für mich vorgenommenen Einstellungen öffne.
Cacoder
Dies funktioniert auch für Konsole und Yakuake in KDE.
xgdgsc
6

Wenn Sie die LDAP-Authentifizierung über PAM oder ähnliches verwenden, müssen Sie Ihre Antwort auf Ihrem LDAP-Server finden. Lassen Sie es uns auf Microsoft AD ausrichten. In diesem Fall befindet sich Ihr Domänenkonto nicht /etc/passwdbei der Anmeldung, aber Sie können Ihre Benutzereigenschaft in AD durch anzeigen getent passwd | grep user.

Wenn am Ende angezeigt wird /bin/csh, dass es sich um Ihre Shell handelt , liegt dies daran , dass in Ihrer AD ein Attribut dafür vorhanden ist. Wenn Sie ein Administratorkonto in AD haben, können Sie dies selbst beheben. Andernfalls weisen Sie Ihren AD-Administrator an, die erweiterten Funktionen auf der Registerkarte Ansicht unter Active Directory-Benutzer und -Computer> Benutzereigenschaften> UNIX-Attribute zu aktivieren . Dort können Sie die Login-Shell auf ändern /bin/bash.

Vergiss nicht zu rennen:

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

Quelle: Benutzer existiert nicht in / etc / passwd, wenn versucht wird, die Standard-Shell zu ändern .

Masoud
quelle
1
Die Frage war, die Shell für einen Benutzer zu ändern, während sich die pbis-Konfiguration für alle Benutzer ändert.
Kubanczyk
5

Wenn Sie die Shell für Ihren Benutzer ändern möchten, müssen Sie nicht root werden. Tipp einfach:

chsh

ohne sudo und ohne argumente.


Siehe auch man chsh :

Der Befehl chsh ändert die Benutzeranmeldeshell. Dies bestimmt den Namen
des ersten Anmeldebefehls des Benutzers. Ein normaler Benutzer darf nur die ändern
Login-Shell für ihren eigenen Account ; Der Superuser kann das Login ändern
Shell für jedes Konto.
Andrea Corbellini
quelle
Der Grund, warum ich sudo verwendet habe, war, dass es nichts ohne es getan hat. > whoami userid > chsh You may not change the shell for 'userid'.
rmp251
Der Grund dafür ist, dass chsh nicht mit Kerberos funktioniert
Lennart Rolland
2

Wenn Sie Ihren Benutzernamen vergessen haben, können Sie den whoamiBefehl verwenden, um sich an Sie zu erinnern.

Also versuchen Sie es mit:

sudo chsh $(whoami)

Wenn ja, existiert keine Zeile, die mit Ihrem Benutzernamen in beginnt /etc/passwd Datei (was unerklärlich scheint), können Sie eine neue wie die folgende hinzufügen:

Benutzername : x: 1000: 1000: Ihr richtiger Name ,,,: / home / Benutzername : / bin / bash

Siehe auch: Grundlegendes zum Dateiformat / etc / passwd .

Radu Rădeanu
quelle
1
Ein Grund, warum Ihr Benutzer in / etc / passwd möglicherweise nicht existiert, ist, dass die Authentifizierung auf diesem Computer nicht durchgeführt wird (z. B. ldap)
MatrixManAtYrService
1

Wenn Sie versuchen, mit einem Domänenbenutzer in einen Remote-Host zu chshsshen , können Sie Ihre Shell möglicherweise nicht mit @Masoud ändern. Hier ist eine einfache Problemumgehung für diesen Fall:

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

oder

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

Wenn Sie sich auch direkt in ein anderes Arbeitsverzeichnis einloggen möchten.

dux2
quelle