Benutzerkonten und Konfigurationsdateien nahtlos migrieren

Aus LinuxUser 12/2011

Benutzerkonten und Konfigurationsdateien nahtlos migrieren

© Wax115, sxc.hu

Verschiebebahnhof

Zahlreiche Programme speichern in der Konfiguration absolute Pfade. Ändern Sie einen Benutzernamen und das zugehörige Home-Verzeichnis, zeigen plötzlich viele Pfade ins Leere. Unser Workshop zeigt, wie Sie das beheben.

Ein Benutzeraccount ist schnell angelegt – entweder über die systemeigenen grafischen Tools oder über die Kommandozeile, wie in der letzten Ausgabe gezeigt [1]. Was aber, wenn der einmal gewählte Name eines Tages nicht mehr in das Schema des mittlerweile gewachsenen Kontenstamms hineinpasst? Für diesen Fall stellt ein Linux-System die passenden Kommandos bereit. Um einen Account aber richtig zu migrieren, braucht es mehr als nur das Umbenennen von Konten- und Gruppennamen.

Persönliche Konfigurationsdateien, Einträge in der globalen Konfiguration des System, Spool-Files und Crontab-Einträge – der Username oder der Pfad zum Home-Verzeichnis verstecken sich an vielen Stellen im Dateisystem. Wagen Sie den Schritt, einen oder mehrere Accounts umzubenennen, gilt es auf jeden Fall, vorher das obligatorische Backup zu erstellen.

Mit Hinblick auf die manchmal kniffelige Suche nach Einträge stellt sich die Frage, ob sich der Aufwand lohnt. Eine Stärke von Linux liegt jedoch gerade in der Flexibilität und Offenheit des Systems. Viele Dateien liegen im Klartext vor, und wo das nicht der Fall ist, da helfen in den meisten Fällen die Bordmittel weiter.

Plattmachen und nur die wichtigsten Daten einspielen, das ist Windows-Art. Linux bietet die Möglichkeit, ein System über viele Jahre weiter zu pflegen und genau das Gleiche gilt für die Benutzerdaten. Ausmisten ist natürlich trotzdem ausdrücklich erlaubt.

Harmonie

Einen Account auf einen neuen Nutzernamen und den passenden neuen Gruppennamen umzustellen ergibt zum Beispiel dann Sinn, wenn Sie zwischen verschiedenen Rechnern die Konten harmonisieren möchten, womöglich im Hinblick auf das zentrale Sichern von Daten auf einem Speicher im lokalen Netzwerk.

Hinter jedem Benutzernamen und jeder Gruppe im System steht eine so genannte ID, ein numerischer Wert, den Sie beispielsweise ermitteln, indem Sie den Befehl ls mit der Option -n in einem Terminal eingeben (Listing 1). Mit dem Befehl id sehen Sie dagegen, welchen Gruppen Sie angehören.

Listing 1

$ ls -n
drwxrwxr-x  2 1019 1019   4096 2010-06-10 11:17 bin
drwxr-xr-x  3 1019 1019   4096 2011-08-31 12:37 Desktop
drwxrwxr-x  6 1019 1019   4096 2011-09-05 13:28 Dokumente
drwxrwxr-x  9 1019 1019  20480 2011-09-07 17:36 Mail
drwxrwxr-x  2 1019 1019   4096 2008-12-09 11:34 RCS
drwxrwxr-x  6 1019 1019   4096 2011-08-23 16:01 src
drwxrwxr-x  4 1019 1019   4096 2011-05-19 11:24 tmp

Möchten Sie also die Benutzerkonten von Grund auf vereinheitlichen, gilt es im ersten Schritt zu prüfen, ob die Benutzer- und Gruppen-IDs über die verschiedenen hinweg PCs voneinander abweichen. Falls ja, dann gibt es mehrere Möglichkeiten: Sind die Wunsch-IDs bereits vergeben, steht womöglich ein kompliziertes Bäumchen-wechsel-dich-Spiel an, bei dem Sie mit neuen, noch nicht vergebenen IDs als Zwischenlösung arbeiten. Wie das Verfahren genau aussieht, hängt stark von der jeweiligen Umgebung ab.

Die regulären Benutzer erhalten in der Regel eine ID ab dem Wert 1000; die IDs für Gruppen passend zum Benutzernamen starten ebenfalls mit diesem Wert. Listing 2 zeigt die Datei /etc/passwd, die unter anderem einen Eintrag für den Benutzer Max Mustermann enthält.

Listing 2

mustermann:x:1001:1002:Max Mustermann,,,:/home/mustermann:/bin/bash
emusterfrau:x1010:1010:Eva Musterfrau,,,:/home/emusterfrau:/bin/bash

Nun handelt es sich dabei um einen alten Account. In der Zwischenzeit arbeiten mehr Leute auf dem Rechner, und zwischenzeitlich hat jemand, der mit der Administration betraut war, das Schema zum Benennen der User geändert. Bestand der Username früher nur aus dem Nachnamen in Kleinschreibung (mustermann), verwenden der neue Admin den ersten Buchstaben des Vornamens sowie den kompletten Nachnamen (emusterfrau), wiederum alles in Kleinschreibung.

Den alten Benutzeraccount haben Sie schnell umbenannt (Listing 3, Zeile 1). Auch die passende Gruppe benennen Sie bei Bedarf mit einem einzigen Kommando um (Listing 3, Zeile 2). Meldet sich der Benutzer aber zum ersten Mal nach dieser Aktion an, erlebt er unter Umständen eine unangenehme Überraschung: Manche Programme speichern fahrlässigerweise in den Konfigurationsdateien absolute Pfade. Die zeigen nun natürlich ins Leere.

Listing 3

$ sudo usermod -l mmustermann -d /home/mmustermann -m mustermann
$ sudo groupmod -n mmustermann mustermann

Guter Grep

Möchten Sie alle Stellen im neuen Home-Directory lokalisieren, die einen Eintrag mit dem Namen des alten Heimatverzeichnisses enthalten, so helfen die Bordmittel in der Regeln weiter. Dabei gilt es zu unterscheiden zwischen versteckten Dateien, die direkt im Benutzerverzeichnis liegen und solchen, die in einem versteckten Ordner liegen. Da es sich in beiden Fällen häufig um einfache Textdateien handelt, hilft an dieser Stelle das Werkzeug Grep:

$ grep -rle /home/mustermann \.[^\.]* 2>/dev/null

Mit diesem Kommando fördern Sie alle sogenannten Dotfiles und Konfigurationsdateien in versteckten Verzeichnissen zutage, die den gesuchten String /home/mustermann enthalten. Diese Liste fällt unter Umständen sehr lang aus und enthält eventuell Dateien aus dem Mülleimer (.Trash) oder Thumbnail-Dateien. Hier gilt es zu überlegen, ob Sie diese nicht einfach löschen. Es empfiehlt sich aber, zuvor ein Backup des gesamten Benutzerverzeichnis anzulegen – der Teufel ist bekanntlich ein Eichhörnchen. Darüber hinaus sammeln sich im Home-Directory im Laufe der Jahre gerne verwaiste Dateien, die zu einer Software gehören, die Sie schon lange nicht mehr nutzen – im Zweifelsfall ebenfalls Kandidaten zum Entsorgen.

Hat sich der Bestand reduziert, geht es an die leidige Aufgabe, alle Dateien einzeln zu öffnen und von Hand die entsprechenden Einträge zu ändern. Das nimmt unter Umständen viel Zeit in Anspruch. Ein Automatisieren empfiehlt sich aber nur bedingt, denn allzu leicht ändern Sie so eine Stelle, die die Software vielleicht doch in der alten Form benötigt.

Mozilla-Familie

Die Familie der Mozilla-Programme (Firefox, Thunderbird, Sunbird sowie Seamonkey) gehen beim Speichern der Konfiguration einen speziellen Weg. Auf aktuellen Systemen verstauen sie alle benutzerspezifischen Dateien in einem Profilordner. Darin liegen neben der eigentlichen Konfiguration prefs.js weitere Dateien, die Einstellungen für die jeweilige Software enthalten. Hat der oben verwendete Grep-Aufruf Dateien auch in diesem Folder zutage gefördert, so gilt es je nach Typ unterschiedliche Werkzeuge zu verwenden. Bei Dateien mit der Endung .js handelt es sich um Textdateien, die Sie bei Bedarf mit einem Editor ändern.

Allerdings liegt ein gewisses Risiko darin, direkt in den Konfigurationsdateien zu arbeiten: Unerwartete Seiteneffekte könnten durchaus zu Datenverlust führen. Es gilt daher sorgfältig abzuwägen, ob sich ein Editieren lohnt. Im Web findet sich eine gute Übersicht über die einzelnen Dateien in den Profilen der genannten Applikationen [2].

Im Falle des Browsers käme zum Beispiel infrage, sich die verwendeten Extensions vor der Migration zu notieren, die Bookmarks zu exportieren und alle Mails an einen sicheren Ort zu verschieben, zum Beispiel auf einen IMAP-Server. Dann löschen Sie das Profil einfach und legen es neu an, um anschließend die gesicherten Daten wieder zu importieren. Das hat natürlich den Nachteil, dass Sie so eventuell einen gut trainierten Spam-Filter verlieren.

In manchen Fällen handelt es sich bei den Dateien um SQLite-Datenbanken. Dahinter verbirgt sich eine SQL-Datenbank in einer einfachen Datei. Diese kommen häufig dann zum Einsatz, wenn eine Datei schnellen Zugriff auf strukturierte Daten benötigt. Hier haben Sie zum Beispiel die Möglichkeit, den Inhalt dieser Dateien mit dem folgenden Kommando einzusehen:

sqlite3 Datenbank-Datei '.dump;' | less

Über die Suche ([Umschalt]+[7]) lokalisieren Sie nun ganz einfach die betreffenden Stellen. Dann gilt es wieder zu entscheiden, wie Sie am besten verfahren: Im Fall des Testsystems lagen zum Beispiel einige Daten einer Extension in einer Datenbank, und diese verwiesen auf Dateien im alten Pfad. Auch hier gilt es wieder im Einzelfall zu entscheiden, ob es sich lohnt, die Pfade anzupassen, oder ob Sie lieber – wie in diesem Fall – die Extensions einfach neu installieren. Sollten Sie die Pfade tatsächlich anpassen wollen, hilft wieder Sed weiter.

Mit dem Kommando aus Listing 4 exportieren Sie die entsprechende Datei auf die Standardausgabe. Dort nimmt Sie der Stream-Editor Sed in Empfang. Mit ihm tauschen Sie die gewünschten Strings aus und geben das Ergebnis dann wieder an eine Sqlite3-Instanz weiter, die es in eine temporäre Datei schreibt. Diese verschieben Sie dann an die ursprüngliche Stelle, nachdem Sie die Originaldatei gesichert haben.

Listing 4

$ sqlite3 Datenbank-Datei '.dump;' | \
sed -e 's;/home/mustermann;/home/mmustermann;g' | \
sqlite3 Temporäre Datei

Binäre Barrieren

Bei der Suche nach Einträgen, die das alte Home-Verzeichnis enthalten, stellt sich schnell heraus, dass der oben genutzte Grep-Befehl auch einige binäre Dateien zutage fördert, die die gesuchte Zeichenkette enthalten. Hier gilt es zu prüfen, ob der Konfigurationsdialog der entsprechenden Applikation es erlaubt, den Pfad zu ändern.

Gnome verwendet in den älteren Varianten der Version 2 ein eigenes Konfigurationssystem: Gconf. Dabei handelt es sich um eine Verzeichnisstruktur unterhalb von ~/.gconf/ welche die Konfigurationsdaten in XML-Dateien enthält. Es existiert eine rudimentäre Oberfläche, der Gconf-editor, der immerhin eine Such in den Schlüssel/Wert-Paaren erlaubt (Abbildung 1)

Abbildung 1: Der Gconf-Editor erlaubt eine Suche in der Schlüssel/Wert-Paaren der Gconf-Datenbank.

Abbildung 1: Der Gconf-Editor erlaubt eine Suche in der Schlüssel/Wert-Paaren der Gconf-Datenbank.

Um die Werte aber nicht mühsam einzeln anpassen zu müssen, bietet sich der Einsatz des Programms Gconftool-2 an. Das Kommandozeilenwerkzeug exportiert auf Wunsch die Gconf-Datenbank. Nutzen Sie diese Eigenschaft in Verbindung mit einem Sed-Kommando, haben Sie im Handumdrehen alle relevanten Stellen angepasst (Listing 5).

Listing 5

$ gconftool-2 --dump / | \
sed -e 's;/home/mustermann;/home/mmustermann;g' | \
gconftool-2 --load -

Allerdings finden Sie auf diese Weise verschiedene Dateien nicht, die Gnome in Systemordnern abspeichert. Das betrifft unter anderem Spielstände oder ähnliches. Falls Sie nach der Migration merken, dass Daten fehlen, lohnt es sich, noch einmal auf die Suche zu gehen.

Mit Gnome 3 löst das System Dconf [3] die Konfiguration mittels Gconf ab. Das neue System setzt nicht mehr auf eine Verzeichnishierarchie mit gepackten XML-Dateien, sondern auf Schlüssel/Wert-Paare, die die Software in einem eigenem Datenbankformat ablegt. Die User-spezifischen Daten liegen dabei in der Regel unter .config/dconf/ im Home-Verzeichnis.

Zwei Methoden erlauben das Ändern von Werten in der neuen Datenbank: Zum einen steht der Dconf-Editor als grafische Schnittstelle bereit, zum anderen gibt es mit Gsettings ein Kommandozeilenwerkzeug, das Ihnen beim Ändern von Werten in der Datenbank hilft [4].

Während es beim Dconf-Editor gilt, die Schlüssel alle nacheinander zu durchsuchen, gibt Ihnen Gsettings die Möglichkeit, alle Schlüssel rekursiv auszugeben und mit Grep zu filtern:

$ gsettings list-recursively | grep mustermann

Damit erhalten Sie eine Liste der fraglichen Schlüssel/Wert-Paare, die Sie unter Umständen ändern müssen. Beachten Sie dabei, dass Sie das Muster für die Suche mit Grep gegen den gewünschten Benutzernamen austauschen. Möchten Sie einen Schlüssel ändern, so nutzen Sie den Befehl gsettings set mit dem entsprechenden Schema, dem Schlüssel und einem neuen Wert.

Noch setzen nicht alle Gnome-Programme auf das neue Konfigurationssystem. Daher gilt es unter Umständen, beide Orte zu durchkämmen. Für Programme, die Dconf unterstützen, übernimmt Gnome 3 aber zumindest die Migration der Schlüssel/Wert-Paare aus der Gconf-Datenbank in das Dconf-System.

Systemweite Dateien

Neben den Dateien im Benutzerverzeichnis finden sich der Benutzername sowie der Pfad des alten Home-Verzeichnisses unter Umständen in den systemweiten Konfigurationsdateien unterhalb von /etc. Auch in diesem Fall hilft das Werkzeug Grep weiter. Diesmal gilt es jedoch, das Kommando mit Root-Rechten abzusetzen:

$ grep -rl mustermann /etc 2>/dev/null

Die Tabelle “Fundstellen” nennt einige der prominenten Dateien, die eventuell noch den alten Benutzernamen tragen, und erläutert deren Funktion.

Fundstellen

/var/mail/Benutzername Spool-Verzeichnis für Mail
/var/spool/mail/Benutzername Spool-Verzeichnis für Mail
/var/spool/cron/crontabs/Benutzername Mögliche Crontab-Einträge
/var/spool/cron/atjobs/ Zeitgesteuerte Abläufe

Alternative Symlink

Wer sich bei der Migration der einzelnen Konfigurationsdateien im Benutzerverzeichnis etwas Aufschub verschaffen möchte, dem hilft ein entsprechender Symlink weiter:

$ sudo ln -s /home/mmusterman /home/mustermann

Auf Ihrem System passen Sie die beiden Pfadnamen entsprechend an. Das enthebt Sie allerdings nicht der Aufgabe, im restlichen System nach Überbleibseln des alten Benutzer-Accounts zu suchen und diese bei Bedarf zu löschen oder umzubenennen.

Fazit

Die Migration eines Benutzeraccounts verursacht unter Umständen einigen Aufwand. Allerdings zahlt sich an dieser Stelle die Offenheit eines Linux-Systems aus: Viele der Dateien mit veralteten Einträgen finden Sie leicht mit einem Grep-Aufruf, zum Bearbeiten genügt ein Editor.

Kritik müssen sich eher die Entwickler anhören, die Pfade in den Dateien hart kodieren, anstatt auf Variablen zu setzen, die sich leicht an zentraler Stelle ändern ließen. Zudem enttäuscht, dass selbst geschlossenen Konfigurationssysteme wie Gconf/Dconf so etwas nicht leisten. 

Infos

[1] Benutzer und Gruppen: Joe Zonker Brockmeier, Matt Simmons “Zentrales Register”, LinuxUser 10/2011, S. 46, https://www.linux-community.de/24398

[2] Profile-Verzeichnisse Mozilla-Applikationen: http://kb.mozillazine.org/Profile_folder_-_Firefox

[3] Dconf: http://live.gnome.org/dconf/SystemAdministrators

[4] Dconf unter Unity verändern: http://wiki.ubuntuusers.de/Unity/Unity_Einstellungen

LinuxUser 12/2011 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben