Rorschachs Tagebuch

Standard-Shell in einer NIS-Umgebung setzen Januar 28, 2009

Filed under: Linux — Rorschach @ 18:24
Tags: , , ,

Wenn man die Standard-Shell in einer NIS-Umgebung setzen will hat man ein paar Probleme. Zuerst einmal funktioniert ein simples:

chsh -s /bin/zsh

nicht. Das liefert einem nur eine Fehlermeldung:

$ chsh -s /bin/zsh
chsh: can only change local entries; use ypchsh instead.

Der Grund dafür ist, dass die Standard-Shell in der /etc/passwd gespeichert wird. Diese wird in einer NIS-Umgebung allerdings durch einen NIS-Server bereitgestellt und wenn man sie ändern möchte muss dies in der passwd der NIS-Konfiguration des Servers geschehen. Dazu gibt es wie oben von der Fehlermeldung angedeutet das Programm ypchsh. yp steht übrigens für YellowPage was der alte Name von NIS war. Die meisten NIS-Tools tragen aber auch heute noch das yp im Namen.

Mit:

$ ypchsh $USER

könnte man nach der Passworteingabe diese Information nun auf dem NIS-Server ändern. Doch auch das trägt Probleme. Wenn man nämlich die Standard-Shell, zum Beispiel wie ich, auf die Z-Shell ändern möchte dann ist dies nur praktikabel, wenn auch auf jedem Rechner in der NIS-Umgebung die Z-Shell installiert ist. Ansonsten kann man sich nichtmehr auf einem Rechner einloggen auf welchem die Z-Shell nicht installiert ist. Man würde nach dem Einloggen einfach die Meldung erhalten „Can’t execute /bin/zsh.“ und würde wieder auf den Anmeldedialog zurückgeworfen werden.

Diese Lösung ist bei einer weniger weit verbreiteten Shell deswegen nicht sinnvoll, wenn man nicht 100%ig sicher sein kann, dass auf jedem Host zu dem man sich verbinden muss diese Shell auch installiert ist. Ich habe die Standard-Shell deswegen weiterhin auf /bin/bash stehen gelassen.

Da ich trotzdem auf allen Rechnern wo es möglich ist die Z-Shell benutzen möchte habe ich mir etwas anderes ausgedacht. Ich habe ganz am Anfang in meine ~/.bashrc einfach diese Abfrage eingefügt:

if [ -f /bin/zsh ];then
	/bin/zsh
fi

Damit wird auf jedem Host auf welchem die Z-Shell installiert ist die Z-Shell gestartet, wenn man sich auf einem tty einloggt bzw. ein Terminal startet.

Einziger Nachteil dieser Methode ist, dass man quasi zwei Shells laufen hat und zwar wird die Z-Shell von der Bash gestartet, wobei die Bash aber nicht beendet wird. Hier mal ein Ausschnitt von pstree welcher ziemlich gut zeigt, dass die Z-Shell nur ein Kindprozess der Bash ist:

     │                                            ├─urxvtd─┬─bash───dumpcap
     │                                            │            ├─bash───vim
     │                                            │            └─bash───zsh───pstree

Eine andere praktikable Möglichkeit ist mir bis jetzt noch nicht eingefallen. Es gilt also abzuwägen ob einem die Vorteile seiner Lieblings-Shell den Overhead der Bash wert sind. Wobei der Overhead nun nicht so gewaltig ist, was allerdings natürlich auch von den vorhandenen Rescourcen abhängt.

Update:

Henning hat in einem Kommentar die Lösung für obiges Problem beschrieben:

if [ -e /bin/zsh ];then
	exec /bin/zsh
fi

Dies führt dazu, dass der Bash-Prozess beendet wird und nur noch die Z-Shell läuft, also genau das was man haben möchte und die perfekte Lösung um seine Lieblings-Shell in einer NIS-Umgebung zu setzen🙂

 

3 Responses to “Standard-Shell in einer NIS-Umgebung setzen”

  1. Henning Says:

    Wenn du das script ein bisschen abänderst, kannst du den bash-Prozess durch zsh ersetzen.
    Damit muss sie zwar immer noch einmal angestartet werden und deine .bashrc interpretieren,
    wird aber sobald die zsh läuft aus dem RAM und vom Prozessor gefegt.

    if [ -f /bin/zsh ];then
    exec /bin/zsh
    fi

    Der entsprechende Tree-Ausschnitt sollte danach etwa so aussehen
    (habs jetzt mal auf deine Tree angepasst, bei mir hab ich kein urxvtd und was dumpcap is weiss ich nichtmal ;))

    |- urxvtd — bash — dumpcap
    |-bash–vim
    `-zsh—pstree

  2. Henning Says:

    Sorry, dass ich gleich noch einen Hinterherschiesse:
    Man kann sich natürlich auch bei seinem admin erkundigen, ob es vielleicht eine leichtgewichtige shell auf allen Rechnern gibt.
    z.B. busybox, die echte sh (achtung ist gerne mal ein symlink auf bash), etc… (hab da nicht son guten Überblick).

    Auchso und statt -f nehmen die meisten bash-coder in so ner Situation -e, „kostet“ das selbe und überprüft nebenbei noch, ob
    /bin/zsh auch ausführbar ist (wobei ich mir grad auch keine realistische Situation vorstellen kann bei der es eine /bin/zsh gibt die nicht ausführbar ist ;))

  3. Rorschach Says:

    Hi Henning,
    vielen dank für den Tipp, das funktioniert hervorragend🙂 !

    Achja dumpcap ist ein Bestandteil von wireshark. Damit kann man von der Konsole aus seinen Netzwerkverkehr in eine Datei speichern und mit Wireshark analysieren.


Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s