Ä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
Abhishek Bhatia
quelle
Ist das überhaupt möglich?
George Udosen
@ George bitte überprüfen bearbeiten.
Abhishek Bhatia
Schauen Sie sich diese unix.stackexchange.com/questions/253833/…
George Udosen
@ George das funktioniert nicht.
Abhishek Bhatia
Der Shell - Pfad sollte sein /etc/shellsfür chsh-ähnlichen Werkzeuge , um es zu übernehmen.
Muru

Antworten:

1

Hier ist ein Hinweis : /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Es scheint , dass Sie hinzufügen sollten /usr/bin/fishzu /etc/shells.

pim
quelle
Haha schön, chsh.ldap -s /usr/bin/zsh myusernamegibt mir eine Segmentation fault.
Jchook
Dann soll es hier zu melden: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
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.

Ziazis
quelle
-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?

Max
quelle
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