Archiv

Posts Tagged ‘credentials’

Automatische Sicherung von Windows Verzeichnissen

2011/12/06 Kommentare aus

Es existieren mehrere Lösungen um die Sicherung von Daten über das Netzwerk mehr oder weniger automatisiert durchzuführen, unter anderem die Open-Source Programme Bacula und Amanda. Oft ist die Komplexität dieser Programme aber zu hoch, ein von Hand erstelltes Shellskript bei weitem ausreichend.

Alleine durch die Verwendung der UNIX-Standardwerkzeuge cp, rsync sowie crontab und der Verwendung von Windows-Standardfreigaben ist jedoch  bereits ein sehr gutes und leichtgewichtiges Konzept zur automatisierten Sicherung von Benutzerdaten realisierbar:

  • Keine Änderungen an den Client-Rechnern notwendig
  • minimale Netzwerklast bei Übertragung der zu sichernden Daten
  • Erstellung von Snapshots der gesicherten Daten möglich
  • minimaler Speicherbedarf auf dem Backup-Server
  • einfache Zeitplanung der Sicherung durch Eintrag in crontab

Windows Standardfreigaben

Microsoft Windows stellt per Default für jedes lokale Laufwerk eine Standardfreigabe bereit. Diese wird über das Netzwerk einfach mit dem entsprechendem Laufwerksbuchstaben und einem darauf folgenden Dollarzeichen angesprochen, also z.B. \\CLIENT\C$ für Laufwerk C:. Windows-Freigaben die mit einem Dollarzeichen enden sind in der Netzwerkübersicht generell nicht sichtbar, können aber bei Kenntnis des genauen Freigabenamens problemlos angezeigt werden. Zu beachten ist dabei aber, dass die automatisch erstellten Standardfreigaben nur für Benutzer mit Administrator-Rechten verwendbar sind.

rsync

rsync ist ein Programm zur Synchronisation von Daten. Die Synchronisation läuft bei rsync nur in eine Richtung, also von einem Quellverzeichnis zu einem Zielverzeichnis, ab. Ein wichtiges Merkmal von rsync ist, dass es nicht nur ganze Dateien kopieren kann, sondern auch Teile von Dateien. Wurde auf dem Quell-Datenträger eine Datei verändert, werden nur die geänderten Teile der Datei auf das Zielsystem übertragen. Die Folge ist eine minimale Netzwerklast (mit einem geringem Overhead).

Hardlinks

Durch Erstellung von Hardlinks kann eine beliebige Anzahl von Snapshots der gesicherten Daten erstellt werden, ein Zugriff auf den Zustand der gesicherten Daten beispielsweise von vor einem Monat oder auch von vor nur einer Stunde ist problemlos möglich. Eine sehr wichtige Funktionalität bei unbeabsichtigten Änderungen oder eventuellem Virenbefall. Was ist eigentlich ein Hardlink? Unter Linux ist ein Hardlink nichts anderes als ein weiterer Name für eine bereits bestehende Datei. Falls die Originaldatei gelöscht wird können die darin enthaltenen Daten immer noch über den erstellten Hardlink angesprochen werden. Ein Hardlink verbraucht außer einem Inode keinen weiteren Platz auf dem Dateisystem. Dadurch lassen sich mehrere Versionen der gesicherten Daten bei minimalem Speicherbedarf vorhalten.

crontab

Durch Eintrag eine cronjobs ist die wiederkehrende Sicherung automatisch und ohne manuelle Interaktion des Administrators möglich.

Konfiguration der zu sichernden Daten

/root/shares.txt

benutzer1://WORK1/D$/foo/bar
benutzer2://WORK2/C$/MeinVerzeichnis
benutzer3://WORK3/C$/Daten/benutzer3/Back_Me_Up
benutzer4://WORK4/C$/Verzeichnis/Nutzerdaten

Die zu sichernden Daten sind zentral in einer einfachen Textdatei konfiguriert. Angegeben wird hier durch Doppelpunkt getrennt der Benutzername und das zu sichernde Verzeichnis im UNC Format (Vorsicht bei Leer- oder Metazeichen). Es ist empfehlenswert die angeführten Benutzer vorher auch im System anzulegen – die gesicherten Daten können dem Benutzer dann beispielsweise als Netzwerkfreigabe seines Heimatverzeichnisses read-only bereitgestellt werden.

Shellskript zur Sicherung der konfigurierten Verzeichnisse

/root/backup.sh

#!/bin/bash
for line in `cat /root/shares.txt`; do
 USERNAME=`echo $line | cut -d: -f1`
 SHARE=`echo $line | cut -d: -f2`
 DIRECTORY=`basename "$SHARE"`
echo "$USERNAME $SHARE $DIRECTORY"

 /bin/mount -t cifs -o ro,credentials=/etc/samba/.smbcredentials $SHARE /mnt/tmp
 if [ $? -eq 0 ]; then
 trap "/bin/umount -l /mnt/tmp; exit" INT TERM EXIT
 /usr/bin/rsync -a --delete /mnt/tmp/ /home/$USERNAME/$DIRECTORY
 /bin/umount /mnt/tmp
 trap - INT TERM EXIT
 fi
done

Für jede Zeile in shares.txt wird der Benutzername, die Netzwerkfreigabe sowie das darauf zu sichernde Verzeichnis in entsprechende Variablen gespeichert und daraufhin durch den echo-Befehl auf der Konsole ausgegeben. Danach wird versucht, die angegebene Freigabe in das Dateisystem einzubinden. Besonders anzumerken bei diesem mount-Befehl ist die Verwendung des credentials-Parameters – Zugangsdaten werden dabei in einer externen Datei (hier: /etc/samba/.smbcredentials) abgelegt anstatt im Shellskript angeführt zu sein. Der Aufbau dieser Datei ist recht einfach:

username=Administrator
password=Pa$$w0rd
domain=ARBEITSGRUPPE

Falls der mount-Befehl erfolgreich war werden die zu sichernden Daten via rsync in das lokale Verzeichnis /home/<Benutzername> übertragen und die Netzwerkfreigabe danach wieder aus dem Dateisystem ausgehängt. Die Verwendung des trap-Befehls stellt hier sicher, dass die Netzwerkfreigabe auf jeden Fall aus dem Dateisystem ausgehängt wird, also auch bei Abbruch des Shellskripts.

Shellskript zur Erstellung von Snapshots

/root/snapshot_backup.sh

#!/bin/bash
for line in `cat /root/shares.txt`; do
 USERNAME=`echo $line | cut -d: -f1`
 SHARE=`echo $line | cut -d: -f2`
 DIRECTORY=`basename "$SHARE"`

 echo "removing oldest snapshot: 4"
 rm -rf /home/$USERNAME/snapshot4_${DIRECTORY}
 echo "moving snapshots: 3 -> 4, 2 -> 3, 1 -> 2"
 mv /home/$USERNAME/snapshot3_${DIRECTORY} /home/$USERNAME/snapshot4_${DIRECTORY}
 mv /home/$USERNAME/snapshot2_${DIRECTORY} /home/$USERNAME/snapshot3_${DIRECTORY}
 mv /home/$USERNAME/snapshot1_${DIRECTORY} /home/$USERNAME/snapshot2_${DIRECTORY}
echo "creating snapshot 1"
 echo "cp -al /home/$USERNAME/$DIRECTORY /home/$USERNAME/snapshot1_${DIRECTORY}"
 cp -al /home/$USERNAME/$DIRECTORY /home/$USERNAME/snapshot1_${DIRECTORY}
done

Dieses Shellskript ist ähnlich aufgebaut wie das vorige. Nach Auslesen der in shares.txt definierten Verzeichnisse wird der älteste existierende Snapshot (in diesem Fall Nummer 4) gelöscht, Snapshot Nummer Drei wird umbenannt zu Snapshot Nummer Vier, Zwei zu Drei und Eins zu Zwei. Danach wird ein Snapshot des aktuellen Datenbestands unter mit der Bezeichnung snapshot1 angelegt. Wir erinnern uns, durch die Erstellung von hardlinks wird fast kein zusätzlicher Platz auf der Festplatte beansprucht, die Erstellung der Snapshots sollte sehr schnell vonstatten gehen.

Zeitsteuerung durch Eintrag in crontab

Die Skripte können durch Erstellung eines cronjobs sehr einfach automatisiert ausgeführt werden. Der crontab lässt sich durch Aufruf des Befehls crontab -e bearbeiten.

00 12 * * * /root/backup.sh
00 14 * * 5 /root/snapshot_backup.sh

In diesem Fall wird die Sicherung der Nutzerdaten täglich um 12:00 Uhr ausgeführt sowie jeweils Freitags ein Snapshot des aktuellen Zustands der gesicherten Daten angelegt.

CIFS- und NFS-Netzwerkdateisysteme manuell oder durch Konfiguration von autofs ein- und aushängen

2010/12/26 Kommentare aus

Manuelles einhängen von CIFS Freigaben

Im einfachsten Fall in dem die Freigabe nicht durch ein Passwort geschützt ist, reicht ein mount-Aufruf ohne weitere Parameter:

mount –t cifs //10.1.5.1/share /mnt/share

Die Freigabe share von Server 10.1.5.1 wird unter dem Verzeichnis /mnt/share in das Dateisystem eingebunden. Die Angabe von -t cifs kann auch entfallen, Linux erkennt an der Syntax des mount-Aufrufs dass es sich um eine CIFS-Freigabe handelt.

Benutzername und Passwort können über den Parameter “-o” angegeben werden. Ohne Angabe eines Passworts wird dieses interaktiv über die Kommandozeile abgefragt.

mount –t cifs –o user=Benutzer1,password=”Pa$$wd” //10.1.5.1/share /mnt/share

Manuelles Einhängen von NFS-Freigaben

mounten einer NFS-Freigabe, die vom Server 10.1.5.1 bereitgestellt wird:

mount -t nfs 10.1.5.1:/var/installation /mnt/installation

Server 10.1.5.1 stellt das Verzeichnis /var/installation über NFS zur Verfügung und wird in diesem Beispiel unter dem Verzeichnis /mnt/installation in das Dateisystem eingebunden. Auch hier kann die Angabe des Dateisystemtyps entfallen.

Durch den Aufruf von showmount lassen sich alle Verzeichnisse anzeigen, die von einem NFS-Server exportiert werden und für die dem Host der Zugriff erlaubt ist:

showmount -e 10.1.5.1

Automatisches  Einhängen von CIFS- und NFS-Freigaben durch autofs

Der Automount-Dienst autofs ist für das automatische Einbinden von Medien/Netzwerkfreigaben etc. zuständig und wird über die Konfigurationsdatei /etc/auto.master gesteuert. Diese enthält Einträge welche Verzeichnisse von autofs überwacht werden sollen und wo die einzelnen Konfigurationsdateien für diese liegen.

Einfaches Beispiel einer /etc/auto.master

/home     /etc/auto.home
/misc     /etc/auto.misc

In obigem Beispiel würden die Verzeichnisse /home und /misc von autofs überwacht, die Konfiguration für /home ist in der Datei /etc/auto.home zu finden, für den Ordner /misc liegt diese in /etc/auto.misc. Sobald auf ein vorher konfiguriertes Verzeichnis innerhalb von /home oder /misc zugegriffen wird versucht autofs dieses zu mounten.

Einträge in die Datei /etc/auto.misc

myhomedir  -fstype=cifs,user=Benutzer,password=”Pa$$w0rd”  ://10.1.5.1/share
mynfsshare -fstype=nfs,soft                        10.1.5.1:/var/installation

Falls ein Benutzer auf das Verzeichnis /misc/myhomedir zugreift, wird dieses von autofs entsprechend den Parametern in /etc/auto.misc automatisch in das Dateisystem eingebunden. Bei Zugriff auf /misc/mynfsshare wird automatisch der vom Server 10.1.5.1 exportierte Order /var/installation unter /misc/mynfsshare in das Dateisystem eingebunden.

Wichtig ist dass die Verzeichnisse myhomedir und mynfsshare nicht existieren. Diese werden von autofs automatisch erzeugt. Nach Änderungen an der Datei /etc/auto.misc muss autofs die geänderte Konfiguration neu einlesen.

Den Automounter über eine geänderte Map-Datei informieren:

service autofs reload

Auslagerung von Anmeldeinformationen in externe Datei

Es ist ratsam, die Anmeldeinformationen in eine separate Datei auszulagern und diese entsprechend zu schützen, da /etc/auto.misc für jedermann lesbar ist. Dies ist durch Übergabe des credentials-Parameters an den Befehl mount möglich:

/etc/auto.misc

myhomedir  -fstype=cifs,credentials=/etc/samba/.smbcreds :”//10.1.5.1/share$”

Die Anmeldeinformationen liegen hier in der Datei /etc/samba/.smbcreds, welche Einträge in der Form

username=Benutzername
password=Pa$$w0rd
domain=EXAMPLE

enthält. Diese Datei sollte nur durch den Benutzer root lesbar sein. Anstatt domain kann auch workgroup verwendet werden.

Kategorien:RHCSA Schlagwörter: , , , , , ,