Schlagwort-Archive: Samba

Homeserver 19: Nachtrag zu öffentlichen Ordnern mit Samba

Während des Betriebes ist mir aufgefallen, dass der öffentliche Ordner, den ich mit Samba eingerichtet hatte, nicht öffentlich zugänglich war. Irgendetwas war da falschgelaufen. Also habe ich mir den Vorgang noch einmal angesehen, mich noch weiter eingelesen und korrigiert. Und so funktioniert es dann auch wirklich, mehrmals ausprobiert! 🙂

Anlegen des freizugebenden Ordners

Ich wechsele also in das Hauptverzeichnis meines RAIDs:

cd /raid1

Hier erstelle ich einen Ordner namens public:

sudo mkdir public

Anschließend übernehme ich den Ordner in meinen Besitz:

sudo chown -c -R kamil:kamil public

Und nun gebe ich jedem, der auf den Ordner zugreifen will, alle Rechte. Das beinhaltet lesen, schreiben und auch Programme ausführen. Das ist ein Punkt, den hatte ich vorher nicht gemacht:

sudo chmod 777 public

Kleine Anpassung der Samba-Konfiguration

Hier müssen wir zwei Dinge ändern. Zum Einen muss der Gast-Benutzer festgelegt werden, zum Anderen muss die Gast-Freigabe angepasst werden. Zunächst mal muss die Samba-Konfigurationsdatei geöffnet werden:

sudo nano /etc/samba/smb.conf

Nun könnt ihr im Editor Nano den Suchbefehl nutzen, um einen bestimmten Begriff zu finden. Der Befehl wird mit STRG+W aufgerufen. In das Eingabefeld gebt ihr „guest account“, natürlich ohne die Anführungsstriche, ein.

Hier steht in der Zeile:

   guest account = nobody

Den Wert „nobody“ habe ich durch meinen Benutzernamen, also kamil, ersetzt.

Freigabe ändern

Die Freigabe, wie sie im früheren Teil beschrieben wurde, solltet ihr löschen. Ich habe die Freigabe nun angepasst, diese sieht jetzt so aus:

[Public]
path = /raid1/public
comment = Öffentlicher Ordner
public = yes
guest only = yes
writable = yes
browseable = yes
directory mask = 0777
vfs object = recycle
recycle:repository = /raid1/public/@recycle
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsize = 0
recycle:directory_mode = 0777
recycle:exclude_dir = @recycle

Nun noch die smb.conf speichern und mit

sudo service samba restart

den Samba-Service neu starten. Jetzt sollte die öffentliche Freigabe auch für Gäste mit Lese- und Schreibzugriff funktionieren.

Fazit

Fehler können leider immer mal passieren. Sobald mir welche auffallen, werde ich sie jedoch zu korrigieren versuchen. Ich hoffe aber, das war der bisher einzige Fehler. Der Rest scheint bisher super zu funktionieren. Das automatische Leeren der Netzwerk-Mülleimer klappt, das RAID arbeitet schnell und auch sonst ist mir noch nichts aufgefallen.

Aber bevor ich weitermache, dem Server mehr und mehr Arbeit aufzuhalsen, kümmere ich mich als nächstes lieber mal darum, wie man die Server-Logdateien auswerten kann. Schließlich will man ja wissen, was der Server so tut, und ob er es so tut, wie man es erwartet.

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.

Projekt Homeserver im Eigenbau 10: Der Dateiserver Samba

Der Samba Server ist vielleicht einer der wichtigsten Teile des Servers überhaupt. Letztlich wird der gesamte Dateiaustausch zwischen dem Server und Windows-Rechnern hierüber abgewickelt. Sogar mein XBMC-Mediacenter oder mein MacBook können über das SMB-Protokoll auf den Server zugreifen.

In diesem Beitrag geht es daher ausschließlich um Samba, dessen Grundkonfiguration und das Einrichten einer Freigabe, auf die von einem Windows-Rechner aus zugegriffen werden kann.

Geht mal an euren Windows-Rechner, drückt Windowstaste+R und gebt in das Dialogfeld mal folgendes ein:

\server01

Es wird zwar ein Fenster aufgehen, aber es wird leer sein. So, wie Samba zur zeit konfiguriert ist, werden wir auf keine Daten des Servers zugreifen können.

Samba konfigurieren

Um den Samba-Dienst zu konfigurieren, öffnen wir die Konfigurationsdatei von Samba.

sudo nano /etc/samba/smb.conf

Geht jetzt mit den Pfeiltasten zeilenweise durch die Datei. Hier sind in kommentierten Zeilen die Optionen einzeln erläutert. Stellt ein, was ihr für nötig haltet. Aber im Grunde ist erst mal nur eine Option wirklich wichtig:

workgroup: Tragt hier die Arbeitsgruppe eures Heimnetzwerks ein. Bei mir ist das „KAMIL“. Die Zeile sieht dann so aus:

workgroup = KAMIL

Um euch mal einen Überblick darüber zu verschaffen, welche Optionen in der smb.conf noch alles eingestellt werden können, könnt ihr euch mal die Manpage zu smb.conf ansehen.

Das Home-Verzeichnis als Freigabe

Um auf unser Home-Verzeichnis auch von Windows aus zugreifen zu können, damit wir z. B. Dateien davon sichern oder welche hochladen können, muss am Ende der Konfigurationsdatei ein Block mit diversen Parametern angefügt werden. Die Freigabe meines Home-Verzeichnisses sieht dann so aus:

[Home]
path = /home/kamil
comment = Home-Verzeichnis
browseable = yes
writeable = yes
create mask = 0775
directory mask = 0775
force user = kamil

So, nun noch mit STRG+X die Datei speichern und das Überschreiben bestätigen.

Und hier mal eine Beschreibung, was jede der Optionen eigentlich tut:

  • [Home]: In eckigen Klammern kommt der Freigabename, wie er später auch angezeigt wird.
  • path = /home/kamil: Das ist der Pfad zu dem Verzeichnis, welches ich freigeben möchte. In diesem Falle ist das mein Home-Verzeichnis.
  • comment = Home-Verzeichnis: Ein Kommentar oder Beschreibung, die ebenfalls in der Auflistung der Freigaben zumindest als Tooltip angezeigt werden.
  • browseable = yes: Die Freigabe soll in Auflistungen angezeigt werden und man soll sich den Inhalt der Freigabe anzeigen lassen können.
  • writeable = yes: Standardmäßig sind Freigaben schreibgeschützt, damit macht man sie auch beschreibbar.
  • create mask = 0775 und directory mask = 0775: Das sind die Standard-Dateiattribute, die den Dateien beim Erstellen zugewiesen werden. Das gilt für Dateien und Verzeichnisse.
  • force user = kamil: Dateien, die erstellt werden, gehören dem Benutzer Kamil.

Nach diesem Schema werden alle Freigaben nacheinander erstellt.

Mit dem Befehl „sudo service samba restart“ können wir den Samba Dienst neu starten, ohne den ganzen Server neu starten zu müssen. Und sofort danach steht uns auch die Freigabe zur Verfügung. Wir können da aber jetzt noch nicht rein, da Samba uns noch nicht kennt. Die Samba Benutzerverwaltung ist getrennt von der Benutzerverwaltung in Linux selbst. Um also als Benutzer kamil auch über Samba reinzukommen, müssen wir dem Samba Server noch den User kamil hinzufügen. Der User muss aber auf dem Server schon als normaler Linux-User angelegt sein, was bei kamil ja der Fall ist:

sudo smbpasswd -a kamil

Anschließend werden wir noch nach unserem Passwort gefragt, dann noch mal wiederholen, fertig. Jetzt können wir auch über Windows zugreifen. Das Samba-Passwort muss übrigens nicht unbedingt das gleiche sein, wie das Linux-Passwort.

Einfach mal mit Windows+R wieder ins Ausführen-Dialog gehen und folgendes reinschreiben:

\server01

Nun ist das Fenster nicht mehr leer, sondern enthält die Freigabe „Home“. Öffnen wir diese mit Enter, werden wir nach Benutzername und Passwort gefragt. Hier geben wir dann die Werte ein, die wir am Server zuvor festgelegt hatten beim Erstellen des Samba-benutzers.

Sinnvoll ist es hier, weil wir ja öfter mal zugreifen wollen, diesen Ordner als Netzwerk-Laufwerk zu speichern. Aber wie das geht, soll hier nicht weiter besprochen werden.

Was kommt nun?

Leider erst mal nichts mehr. Um weiteres anstellen zu können, brauche ich das RAID. Aber dafür fehlen mir noch ein paar Festplatten. Ich will ja mindestens ein RAID5 einrichten, und dafür benötige ich mindestens 3 Platten. Also gibt es leider erst dann wieder was zu lesen, wenn ich alle nötigen Platten habe, um das RAID aufzubauen.

Oh, Moment, da fällt mir ein, im nächsten Teil kann ich euch mal die crontab erklären, die ist für die Administration des Servers nämlich sehr hilfreich.