Benutzerverzeichnis unter OS X in der Shell ändern

Unter OS X kann man in Einstellungen bei Benutzer & Gruppen mit den erweiterten Einstellungen (Rechts-Klick auf den Benutzer) das Benutzerverzeichnis (Home-Verzeichnis) ändern. Die Änderung wird nach einem Reboot wirksam. Wenn man sich dabei ungeschickt anstellt, dann kann man sein OS X in einen Zustand versetzen, in dem es das Benutzerverzeichnis nicht lesen kann. Die Folgen sind fatal. Die Anmeldung wird mit einem Fehler abgewiesen. Daher kann man mit der eigenen Benutzerkennung den Fehler nicht in Einstellungen beheben.

Sofern man eine weitere Benutzerkennung mit administrativen Rechten hat, ist man fein raus und kann mit dieser Benutzerkennung über die Einstellungen das eigene Benutzerverzeichnis auf das zutreffende oder zumindest ein nutzbares Verzeichnis setzen.

Hat man keine entsprechende Kennung in der Hinterhand, dann ist der leichte Weg verbaut.   

Ausgangslage

Ich hatte einen konzeptionellen Fehler beim Umstellrn meines Benutzerverzeichnisses gemacht1 und konnte das Passwort für den Reserve-Admin-Account nicht finden.

Da ich das System nicht aus einem Backup neu aufsetzen wollte, musste eine andere Lösung her.

Zugang zum System

Als erstes viel mir ein, dass OS X auch “nur” ein Unix mit dickem Zuckerguss drüber ist. Daher sollte eine Login per ssh möglich sein2.

Das System moserte zwar bei der Anmeldung, dass es nicht in das Benutzerverzeichnis wechseln kann, aber ich hatte nun Zugang zum System, was ja schon die halbe Miete ist.

Klassiker tut es nicht

Als alter Unixer wollte ich dem Problem per sudo nano /etc/passwd3 an den Kragen. Ich staunte dann nicht schlecht, als ich meinen Benutzernamen nicht in der /etc/passwd fand.

Wir eine Google-Recherche ergab, benutzt OS X – in diesem Fall leider – Open Directory zur Verwaltung der Benutzerdaten und legt die Daten in einer Datenbank ab.

Die Lösung

Die Datenbank kann in der Shell mit dscl bearbeitet werden, das eine komplexe Syntax hat. Die folgende Eingabe setzt das Benutzerverzeichnis:

sudo dscl . -change /Users/<username> NFSHomeDirectory <old-path> <new-path> 

Den Benutzernamen, das alte und das neue Verzeichnis muss man entsprechend anpassen.

dscl -change erwartet zwingend die Eingabe des alten Wertes (hier des aktuellen Benutzerverzeichnisses). Gibt man hier nicht den gespeichterten Wert vor, dann bricht der Befehl mit einem Fehler ab.

Glücklicherweise kann dscl nicht nur Werte ändern, sondern auch auslesen. Das aktuell gesetzte Benutzerverzeichnis kann man mit dem folgenden Befehl auslesen:

sudo dscl . -read /Users/<username> NFSHomeDirectory

Über die weiteren, vielfältigen Funktionen des Tools klärt ein man dscl auf4.

Aus meiner Sicht kann man mit dscl leicht sein System zerschießen. Ich rate daher zu äußerster Vorsicht bei der Nutzung.


  1. Ich hatte das Benutzerverzeichnis auf eine verschlüsselte (nicht File-Vault), externe Festplatte verlagert und OS X war nach den Reboot nicht mehr in der Lage das Benutzerverzeichnis zu lesen, weil der Schlüsselbund mit dem Key in jemen verschlüsselten Verzeichnis liegt… 
  2. Voraussetzung ist, dass der Zugang per ssh freigegeben ist.Wenn man jedoch ein Sicherheitsfanatiker ist und die Anmeldung via ssh mit Passwort unterbunden hat, dann ist auch hier wieder Schluss. Die Datei mit den vertrauenswürdigen Keys liegt üblicherweise im Benutzerverzeichnis, das ja nicht verfügbar ist. 
  3. Die /etc/passwd ist die Konfigurationsdatei, in der auf Unix-Systemen klassisch Informationen zu den Benutzer angelegt sind. Mit einem Texteditor wie nano und Administratorrechten (deshalb das sudo) ausgestattet, kann man hier leicht Änderungen vornehmen.  
  4. Zumindest soweit, dass man mit diesem Wissen eigene Erkundungstouren beginnen kann. 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kommentare abonnieren

Es erfolgt keine Weitergabe von Daten an externe Dienste wie WordPress.com.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.