Homeserver 15: Netzwerkfreigaben einrichten

Update 21:30 Uhr

Folgende Bereiche wurden aktualisiert:

  • Bei den Papierkorb-Optionen wurde eine Option hinzugefügt, damit Objekte, die innerhalb des Papierkorbs gelöscht werden können. Ohne diese Funktion werden diese Optionen nur wieder in den Papierkorb gelegt.
  • Die Cron-Jobs zum automatischen Leeren der Papierkörbe wurden umgeschrieben. Ich habe mehr recherchiert und finde, dass diese Optionen passender sind. Tests stehen jedoch noch aus, am 16. Januar weiß ich, ob es so funktioniert.

Jetzt, wo das RAID läuft, möchte ich gerne per Netzwerk auf die Platte zugreifen können. Ich möchte meine Daten auf dem Server ablegen und von PC, Mac oder sonst einem Computer drauf zugreifen können.

Linux hat ja den SAMBA File Server an Board. Grundlegende Dinge haben wir mit Samba ja schon gemacht. Von daher ist das alles jetzt gar nicht allzu neues.

Erstellen von Verzeichnissen

Genau genommen möchte ich drei Freigaben einrichten.

  • Eine große Freigabe für all meine Daten und Backups. Hier kommen alle meine Daten hinein.
  • Eine öffentliche Freigabe. Oft ist meine Family da, oder ich habe Besuch, die müssen ja nicht in meinen Daten wühlen. Daher kommt eine öffentliche Freigabe dazu, damit die mir Fotos auf das Netz legen können, und umgekehrt, ich ihnen Daten zur Verfügung stellen kann.
  • Ein Verzeichnis für Webserver-Daten. Hier kommen Daten rein, auf die über einen Webserver zugegriffen werden soll. Webserver und dergleichen kommen aber später noch dran, die Freigabe kann ich ja aber schon mal einrichten.

Der Einfachheit halber wechsele ich ins Verzeichnis /raid1, wo sich ja das große Laufwerk befindet.

cd /raid1

Und hier lege ich die Verzeichnisse für die Freigaben an.

sudo mkdir daten
sudo mkdir public
sudo mkdir web

Mit dem Befehl ls -al kann man sich nun den Inhalt des Verzeichnisses anzeigen lassen. Und hier stellt man fest, die Verzeichnisse gehören alle noch root, weswegen es später schwierig sein könnte, drauf zuzugreifen. Daher müssen wir jetzt noch das Eigentum an diesen Verzeichnissen anmelden.

sudo chown -c -R kamil:kamil daten
sudo chown -c -R kamil:kamil web
sudo chown -c -R kamil:kamil public

Jetzt, wo die Verzeichnisse mir gehören, kann ich auch munter Dateien hineinkopieren.

Erstellen der Samba-Freigaben

Dies läuft ähnlich wie das ab, was wir schon mal mit dem Home-Verzeichnis gemacht haben. Zunächst wird die smb.conf-Datei geöffnet.

sudo nano /etc/samba/smb.conf

Nun gehen wir bis ganz unten an die Datei und fügen die Freigabe an.

[Daten]
path = /raid1/daten
comment = Server-Daten
browseable = yes
writeable = yes
create mask = 0777
directory mask = 0777
force user = kamil

Netzwerk-Papierkorb

Eine der Funktionen, die ich an meinem QNAP-NAS wirklich nützlich finde, wenn man auf der Netzwerkfreigabe was löscht, verschwindet es nicht gleich im Nirvana, wie üblich, sondern wird in einen Ordner, dem Netzwerk-Papierkorb, verschoben. So etwas möchte ich auf meinem Server auch haben, und Samba bietet mir genau das! Also muss an die Freigabe eigentlich nur noch etwas angehängt werden:

vfs object = recycle
recycle:repository = /raid1/daten/@recycle
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsize = 0
recycle:exclude_dir = @recycle

Hier mal eine kurze Erläuterung, was die Werte tun.

  • vfs object = recycle: Erstellt einen Papierkorb
  • recycle:repository = /raid1/daten/@recycle: Ort des Papierkorb-Ordners. Nennt mich nostalgisch, aber ich habe mal den Namen vom QNAP-NAS übernommen.
  • recycle:keeptree = Yes: Behält Verzeichnisstruktur bei.
  • recycle:touch = Yes: Ändert das Datum des letzten Zugriffs auf das Löschdatum. Das wird später noch interessant.
  • recycle:versions = Yes: Falls eine Datei mehrfach gelöscht wird, werden alle Versionen behalten.
  • recycle:maxsize = 0: Keine Größenbeschränkung.
  • recycle:exclude_dir = @recycle: Ignoriert diesen Ordner. Was hierin gelöscht wird, wird endgültig gelöscht.

Der Ordner des Papierkorbs wird beim ersten Löschvorgang automatisch erstellt. So kann ich für alle Freigaben, für die ich das für sinnvoll halte, einen solchen Papierkorb erstellen.

Freigabe für das Web-Verzeichnis

Die komplette Freigabe für das Web-Verzeichnis sähe dann so aus.

[Web]
path = /raid1/web
comment = Webserver Dateien
browseable = yes
writeable = yes
create mask = 0777
directory mask = 0777
force user = kamil
vfs object = recycle
recycle:repository = /raid1/web/@recycle
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsize = 0
recycle:exclude_dir = @recycle

Öffentliche Gastfreigabe

Für die beiden Freigaben oben benötigt man Benutzernamen und Kennwort, um darauf zugreifenzukönnen. Das ist auch in Ordnung so, auf diesen Freigaben hat außer mir niemand was verloren. 🙂

Ich möchte aber, um auch mal mit Freunden, Familie und Co Daten austauschen zu können, einen Bereich einrichten, wo man keine Nutzerdaten braucht, um sich anzumelden. Dazu braucht es einen Bereich, der nicht von einem Passwort geschützt ist. Eine solche Gastfreigabe sieht dann so aus.

[Public]
path = /raid1/public
public = yes
guest only = yes
writable = yes
browseable = yes
force user = kamil
inherit permissions = yes
vfs object = recycle
recycle:repository = /raid1/public/@recycle
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsize = 0
recycle:exclude_dir = @recycle

Papierkörbe automatisch leeren

Die Papierkörbe der drei Freigaben werden, wenn wir nichts unternehmen, mit der Zeit größer und größer werden. Weil ich aber keine Lust habe, ständig selber nachzugucken, ob es mal wieder Zeit zum Leeren ist, soll mein Server das gefälligst selber machen. 🙂 Hierzu kann ich natürlich einen Cron-Job bemühen. Der soll jetzt jeden morgen um 7:30 Uhr alles aus den Papierkörben löschen, was älter als 3 Tage ist.

sudo nano /etc/crontab

In der crontab gehen wir nun ganz nach unten und fügen über dem letzten # folgende Zeilen für die Netzwerkpapierkörbe ein:

30 7    * * *   root    find /raid1/public/@recycle -type f -atime +3 -exec rm -f {} \;
30 7    * * *   root    find /raid1/daten/@recycle -type f -atime +3 -exec rm -f {} \;
30 7    * * *   root    find /raid1/web/@recycle -type f -atime +3 -exec rm -f {} \;
30 7    * * *   root    find /raid1/public/@recycle -depth -type d -mtime +3 -exec rmdir --ignore-fail-on-non-empty {} \;
30 7    * * *   root    find /raid1/daten/@recycle -depth -type d -mtime +3 -exec rmdir --ignore-fail-on-non-empty {} \;
30 7    * * *   root    find /raid1/web/@recycle -depth -type d -mtime +3 -exec rmdir --ignore-fail-on-non-empty {} \;

Der Papierkorb setzt bei jeder gelöschten Datei das letzte Zugriffsdatum auf das Löschdatum. Dieser Befehl überprüft, ob eine Datei schon länger als 3 Tage im Papierkorb liegt. Den Wert -atime +3 kann jeder nach seinem Geschmack anpassen, für mich haben sich 3 Tage immer als praktikabel erwiesen. Um sicher zu gehen, könnte man hier natürlich auch 7 oder 14 hinter dem Pluszeichen eingeben.

Cron wird jedenfalls jeden Tag um 7:30 Uhr alle 3 Papierkörbe nach Dateien durchsuchen, die da schon länger als die Anzahl Tage liegen, die im Parameter -atime festgelegt wurden. Wenn solche vorhanden sind, wird es diese löschen. Somit brauche ich mich um die Papierkörbe nicht mehr kümmern.

Ich habe jetzt in jeder der drei Freigaben eine Datei im Papierkorb liegen. Ob meine Cron-Jobs wirklich funktionieren, werde ich am 15. Januar sehen. Schließlich habe ich mir diese Zeile von einer Website kopiert und hoffe einfach mal, dass das schon richtig ist… 🙂

Samba Server neu starten

Nun sollten wir den Samba Server neu starten. Dafür muss der ganze Server nicht neu gestartet werden, ein Befehl im Terminal reicht.

sudo service samba restart

Wenn wir nun an einem Windows-Rechner sind, sollte man mit folgendem Befehl auf die Daten-Freigabe kommen. Drückt mal Windowstaste+R, um das Ausführen-Dialog aufzurufen. Gebt dort folgendes, gefolgt von Enter, ein:

\\server01\daten

Bei mir öffnet sich dann ein leeres Fenster. Ist ja auch klar, hab ja noch nichts dort hineinkopiert. Aber das tue ich jetzt mal, und kopiere diese Textdatei dort hin.

Das ist jetzt natürlich schwer hier darzustellen, aber das Kopieren hat hervorragend geklappt. Und als ich die Datei gelöscht habe, wurde in der Tat mein @recycle-Papierkorb erstellt.

Fazit

Nun, da die Verzeichnisse und Freigaben funktionieren, werde ich diese Freigaben dauerhaft als Netzwerkfreigaben im Explorer einrichten. Dadurch brauche ich mich nicht immer umständlich zu verbinden und kann Laufwerksbuchstaben nutzen. Somit steht dem Kopieren von Daten auf den Server auch nichts mehr im Wege.