Ändern Sie die Standard-Shell, wenn sich der Benutzer nicht in / etc / passwd befindet


8

Irgendwelche Ideen, wie ich die Schale in Fisch verwandeln kann?

$ sudo usermod -s /usr/bin/fish jaan
usermod: user 'jaan' does not exist in /etc/passwd
$ getent passwd $USER
jaan:x:15466:94:Jaan Altosaar:/home/jaan:/bin/zsh

Verwandte Fragen: Der Benutzer ist in / etc / passwd nicht vorhanden, wenn versucht wird, die Standard-Shell zu ändern. Es scheint, als würde ldap verwendet.

$ cat /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

# Having the NOTFOUND=return bit was breaking dns resolution on web1 and web2. But we probably
# don't want any of the mdns stuff so let's get rid of it all.
#hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts:          files dns

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap
automount:      ldap

Also habe ich das relevante ldap-Paket installiert.

$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: /usr/bin/fish
Traceback (most recent call last):
  File "/usr/bin/chsh.ldap", line 69, in <module>
    constants.NSLCD_USERMOD_SHELL: shell,
  File "/usr/share/nslcd-utils/nslcd.py", line 128, in usermod
    assert con.get_response() == constants.NSLCD_RESULT_BEGIN
  File "/usr/share/nslcd-utils/nslcd.py", line 103, in get_response
    return self.read_int32()
  File "/usr/share/nslcd-utils/nslcd.py", line 71, in read_int32
    return _int32.unpack(self.read(_int32.size))[0]
struct.error: unpack requires a string argument of length 4
$ which fish
/usr/bin/fish
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: "/usr/bin/fish"
/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
$ /usr/bin/fish
(standard_in) 1: syntax error
Welcome to fish, the friendly interactive shell

Ist das überhaupt möglich?
George Udosen

@ George bitte überprüfen bearbeiten.
Abhishek Bhatia


@ George das funktioniert nicht.
Abhishek Bhatia

Der Shell - Pfad sollte sein /etc/shellsfür chsh-ähnlichen Werkzeuge , um es zu übernehmen.
Muru

Antworten:



1

Warten Sie, es ist ein LDAP-Benutzer. In LDAP gibt es eine Einstellung, mit der Sie die Standard-Shell für den Benutzer in ihnen ändern können.

Sie können ldap-account-manager installieren , mit dem Sie ein Webfrontent für die ldap-Konfiguration erhalten.

apt install ldap-account-manager

Geben Sie hier die Bildbeschreibung ein

Dies kann auf jedem Server erfolgen, auf dem Sie die Konfiguration durchführen möchten. Da müssen Sie den Server ohnehin in den Konfigurationsdateien konfigurieren. Ich würde Ihnen jedoch empfehlen, es auf dem Server zu installieren, auf dem die LDAP tatsächlich ausgeführt wird, damit Sie sich leichter daran erinnern können.


-1

Um ajmitch hier zu zitieren ,

Sie können fish als Standard-Shell festlegen, indem Sie chsh -s which fish ausführen. Melden Sie sich dann ab und wieder an. (Um es wieder auf bash zu setzen, müssen Sie natürlich die Fish-Syntax verwenden, wie diese chsh -s (welche bash))

Verwenden Sie einfach chsh -s which fishund stellen Sie sicher, dass Sie sich abmelden und wieder anmelden oder Ihren Computer neu starten.

Übrigens könnte dies hier ein mögliches Duplikat sein: Wie setze ich Fisch als Standardschale?


Hmm..chsh funktioniert nur, wenn der Benutzer in / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia

Ah ... ja ... ich habe diesen Teil nicht gesehen ...
Max

1
Das funktioniert nicht, wenn Konten von LDAP verwaltet werden. -1
David Foerster
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.