Kurzanleitungen/Howtos

Konfiguration umziehen

24.10.2018

Pinguin zieht um

Manchmal möchte man – z.B. beim Distributionswechsel – möglichst viel von der Konfiguration des alten Systems auf das neue übernehmen. Diese Kurzanleitung enthält Skripten zum exportieren der Informationen aus dem alten und import im neuen System.

1. Benutzer und Gruppen - exportUsersGroups.sh

exportUsersGroups.sh erstellt ein Skript (/tmp/restoreUsersGroups), das alle Benutzerkonten und -gruppen anlegt. Zu diesen Konten und Gruppen gehören alle, "root" und alle, die eine UID bzw. GID von 1000 und höher haben. Das generierende und generierte Skript werden jeweils als root ausgeführt:

#!/bin/bash
storeDir="/tmp"
rm $storeDir/restoreUsersGroups 2> /dev/null

# Gruppen- und Benutzerinformationen aus den Systemdateien exportieren
awk -F: '($3!=65534)' /etc/passwd > passwd.mig
awk -F: '($3!=65534)' /etc/group > group.mig
awk -F: '($3!=65534) {print $1}' /etc/passwd | tee - | egrep -f - /etc/shadow | grep '\$' > shadow.mig

# Unerwünschte Benutzer/Gruppen ausfiltern
for raus in alt wirdnichtmehr gebraucht
do
  for datei in passwd.mig group.mig shadow.mig
  do
    grep -v "$raus" $datei > "$datei.tmp"
    cat "$datei.tmp" > $datei
    rm "$datei.tmp"
  done
done

# Gruppen durchgehen
cat group.mig | while read line
do
  # Gruppenname und -nummer ermitteln
  group=$(echo $line | cut -d':' -f1)
  gid=$(echo $line | cut -d':' -f3)

  # Gruppen nicht hinzufügen, falls die GID auf keine Benutzergruppe (>= 1000) hinweist
  if [ $gid -lt 1000 ]
  then
    continue
  fi

  # Kommando zum Anlegen der Gruppe
  echo "groupadd --gid $gid $group" >> $storeDir/restoreUsersGroups
done

# Benutzer durchgehen
cat passwd.mig | while read line
do
  # Benutzername, Heimatverzeichnis, Shell, Benutzernummer, Hauptgruppennummer und verschlüsseltes Paßwort ermitteln
  user=$(echo $line | cut -d':' -f1)
  home=$(echo $line | cut -d':' -f6)
  shell=$(echo $line | cut -d':' -f7)
  uid=$(id -u $user)
  gid=$(id -g $user)
  cpass=$(grep "^$user:" shadow.mig | cut -f 2 -d ':')

  # Nur Paßwort ändern, wenn der Benutzer root ist (UID = 0)
  if [ $uid -eq 0 ]
  then
    echo "usermod -p '$cpass' root" >> $storeDir/restoreUsersGroups
    continue
  fi

  # Konto nicht hinzufügen, wenn die UID kein normaler Benutzer (>= 1000) ist
  if [ $uid -lt 1000 ]
  then
    continue
  fi

  # Kommando zum Anlegen des Benutzers
  echo "useradd -m -d '$home' -s '$shell' --uid=$uid --gid=$gid -p '$cpass' $user" >> $storeDir/restoreUsersGroups

  # Kommandos zum Aufnehmen des Benutzers in Nebengruppen
  for group in $(id -n -G $user)
  do
    echo "adduser $user $group" >> $storeDir/restoreUsersGroups
  done
done

chmod +x $storeDir/restoreUsersGroups

# Temporäre Dateien löschen
rm passwd.mig group.mig shadow.mig

Achtung! Achtung! Die folgenden Anweisungen richten sich ausschließlich an fachkundige Personen. Bei jedem Schritt kann es zum kompletten Datenverlust kommen. Alle Angaben ohne Gewähr! Die Anweisungen, Skripte, etc. sind ausschließlich für Lernzwecke auf Lernsystemen und nicht für Produktivumgebungen bestimmt!