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.
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