Wie wohl viele hier benutze ich eine NAS zum Speichern meiner Daten. Das hat große Vorteile: alle Daten liegen zentral, Backup wird automatisch über eine angehängte USB-Platte erledigt, RAID sichert ein gewisses Ausfallrisiko im Falle einer kaputten Festplatte etc.
Um jedoch die Stromkosten gering zu halten (es sind immerhin 4 HDDs drin), ist die NAS normalerweise ausgeschaltet. Sie wird immer nur dann eingeworfen, wenn sie benötigt wird, durch manuelles Einschalten. Anschließend läuft sie bis 1:00 nachts durch, wo automatisches Backup für alle veränderten Daten gestartet wird und dann fährt sie automatisch wieder herunter. Vorteil: alle Daten sind gesichert und die NAS läuft nicht unnötig vor sich hin.
Wie bekomme ich aber den Zugriff von meiner Linux-Workstation auf die NAS hin, ohne dass diese immer verfügbar ist? Ganz einfach, mit einem Skript. Aber der Reihe nach.
Share
Zunächst einmal braucht man natürlich ein Share auf der NAS. Da sich die Menüführung bei QNAP immer mal wieder ändert, gehe ich hier nicht in die Details.
Man richtet sich also einen Share mit dem Namen “portfolio” und erlaubt den RW Zugriff für den User thorgal mit dem Passwort abc123. Immerhin liegen private Daten hier, da sollte nicht jeder Zugriff haben, der sich ins Netzwerk einloggt.
CIFS
Das Mounten wird erfolgen über CIFS, eine Form des SMB-Protokolls, also richten wir es ein:
sudo apt-get update
sudo apt-get upgrade
sudo apt install cifs-utils
Anschließend benötigen wir einen Mountpoint, ein lokales Verzeichnis auf der Workstation, wo das Netzwerkverzeichnis eingebunden wird.
Da Linux jede verbundene Netzwerkfreigabe unter einem Verzeichnis abbildet, sieht sie für den Benutzer wie ein gewöhnliches Directory aus und man kann problemlos (mit kleinen Ausnahmen) auf die übliche Weise darauf zugreifen.
Alle meine Shares habe ich gern zentral unter dem Verzeichnis /mnt.
sudo mkdir /mnt/profile
Der Zugriff auf das Share erfolgt mit Benutzername und Passwort. Natürlich möchte ich es nicht irgendwo für jeden sichtbar ablegen. Man kann beides zwar auf der Konsole übergeben, aber zumindest der Benutzername (falls man das Passwort in den Befehl packt, sogar auch das Passwort) landen auf diese Weise in der .bash_history und können ausgelesen werden.
Eleganter ist es, eine gut abgesicherte Datei mit den credentials abzulegen. Da ich dieselben Credentials für mehrere Shares benutze, speichere ich diese lieber unter dem Namen der NAS. Nutzt man verschiedene, wäre das Ablegen in mehreren Dateien jeweils unter dem Namen der Freigabe auch eine Möglichkeit
sudo nano /etc/meinenas-credentials
meinenas ist hier der Name meiner QNAP-NAS. Anschließend füllen wir folgendes in die Datei:
username=thorgal
password = abc123
speichern und reduzieren die Rechte:
sudo chown root: /etc/meinenas-credentials
sudo chmod 600 /etc/meinenas-credentials
Ich möchte nicht für Zugriff auf das Share jedesmal sudo benutzen müssen (default darf nur root hier schreiben), daher ordne ich das share gleich mir als Benutzer zu. Dazu brauche ich meine UID und GID, die man mit:
id -a
bekommt. Normalerweise ist die GID=1000 und die UID=1000.
Bevor wir ein Skript erstellen, sollten wir den Mount-Befehl ausprobieren.
sudo mount -t cifs -o credentials=/etc/meinenas-credentials,uid=1000,gid=1000,dir_mode=0755,file_mode=0755 /meinenas/portfolio /mnt/portfolio
und probieren aus, ob der Zugriff funktioniert. Mit dem Befehl:
df -h | grep portfolio
sollten wir sehen, dass unter dem Verzeichnis /mnt/portfolio nun ein //meinenas/portfolio hängt. Dann probieren wir noch, ob der Schreibzugriff geht:
touch /mnt/portfolio/test.txt
Unbedingt ohne sudo, da man sehen möchte, ob man mit dem eigenen User darauf zugreifen kann. Klappt alles, erstellen wir uns im Home-Verzeichnis ein Mount-Skript:
echo “sudo mount -t cifs -o credentials=/etc/meinenas-credentials,uid=1000,gid=1000,dir_mode=0755,file_mode=0755 /meinenas/portfolio /mnt/portfolio” > ~/mount_portfolio.sh
chmod u+x ~/mount_portfolio.sh
Zum Testen können wir das alte Share wieder entfernen und das Skript testen mit:
umount /mnt/portfolio
./mount_portfolio.sh
Fertig