BananaPi NAS

Aus ISSB Wiki
Wechseln zu: Navigation, Suche

NAS als SVN-Server (Versionsverwaltung)

Explorer-Integration - Tortoise

Hier wird der Eigenbau eines NAS mit Versionsverwaltung beschrieben. In diesem Projekt werden keine Netzwerk-Freigaben, etwa durch Verwendung von Samba, erstellt. Es handelt sich hierbei ausschließlich um einen Repository-Server für die Sicherung und Versionsverwaltung von Ordnern und deren Inhalte.

Verwendet wird ein Einplatinen-Computer mit SATA-Anschluss.

Als Betriebssystem wird eine Debian-Variante für Banana Pi Pro (Bananian For Banana Pi Pro) verwendet. Die Versionsverwaltung besteht aus den Software-Komponenten SVN auf dem NAS (Server), Tortoise auf dem Windows-Computer (Client). Das Kommunikationsprotokoll ist HTTPS.

Somit wird für diesen Zweck kein neues Laufwerk zur Verfügung gestellt. Vielmehr wird ein lokaler Ordner mit dem SVN-Repository auf dem Server synchronisiert.

Diese Variante schützt gesicherte Daten beispielsweise auch vor dem Angriff des Locky-Virus.

Informationsquellen zu Banana Pi Pro

Hardware

Auswahl der Komponenten

Die Auswahl der Komponenten hängt vom Einsatz-Zweck des Projektes ab. Da es sich bei diesem Projekt um ein NAS im Homebereich handelt, ist es günstig, sämtliche Komponenten, wie Board, Festplatte in einem einzigen Gehäuse unterzubringen. Der Vorteil des kleinen Gerätes gegenüber einem herkömmlichen Server liegt beim geringen Stomverbrauch (ca. 5 Watt Dauerleistung).

Benötigte Hardware - Stückliste

  • Banana Pi Pro
  • Gehäuse, welches auch die Festplatte aufnimmt
  • Micro-SD-Karte (4 bis 8GB)
  • Festplatte (1 bis 2TB)
  • SATA-Kabel
  • Netzteil (5V, 3A)

Gehäuse

Das Gehäuse bringt das Banana Pi Board und die Festplatte unter. Das SATA-Kabel kann nicht vollständig im Gehäuse verlegt werden, sondern wird vom unteren Teil in den oberen Gehäuseteil außerhalb verlegt und angesteckt.

Board

BananaPiPro.jpg

Bei Auswahl des Boardes kommen Einplatinencomputer in Frage, die eine GBit-LAN-Schnittstelle zur Verfügung haben. Hierbei wurden die Boards Cubieboard 3 (Cubietruck) und Banana Pi M1, M3 und Pro favorisiert.

Der preisliche Vorteil liegt hier beim Banana Pi. Der Vorteil des Cubietruck (mehr Arbeitsspeicher, mehr CPU-Leistung) tritt bei diesem Projekt eher in den Hintergrund.

Festplatte

WD-RED-Festplatte für Dauerbetrieb ausgelegt

Als Festplatte wird eine 2,5-Zoll Festplatte ausgewählt, die gegenüber anderen dieser Art stromsparend und für den Dauerbetrieb ausgelegt ist. Die Festplatte WD10JFCX der WD-RED-Reihe ist für diesen Zweck gut geeignet (1-2 Watt, 9,5mm Bauhöhe).

Netzteil

Da die verwendete Festplatte mit 1 Ampere angegeben ist und Banana Pi 2 A verlangt, ist ein Netzteil mit 5V, 3A ratsam.

Zusammenbau der Komponenten

Banana Pi Pro inkl. Festplatte im Transparent-Gehäuse

Als Gehäuse wird hier das weit verbreitete transparente Gehäuse verwendet, welches aus zwei Teilen besteht und im unteren Teil die Festplatte enthält.

Der Einbau der Komponenten in das Gehäuse wird separat in diesem Artikel erläutert.

Software

Betriebssystem

Für dieses Projekt wurde das auf Debian basierende Image Bananian For Banana Pro gewählt, da es das jüngste Release date gegenüber den anderen von lemaker angebotenen Images aufweist. ArchLinux oder Lubuntu ist sicher aber ebenfalls eine gute Wahl.

Installation

Die heruntergeladene Zip-Datei bananian-latest.zip enthält das Bananian-Image bananian-1508.img und wird in einen beliebigen Ordner entpackt, der über uneingeschränkte Lese- und Schreibberechtigungen verfügt. Nun gibt es verschiedene Wege, das Image unter Windows auf die SD-Karte zu bringen. Einer davon zeigt die Verwendung eines Windows-Tools Win32DiskImager. Diese Variante wird hier nicht erneut gezeigt.

Hier wird cygwin verwendet, um das Image mit dd auf den externen Datenträger zu übertragen. Die verwendete SD-Karte sollte 4-8GB Kapazität aufweisen. Eine Formatierung der SD-Karte ist nicht notwendig, da das Image blockweise übertragen wird und damit das künftige Format festlegt. Es wird dd in folgender Form verwendet.

dd bananian-1508.img /dev/sdX

Um herauszufinden, um welches Laufwerk es sich bei dem neu eingelegten Wechseldatenträger handelt, listet man am einfachsten die Devices auf:

ls -lha /dev/

Ergebnis:

...
crw--w----  1 user    mkpasswd 136,   0  8. Mrz 20:37 pty0
crw-rw-rw-  1 user    mkpasswd   1,   8  8. Mrz 20:37 random
brw-rw-rw-  1 user    mkpasswd   8,   0  8. Mrz 20:37 sda
brw-rw-rw-  1 user    mkpasswd   8,   1  8. Mrz 20:37 sda1
brw-rw-rw-  1 user    mkpasswd   8,   2  8. Mrz 20:37 sda2
brw-rw-rw-  1 user    mkpasswd   8,   3  8. Mrz 20:37 sda3
brw-rw-rw-  1 user    mkpasswd   8,   4  8. Mrz 20:37 sda4
brw-rw-rw-  1 user    mkpasswd   8,  16  8. Mrz 20:37 sdb
brw-rw-rw-  1 user    mkpasswd   8,  17  8. Mrz 20:37 sdb1
drwxrwxrwt+ 1 admin   Kein            0  6. Okt 2014  shm
...

Nun wird der Datenträger eingelegt und die Abfrage nochmals durchgeführt. Ergebnis:

...
crw--w----  1 user    mkpasswd 136,   0  8. Mrz 20:48 pty0
crw-rw-rw-  1 user    mkpasswd   1,   8  8. Mrz 20:48 random
brw-rw-rw-  1 user    mkpasswd   8,   0  8. Mrz 20:48 sda
brw-rw-rw-  1 user    mkpasswd   8,   1  8. Mrz 20:48 sda1
brw-rw-rw-  1 user    mkpasswd   8,   2  8. Mrz 20:48 sda2
brw-rw-rw-  1 user    mkpasswd   8,   3  8. Mrz 20:48 sda3
brw-rw-rw-  1 user    mkpasswd   8,   4  8. Mrz 20:48 sda4
brw-rw-rw-  1 user    mkpasswd   8,  16  8. Mrz 20:48 sdb
brw-rw-rw-  1 user    mkpasswd   8,  17  8. Mrz 20:48 sdb1
brw-rw-rw-  1 user    mkpasswd   8,  32  8. Mrz 20:48 sdc
brw-rw-rw-  1 user    mkpasswd   8,  33  8. Mrz 20:48 sdc1
drwxrwxrwt+ 1 admin   Kein            0  6. Okt 2014  shm

...

Hiermit wird das neue Laufwerk sichtbar. Neu ist sdc. sdc1 ist eine vorhandene Partition auf dem Datenträger, die mit dem neuen Image überschrieben wird.

Leider wurde bisher keine Möglichkeit gefunden, einen Wechseldatenträger mit cygwin zu unmounten. Wird er mit Auswerfen aus dem System entfernt, ist /dev/sdc nicht mehr verfügbar. Also wird das Image trotzdem auf den Datenträger geschrieben, dann der Datenträger aus dem System entfernt, erneut eingesteckt und der Schreibvorgang wiederholt.

Folgender Befehl schreibt das Image auf den Datenträger. Hierbei ist Vorsicht geraten, denn der Befehl warnt nicht vor versehentlicher Falschauswahl, sondern überschreibt im schlimmsten Fall sämtliche Daten bzw. das System, falls administrative Berechtigungen vorliegen.

cd /cygdrive/d/PfadZumBananianImage
dd bs=1M if=bananian-1508.img of=/dev/sdc

Ergebnis:

$ dd bs=1M if=bananian-1508.img of=/dev/sdc
1811+1 Datensätze ein
1811+1 Datensätze aus
1900000000 Bytes (1,9 GB) kopiert, 137,592 s, 13,8 MB/s

Falls das Ergebnis die folgende Fehlermeldung ausgibt, verfügt cygwin nicht über administrative Rechte und muss erneut Als Administrator gestartet werden.

$ dd bs=1M if=bananian-1508.img of=/dev/sdc
dd: konnte „/dev/sdc“ nicht öffnen: Permission denied

Nach erfolgreichem Abschluss dieses Vorgangs sollte der Datenträger mit USB -> Gerät entfernen aus den System entfernt werden. Ggf. sollte die Funktion sync im cygwin-Konsolenfenster ausgeführt werden, damit Schreibfunktionen auf dem Datenträger beendet werden.

Da der Datenträger noch im System gemountet war, während dd das Image geschrieben hat, ist es auf dem Datenträger höchstwahrscheinlich fehlerhaft. Nun wird der Datenträger erneut eingesteckt und der Schreibvorgang wiederholt. Diesmal ist nur die FAT-Partition gemountet, jedoch die Linux-Partition nicht. Diese wird nun fehlerfrei auf den Datenträger geschrieben.

Es befindet sich nun ein boot-fähiges Image auf der SD-Karte, die in den SD-Card-Slot des BananaPiPro-Boards eingesteckt wird.

Bootvorgang

Die SD-Karte in den Kartenleser des Banana Pi Pro eingesteckt wird nun ein Monitor und eine Tastatur angeschlossen. Nun kann das Gerät mit Strom versorgt werden. Daraufhin startet es automatisch.

Während des Bootvorgangs wird zwar erwartet, das das Gerät nun bereits in einem Netzwerk angeschlossen ist, aber das ist hier noch nicht vorgesehen. Anstattdessen wird auf das login gewartet. Die auftauschenden Netzwerk-Warnungen der Netzwerk-Erkennung können ignoriert werden.

Login

Standardwerte für Benutzer und Passwort sind:

Username: root
Passwort: pi

System-Konfiguration

Nach erfolgreichem Login wird die Konfiguration des Systems angepasst. Mit bananian-config wird man durch die vorerst wichtigsten System-Konfigurationen, wie Spracheinstellung, Zeichensatz, Zeitzone usw. geführt.

Ist eine deutsche Tastatur am System angeschlossen, das "-"-Zeichen im englischen Zeichensatz befindet sich auf der deutschen "ß"-Taste.

bananian-config
...
keyboard-layout ändern: y (z drücken)
  Deutsch auswählen
...
root-Passwort ändern: y
  Hier wird ein gutes Passwort mit Ziffern, Klein-
  und Großbuchstaben sowie Interaktionszeichen
  vergeben (ca. 10 Zeichen Länge).
  Passworteingabe erfolgt zwei mal.
...
Zeitzone ändern: y
  Europa/Berlin auswählen
...
Zeichensatz ändern: y
  de_DE.UTF-8 UTF-8 auswählen
  und zusätzlich
  de_DE@euro ISO-8859-15 auswählen
...
Hostname ändern: falls gewünscht, dann neuen Hostnamen eingeben.
...
Aktuelle Hardware-Konfiguration ändern (Banana Pi): y
  BananaPro auswählen
...
Dateisystem extrahieren: y
  Das Dateisystem wird auf die verfügbare Größe der SD-Karte extrahiert.
...

Das System sollte nun neu gestartet werden.

Da nun immer noch kein deutsche Tastaturbelegung vorliegt, gibt es hier Nacharbeit, wenn die Netzwerk-Konfiguration abgeschlossen ist (dpkg-reconfigure console-data).

Der folgende Befehl startet das System neu.

shutdown -r now

Zum "-"-Zeichen siehe oben.

SSH-Server

Im Bananian-Image ist der SSH-Server bereits vorinstalliert und fertig konfiguriert. Hier wird lediglich eine zusätzliche Änderung in der SSH-Konfiguration durchgeführt.

Die Konfigurationsdatei /etc/ssh/sshd_config wird mit einem Editor (z. B. nano) geöffnet.

nano /etc/ssh/sshd_config

Falls hier noch nicht die deutsche Spracheinstellung aktiviert wurde, das Slash wird mit deutscher Minus-Taste gedrückt.

An das Ende der Konfigurationsdatei wird eine Zeile eingefügt.

...
AllowGroups sshlogin

Mit der Tastenkombination Strg+O wird die Konfiguration gespeichert, mit Strg+X wird der Editor geschlossen.

Nun ist es wichtig, die Gruppe zu erstellen und den Benutzer root in diese einzufügen.

addgroup sshlogin
adduser root sshlogin

Nun kann der SSH-Service erneut gestartet werden, um die neue Konfiguration anzunehmen.

service ssh restart

Ein Test erfolgt mit der folgenden Befehlszeile.

ssh localhost

Da es sich um den ersten SSH-Zugang auf dieser Maschine handelt, erfolgt der Schlüsselaustausch, der mit yes bestätigt werden muss. Nach Passworteingabe des Benutzers root wurde die SSH-Verbindung auf die lokale Maschine hergestellt. Mit exit wird die SSH-Session beendet.

Netzwerk-Konfiguration

Nach erfolgreicher Konfiguration des SSH-Servers kann die Netzwerk-Konfiguration vorgenommen werden.

Vorkonfiguriert ist DHCP, d. h., falls der Banana Pi am Router angesteckt wird, erhält er von diesem eine IP-Adresse und die notwendige Konfiguration, sofern der Router diese mit ausliefert. Die IP-Adresse kann im Router für das NAS-Gerät fixiert werden, so dass das Gerät nicht bei erneutem Router- oder BananaPi-Start eine andere IP-Adresse erhält.

Um jedoch eine spezielle IP-Adresse festzulegen, die einem Namen zugeordnet werden kann, wird in diesem Projekt nicht die Router-Konfiguration, sondern die Netzwerk-Konfiguration des NAS-Gerätes angepasst.

nano /etc/network/interfaces

Das Slash-Zeichen im englischen Zeichensatz ist mit der "-"-Taste erreichbar.

Konfigurationsdatei /etc/network/interfaces enthält bereits die notwendigen Konfigurationszeilen, die nur leicht abgeändert werden, so dass folgender Inhalt bleibt.

auto lo
iface lo inet loopback

auto eth0

# dhcp configuration
#iface eth0 inet dhcp

# static configuration
iface eth0 inet static
  address 192.168.178.79
  netmask 255.255.255.0
  gateway 192.168.178.1

Hierbei wird davon ausgegangen, dass der Router die IP-Adresse 192.168.178.1 (Fritzbox-Standard) hat. Diese Angabe findet sich in gateway wieder.

Die Angabe hinter netmask ist in diesem Netzwerk-Adressenbereich üblich und bleibt so. Somit können insgesamt 255 Netzwerk-Geräte addressiert werden.

Die Angabe address gibt die IP-Adresse des NAS-Gerätes an. Da der Router im Netzwerkbereich (Subnet) 192.168.178.x liegt, muss auch die NAS-Adresse in diesem Bereich liegen um im Netzwerk verfügbar zu sein. Dies legt die Netzwerkmaske netmask fest. Die hier verwendete 79 als letzter Teil der IP-Adresse wurde frei gewählt. Es können Adress-Teile von 2 bis 254 vergeben werden. Empfohlen wird der Bereich von 10 bis 100.

Der Editor speichert die Konfiguration mit Strg+O und wird beendet mit Strg+X.

Anschluss im Netzwerk

Mit dieser Konfiguration kann das Gerät an den Router oder an einen Switch im Netzwerk angeschlossen werden, um im Netzwerk mit Internet-Zugriff weitere Installationen, Updates und Konfigurationen via SSH durchzuführen.

Dafür braucht Banana Pi Pro keine Tastatur und keinen Monitor.

SSH-Verbindung zum NAS

Die weitere Systemkonfiguration wird via SSH durchgeführt. Die Verbindung von einem Windows-Computer aus kann mit Putty oder cygwin erfolgen. Von einem Linux-Computer kann die SSH-Verbindung standardmäßig hergestellt werden, denn der SSH-Client ist auf den bekannten Linux-Distributionen bereits installiert.

$ ssh root@192.168.178.79
The authenticity of host '192.168.178.79 (192.168.178.79)' can't be established.
ED25519 key fingerprint is a7:26:4e:4f:c6:57:1f:66:52:83:07:4f:bc:45:45:8b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.178.79' (ED25519) to the list of known hosts                        .
root@192.168.178.79's password:
Linux BANAS 3.4.108-bananian #2 SMP PREEMPT Thu Aug 13 06:08:25 UTC 2015 armv7l

------------------------------------------------------------------------
Welcome to Bananian Linux!
For news and updates check: https://www.bananian.org
Any questions? Read the FAQ first: https://www.bananian.org/faq

Run 'bananian-config' to set up Bananian Linux
Run 'bananian-update' to check for distribution updates
------------------------------------------------------------------------
Last login: Fri Jan  1 03:07:37 2010 from ::1
root@BANAS ~ #

Vor der ersten SSH-Verbindung von diesem Client aus muss der Schlüsselaustausch mit yes bestätigt werden.

Zeit-Einstellung

Bananian for Banana Pi Pro gibt die Systemzeit aus. Noch ist sie nicht aktuell. Der vorinstallierte NTP-Client wird die Zeit dann abgleichen, wenn das Netzwerk Internet-Zugriff hat und der NTP-Port 123 Zugriff nach aussen hat.

Nach einigen Sekunden kann die Systemzeit mit date abgefragt werden.

Der Befehl ntpq -p prüft den NTP-Client zeigt dessen Abfragen an die Zeitserver an.

Mit folgendem Befehl wird der NTP-Dienst erneut gestartet, um beispielsweise eine neue Konfiguration /etc/ntp.conf anzunehmen.

service ntp restart

Updates

Um den Sicherheitszustand auf dem System des Gerätes zu bewahren, müssen regelmäßig updates durchgeführt werden. Sicher können auf jeder Linux-Maschine automatische Updates (unattended-upgrades) konfiguriert werden. In diesem Projekt werden jedoch die automatischen Updates auf Sicherheits-Updates beschränkt, hingegen andere Updates manuell durchgeführt.

Per SSH als Benutzer root auf das NAS-Gerät eingeloggt, werden die folgenden Schritte nacheinander durchgeführt, um manuell Updates durchzuführen.

apt-get update
apt-get upgrade
apt-get dist-upgrade

apt-get update holt die Update-Informationen vom Quellserver, die enthalten, für welche Pakete Updates vorliegen.

apt-get upgrade aktualisiert die auf dem System vorhandenen Pakete, falls Updates auf dem Quellserver vorliegen. Wird hier gefragt, ob Archive heruntergeladen und Plattenplatz freigegeben werden soll, so beantwortet man zweckmäßigerweise mit y.

apt-get dist-upgrade aktualisiert die auf dem System vorhandenen Pakete, falls Updates auf dem Quellserver vorliegen und installiert zusätzlich neue Pakete, die in Abhängigkeit zu den installierten Paketen stehen.

Um veraltete, noch vorhandene Installationsdateien aus dem System zu entfernen werden folgende Kommandos ausgeführt.

apt-get autoremove
apt-get autoclean

Auch sollte man sich davon überzeugen, dass auf dem NAS noch genügend Kapazität vorhanden ist.

df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/root       7,4G    1,1G  6,1G   15% /
devtmpfs        486M       0  486M    0% /dev
tmpfs            98M    200K   97M    1% /run
tmpfs           5,0M       0  5,0M    0% /run/lock
tmpfs           195M       0  195M    0% /run/shm

Automatische Sicherheits-Updates

Auf der Ubuntu- sowie auch auf der Debian-Website sind vollständige Beschreibungen zur Konfiguration automatischer Updates verfügbar. Hier beschränken wir uns auf die Einrichtung automatischer Sicherheits-Updates.

Installation automatischer Updates

Die folgenden Schritte erfordern den root-Zugriff. Also wird nach dem Login mit sudo -s auf root-Rechte erhöht.

Falls noch nicht geschehen, wird das Paket unattended-upgrades installiert.

apt-get install unattended-upgrades
Konfiguration automatischer Updates

Es wird eine neue Konfigurationsdatei /etc/apt/apt.conf.d/10periodic angelegt.

nano /etc/apt/apt.conf.d/10periodic

Inhalt der relevanten Konfigurationszeilen in /etc/apt/apt.conf.d/10periodic:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

In cygwin können die hier aufgeführten und mit copy kopierten Zeilen mit der Tastenkombination Strg+Shift+Einf in die Konsole eingefügt werden. Speichern mit Strg+O, schließen mit Strg+X.

Firewall

Da das Gerät der erhöhten IT-Sicherheit beitragen soll, gehört eine Firewall dazu. Die Firewall wird das Gerät vor unbefugten Zugriffen schützen. Es werden lediglich Ports freigegeben, die für die verwendeten Dienste benötigt werden. Dabei wird die Flussrichtung der Datenpakete berücksichtigt.

Da das Gerät ausschließlich über die Kommandozeile bedient wird, sind auch hier keine zusätzlichen Tools für den Betrieb der Firewall notwendig. Es wird lediglich iptables und ein Shell-Script verwendet, welches Firewall-Regeln enthält. Um die Firewall bei Systemstart nach Bereitschaft der Netzwerkverbindung zu starten, wird der Start des Scripts in die Netzwerk-Konfiguration integriert.

Angewendete Firewall-Regeln

Folgendes bash-Script fw-start.sh enthält die Firewall-Regeln, die den Datenverkehr für SSH, HTTP und HTTPS auf das NAS-Gerät zulassen.

Es wird angelegt mit folgendem Befehl.

nano /usr/local/sbin/fw-start.sh

Datei fw-start.sh:

##!/bin/bash
# Firewall-Script fuer NAS im LAN
# Datei fw-start.sh
# location: /usr/local/sbin/

AddDir=$(dirname $0)
# Loeschen aller Regeln und Ketten
. $AddDir/fw-stop.sh
# es besteht keine Einschraenkung der Kummunikation (alles ist offen hier)

echo "Firewall wird gestartet..."
date

# Interfaces
FW_IFACE_LAN=eth0
#FW_IFACE_LAN=wlan0
# das Netzwerk im LAN
FW_LAN_SUBNET=192.168.178.0/24
# die Broadcast-Adresse im LAN
FW_LAN_BROADCAST_IP=192.168.178.255
# die Broadcast-Addr allg.
FW_BROADCAST_IP=255.255.255.255

# cmd-mapping
IPT=$(which iptables)
SYS=$(which sysctl)
MPR=$(which modprobe)

$MPR ip_conntrack

# default-rules setzen
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# forwarding deaktivieren, denn es gibt keine Regel und kein forwarding
$SYS -w net.ipv4.ip_forward=0
# wir beantworten keine broadcast-Pings mehr
$SYS -w net.ipv4.icmp_echo_ignore_broadcasts=1
#Enable TCP SYN cookies (testen)
#echo 1 > /proc/sys/net/ipv4/tcp_syncookies
$SYS -w net.ipv4.tcp_syncookies=1

# wir deaktivieren IPv6
$SYS -w net.ipv6.conf.all.disable_ipv6=1
$SYS -w net.ipv6.conf.default.disable_ipv6=1
$SYS -w net.ipv6.conf.lo.disable_ipv6=1
echo "IPv6 deaktiviert..."


# bestehende Verbindungen erlauben
$IPT -A INPUT -i $FW_IFACE_LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o $FW_IFACE_LAN -m state --state ESTABLISHED,RELATED -j ACCEPT

# loopback freischalten (Keine Kontrolle zwischen Prozessen auf der Maschine)
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# die Ping-in rule
$IPT -N PING_IN

# Datenverkehr vom Netz auf NAS
echo "INPUT:"
# auf die VM lassen wir nur SSH zu
$IPT -A INPUT -i $FW_IFACE_LAN -m state --state NEW -p tcp --dport ssh -j ACCEPT
# da es sich hierbei um den Webserver handelt, lassen wir http(s) zu
$IPT -A INPUT -i $FW_IFACE_LAN -m state --state NEW -p tcp -m multiport --dport http,https -j ACCEPT
# Ping auf alle Systeme zulassen (auch von aussen)
$IPT -A INPUT -i $FW_IFACE_LAN -p icmp -j PING_IN
# andere Broadcast-msgs unterbinden
#$IPT -A INPUT -i $FW_IFACE_LAN -d $FW_BROADCAST_IP -j REJECT
# Broadcast ohne Eintrag im Log zurueckweisen (wenn er wirklich aus dem LAN kommt)
#$IPT -A INPUT -i $FW_IFACE_LAN -s $FW_LAN_SUBNET -d $FW_LAN_BROADCAST_IP -j REJECT
# der Rest ist verboten, deshalb loggen
$IPT -A INPUT -i $FW_IFACE_LAN -j LOG --log-prefix "[FW] DENY INPUT: "
$IPT -A INPUT -i $FW_IFACE_LAN -j REJECT

# Datenverkehr vom NAS nach aussen
echo "OUTPUT:"
# wir lassen alle Requests vom NAS nach aussen zu
#$IPT -A OUTPUT -o $FW_IFACE_LAN -j ACCEPT
$IPT -A OUTPUT -o $FW_IFACE_LAN -m state --state NEW -j ACCEPT
# HTTP requests zulassen
#$IPT -A OUTPUT -o $FW_IFACE_LAN -p tcp -m multiport --dport http,https -j ACCEPT
# Ping auf alle Systeme zulassen (auch von aussen)
#$IPT -A OUTPUT -o $FW_IFACE_LAN -p icmp -j PING_IN
# der Rest ist verboten, deshalb loggen
$IPT -A OUTPUT -o $FW_IFACE_LAN -j LOG --log-prefix "[FW] DENY OUTPUT: "
$IPT -A OUTPUT -o $FW_IFACE_LAN -j REJECT

# die Ping-rule fuer zugelassenen Eingang
echo "PING_IN:"
$IPT -A PING_IN -p icmp --icmp-type 0 -j ACCEPT
$IPT -A PING_IN -p icmp --icmp-type 3 -j ACCEPT
$IPT -A PING_IN -p icmp --icmp-type 8 -j ACCEPT
#$IPT -A PING_IN -p icmp --icmp-type 11 -j ACCEPT
#$IPT -A PING_IN -p icmp --icmp-type 12 -j ACCEPT
# ansonsten loggen
$IPT -A PING_IN -j LOG --log-prefix "DENY PING_IN: "
$IPT -A PING_IN -j REJECT

echo "firewall started."

In cygwin können die hier aufgeführten und mit copy kopierten Zeilen mit der Tastenkombination Strg+Shift+Einf in die Konsole eingefügt werden. Speichern mit Strg+O, schließen mit Strg+X.

Es wird eine zweite Datei angelegt, welche die Firewall bei Bedarf stoppt.

nano /usr/local/sbin/fw-stop.sh

Script fw-stop.sh:

#!/bin/bash
# Firewall-Script
# Datei fw-stop.sh
# location: /usr/local/sbin/

echo "Firewall wird gestoppt..."

# cmd-mapping
IPT=$(which iptables)
IP6T=$(which ip6tables)
SYS=$(which sysctl)

# alle Regeln der Ketten loeschen
$IPT -F
$IPT -t nat -F
# Ketten selbst loeschen
$IPT -X
$IPT -t nat -X

# IN/OUT-Verkehr erlauben
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
#$IPT -P FORWARD ACCEPT
#$IPT -P POSTROUTING ACCEPT -t nat
#$IPT -P PREROUTING ACCEPT -t nat
#$IPT -P OUTPUT ACCEPT -t nat

# stop masquerading
#$SYS -q -w net.ipv4.ip_forward=0

echo "firewall wurde gestoppt."

Die beiden Script-Dateien müssen als ausführbar gekennzeichnet werden.

chmod ug+x /usr/local/sbin/*.sh

Mit folgendem Befehl überprüfen wir die Attribute der Scriptdateien.

ls -lha /usr/local/sbin
insgesamt 16K
drwxrwsr-x  2 root staff 4,0K Mär 10 01:12 .
drwxrwsr-x 10 root staff 4,0K Jul 12  2015 ..
-rwxr-xr--  1 root staff 3,4K Mär 10 01:08 fw-start.sh
-rwxr-xr--  1 root staff  581 Mär 10 01:12 fw-stop.sh

Wichtig ist hierbei das x-Attribut (Ausführen).

Test

bash /usr/local/sbin/fw-start.sh
Firewall wird gestoppt...
firewall wurde gestoppt.
Firewall wird gestartet...
Do 10. Mär 01:24:51 CET 2016
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
IPv6 deaktiviert...
INPUT:
OUTPUT:
PING_IN:
firewall started.

Ist der Test erfolgreich verlaufen, wie im Beispiel gezeigt, kann der Start der Firewall in die Netzwerk-Konfiguration eingefügt werden.

Einbindung in die Netzwerk-Konfiguration

Die Netzwerk-Konfigurationsdatei /etc/network/interfaces wird nochmals geöffnet.

nano /etc/network/interfaces

Es wird die Zeile Firewall starten und die Folgezeile an die entsprechende Stelle eingefügt.

...
iface eth0 inet static
	# Firewall starten
	pre-up bash /usr/local/sbin/fw-start.sh
	address 192.168.178.79
...

Script-Steuerung im Fehlerfall

Hat sich ein Fehler in die Konfiguration eingeschlichen, kann es passieren, dass Zugriffe auf das NAS-Gerät blockiert werden. Somit könnte auch die SSH-Verbindung blockiert werden. In diesem Fall loggt man sich mit Tastatur und Monitor am Gerät an und ruft das Script fw-stopp.sh auf, um die Firewall zu stoppen.

bash /usr/local/sbin/fw-stop.sh

Dann kann der SSH-Zugriff erfolgen und die Fehlersuche durchgeführt werden.

Installation Festplatte

Gerätename ermitteln

Der Befehl fdisk -l listet die vorhandenen Datenträger und Partitionen auf. Der Gerätename der angeschlossene Festplatte lautet in diesem Fall /dev/sda.

fdisk -l

Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mmcblk0: 7,5 GiB, 8068792320 bytes, 15759360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0ccea0b3

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       2048    43007    40960   20M 83 Linux
/dev/mmcblk0p2      43008 15759359 15716352  7,5G 83 Linux

Festplatte partitionieren

Die Verwendung von fdisk ist Vorsicht geboten, deshalb werden die folgenden Schritte ausführlich beschrieben.

Hier wird dem Befehl fdisk der Parameter /dev/sda übergeben, um die Festplatte auszuwählen. Als erstes Kommando kann mit m die Hilfe aufgerufen werden, um alle möglichen Kommandos aufzulisten.

fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x430ddd63.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help):

Es wird nun eine neue Partition erstellt (n).

Die Abfrage nach Start- und Last-Sector sowie Größe kann mit den Standardwerten beantwortet werden. Dafür reicht Enter ohne weitere Eingabe aus.

Die neue Partition ist eine primäre Partition (n).

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-1953525167, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167):

Created a new partition 1 of type 'Linux' and of size 931,5 GiB.

Command (m for help):

Zur Überprüfung kann die Partition mit p aufgelistet werden.

Command (m for help): p
Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x430ddd63

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931,5G 83 Linux


Command (m for help):

Um die erstellte Partition auf den Datenträger zu schreiben, wird w (write) eingegeben.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Nun wird Partition mit dem Format ext4 formatiert.

mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
Ein Dateisystems mit 244190390 (4k) Blöcken und 61054976 Inodes wird erzeugt.
UUID des Dateisystems: 31d555dc-7e41-40cb-932a-618662811f0a
Superblock-Sicherungskopien gespeichert in den Blöcken:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

beim Anfordern von Speicher für die Gruppentabellen: erledigt
Inode-Tabellen werden geschrieben: erledigt
Das Journal (32768 Blöcke) wird angelegt: erledgt
Die Superblöcke und die Informationen über die Dateisystemnutzung werden
geschrieben: erledigt

Zur Überprüfung werden die Datenträger aufgelistet.

fdisk -l

Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x430ddd63

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931,5G 83 Linux

Disk /dev/mmcblk0: 7,5 GiB, 8068792320 bytes, 15759360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0ccea0b3

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       2048    43007    40960   20M 83 Linux
/dev/mmcblk0p2      43008 15759359 15716352  7,5G 83 Linux

Festplatte in das System einbinden

Um die Festplatte dem System zur Verfügung zu stellen, muss sie in einen Mountpoint gemountet werden. Der Mountpoint kann beispielsweise /media/sda1 oder /mnt/sda1 genannt werden.

Hier wird der Mountpoint /media/sda1 angelegt.

mkdir /media/sda1

Der Befehl mount mountet schließlich die Festplatte.

mount /dev/sda1 /media/sda1

Die Prüfung zeigt nun den neuen Datenträger an.

df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/root       7,4G    1,1G  6,1G   15% /
devtmpfs        486M       0  486M    0% /dev
tmpfs            98M    200K   97M    1% /run
tmpfs           5,0M       0  5,0M    0% /run/lock
tmpfs           195M       0  195M    0% /run/shm
/dev/sda1       917G    200M  871G    1% /media/sda1

Diese neu hinzugekommene Kapazität wird in den folgenden Schritten dem eigentlichen Vorhaben (SVN) zur Verfügung gestellt.

Festplatte bei Systemstart automatisch mounten

Mit dem mount-Befehl gemountete Datenträger sind nach einem Systemstart nicht mehr automatisch in das System eingehangen. Um die Festplatte dauerhaft in das System einzubinden, wird die Konfigurationsdatei fstab bearbeitet.

nano /etc/fstab

Folgende Zeile wird an das Ende angefügt:


# Festplatte bei Systemstart mounten
/dev/sda1       /media/sda1     ext4    defaults        0       0

Tastenkombination Strg+O speichert den Inhalt der Konfigurationsdatei, Strg+X beendet den Editor.

Nach dem Neustart steht die Kapazität der Festplatte dem System unter /media/sda1 zur Verfügung.

Apache Webserver

Webserver-Test

Da SVN (Versionsverwaltung - subversion) den Betrieb eines Webservers voraussetzt, wird hier Apache-Webserver installiert.

apt-get update
apt-get install apache2

Das Standard-Verzeichnis für Webseiten liegt unter /var/www/html. Daran wird hier nichts geändert. Somit kann ein Test des Webservers im Browser erfolgen, in dem die Netzwerkadresse des NAS-Gerätes in die Adresszeile des Browser eingegeben wird.

http://192.168.178.79/

SVN - subversion

Installation

apt-get update
apt-get install subversion libapache2-svn

SVN ist nun vollständig auf dem NAS-Gerät installiert. Nun ist es wichtig, das Repository-Verzeichnis zu konfigurieren, einen eingeschränkt berechtigten Benutzer anzulegen und den Betrieb des Webservers auf HTTPS umzustellen.

Konfiguration

Da der Zugriff nur durch einen bestimmten Benutzer auf bestimmte oder auch auf sämtliche Repositories stattfinden soll, muss ein Benutzer auf Linux-Ebene angelegt werden, mit dessen Benutzerkennung der SVN-Client Tortoise Zugriff auf die Repositories erhält.

Benutzer mit eingeschränkten Benutzerrechten anlegen

Hier wird ein Benutzer angelegt, der über eingeschränkte Berechtigungen verfügt, also keine Root-Berechtigung hat. Bei diesem Benutzer handelt es sich zweckmäßigerweise um einen Benutzer, der auch am Windows-Computer existiert. Hier sollte auch das gleiche Passwort vergeben werden, wie am Windows-Computer.

adduser <Wunsch-Benutzername>

Auf Linux werden Benutzernamen kleingeschrieben.

SVN-Benutzer anlegen

Des Weiteren wird ein Benutzer angelegt, der den Vollzugriff auf die SVN-Verzeichnisse erhält. Hier wird ein System-Benutzer mit entsprechender Gruppe svn angelegt.

adduser svn --system --group --no-create-home --disabled-login --shell /bin/false
adduser www-data svn

Ergebnis:

Lege Systembenutzer "svn" (UID 106) an ...
Lege neue Gruppe "svn" (GID 111) an ...
Lege neuen Benutzer "svn" (UID 106) mit Gruppe "svn" an ...
Erstelle Home-Verzeichnis "/home/svn" nicht.

Der Benutzer www-data, mit welchem der Webserver-Prozess gestartet wird, wird ebenfalls in die Gruppe svn eingefügt.

adduser www-data svn

Ergebnis:

Füge Benutzer "www-data" der Gruppe "svn" hinzu ...
Benutzer www-data wird zur Gruppe svn hinzugefügt.
Fertig.

Auch der Benutzer mit eingeschränkten Rechten wird in die Gruppe svn eingefügt.

adduser <Wunsch-Benutzername> svn
SVN-Root-Verzeichnis anlegen

Das Verzeichnis, unter welchem sich die SVN-Repositories befinden werden, wird auf dem gemounteten Datenträger angelegt. In diesem Fall /media/sda1. Auch die Verzeichnis-Berechtigungen werden in diesem Schritt vergeben.

mkdir /media/sda1/svn
chown www-data:svn /media/sda1/svn
chmod 750 /media/sda1/svn
SVN-Repository anlegen

Nun kann ein erstes Repository angelegt werden.

mkdir /media/sda1/svn/Test_Rep
chown www-data:svn /media/sda1/svn/Test_Rep
chmod 750 /media/sda1/svn/Test_Rep
svnadmin create /media/sda1/svn/Test_Rep
chown -R www-data:svn /media/sda1/svn/Test_Rep
chmod -R o-rwx /media/sda1/svn/Test_Rep

Es ist sinnvoll, diese Schritte in einem Shell-Script zusammenzufassen und bei Neuanlage weiterer SVN-Repositories auszuführen.

Shellscript CreateSVN.sh für die menügesteuerte Neuanlage, Umbenennung und Löschung von SVN-Repositories:

#!/bin/bash
# SVN erstelllen

HostName=$('hostname')
AppDir=$(dirname $0)

# Name fuer ein erstes Repository
RepositoryName=${1:-"TestRepository"}
SVNRoot="/media/sda1/svn"

echo "SVN-Repository auf ${HostName} erstellen:"
date
echo

echo "Optionen:"
echo
select menu in "Repository-Name eingeben (${RepositoryName})"\
 "Repository aufsetzen (${RepositoryName})"\
 "Repository umbenbennen (${RepositoryName})"\
 "Repository loeschen (${RepositoryName})"\
 "Loeschen rueckgaengig machen (${RepositoryName})"\
 "Repositories auflisten"\
 "Beenden"
do
	case $REPLY in
		1 )
			echo "Repository-Name eingeben (ohne Leerzeichen!):"
			read RepositoryName
			echo "Eingabe: ${RepositoryName}"
			;;
		2 )
			echo "${RepositoryName} wird angelegt."
			# Repository-Dir anlegen
			mkdir -p ${SVNRoot}/${RepositoryName}
			# Benutzerrechte anpassen
			chown www-data:svn ${SVNRoot}/${RepositoryName}
			# Gruppen-Rechte setzen und vererben
			#chmod u+rwx ${SVNRoot}/${RepositoryName}
			#chmod g+rws ${SVNRoot}/${RepositoryName}
			#chmod o-rwx ${SVNRoot}/${RepositoryName}
			chmod 750 ${SVNRoot}/${RepositoryName}

			# Repository-DB anlegen
			svnadmin create ${SVNRoot}/${RepositoryName}

			# Vererbung der Gruppenrechte anzeigen
			echo "${SVNRoot}/${RepositoryName}:"
			ls -lha ${SVNRoot}/${RepositoryName}
			# und nochmals setzen
			chown -R www-data:svn ${SVNRoot}/${RepositoryName}
			# ohne diesem Recht (speziell auf svn/<name>/format) geht es nicht
			#chmod -R u+w ${SVNRoot}/${RepositoryName}
			#chmod -R u+rwx ${SVNRoot}/${RepositoryName}
			#chmod -R g+rwx ${SVNRoot}/${RepositoryName}
			chmod -R o-rwx ${SVNRoot}/${RepositoryName}
			# anzeigen
			echo "${SVNRoot}/${RepositoryName}:"
			ls -lha ${SVNRoot}/${RepositoryName}
			echo
			echo "SVN-Repository-URL:"
			echo "https://svn.issb.lan/svn/${RepositoryName}"
			;;
		3 )
			echo "Neuen Namen fuer Repository ${RepositoryName} eingaben"
			read RepNewName
			echo "Eingabe ${RepNewName}"
			echo "Repository wird nach ${RepNewName} umbenannt."
			#svn move ${RepositoryName} ${RepNewName}
			mv ${SVNRoot}/${RepositoryName} ${SVNRoot}/${RepNewName}
			svnadmin setuuid ${SVNRoot}/${RepNewName}
			# wir nehmen nun den neuen Namen an
			RepositoryName=${RepNewName}
			# und nochmals setzen
			chown -R www-data:svn ${SVNRoot}/${RepositoryName}
			# ohne diesem Recht (speziell auf svn/<name>/format) geht es nicht
			#chmod -R u+w ${SVNRoot}/${RepositoryName}
			#chmod -R u+rwx ${SVNRoot}/${RepositoryName}
			#chmod -R g+rwx ${SVNRoot}/${RepositoryName}
			chmod -R o-rwx ${SVNRoot}/${RepositoryName}
			echo "${SVNRoot}:"
			ls -lha ${SVNRoot}
			echo "Webserver durchstarten, falls Authentifizierung in Apache-Cfg aktiviert werden muss."
			;;
		4 )
			# repository loeschen bzw. nach tmp exportieren
			echo "${RepositoryName} wird nach tmp exportiert."
			svnadmin dump ${SVNRoot}/${RepositoryName} > /tmp/${RepositoryName}.svn.dump
			echo
			echo "/tmp:"
			ls -lha /tmp
			echo
			echo "Repository ${RepositoryName} wird geloescht."
			rm -rf ${SVNRoot}/${RepositoryName}
			echo
			echo "${SVNRoot}:"
			ls -lha ${SVNRoot}
			;;
		5 )
			# repository von tmp importieren
			echo "Repository ${RepositoryName} wird wiederhergestellt."
			svnadmin create ${SVNRoot}/${RepositoryName}
			#chmod g+rws ${SVNRoot}/${RepositoryName}
			svnadmin load ${SVNRoot}/${RepositoryName} < /tmp/${RepositoryName}.svn.dump
			# und nochmals setzen
			chown -R www-data:svn ${SVNRoot}/${RepositoryName}
			# ohne diesem Recht (speziell auf svn/<name>/format) geht es nicht
			#chmod -R u+w ${SVNRoot}/${RepositoryName}
			#chmod -R u+rwx ${SVNRoot}/${RepositoryName}
			#chmod -R g+rwx ${SVNRoot}/${RepositoryName}
			chmod -R o-rwx ${SVNRoot}/${RepositoryName}
			echo
			echo "${SVNRoot}/${RepositoryName}:"
			ls -lha ${SVNRoot}/${RepositoryName}
			;;
		6 )
			echo "Kapazitaet ${SVNRoot}:"
			du -sh ${SVNRoot}
			echo
			if [ -d ${SVNRoot}/${RepositoryName} ]; then
				echo "Kapazitaet ${SVNRoot}/${RepositoryName}:"
				du -sh ${SVNRoot}/${RepositoryName}
				echo
			fi
			echo "Einzelne SVNs:"
			for dir in ${SVNRoot}/*
			do
				if [ -d ${dir} ]; then
					du -sh ${dir}
				fi
			done
			;;
		7 )
			echo "Skript wird beendet."
			exit
			;;
		* ) echo "Ungueltige Auswahl...";;
	esac
	echo
done

Nach dem Anlegen der ausführbaren Shelldatei wird das Attribut x gesetzt.

chmod 750 /usr/local/sbin/CreateSVN.sh

Ein geeignetes Verzeichnis für diese Shell-Script wäre beispielsweise /usr/local/sbin. Somit wird folgender Aufruf das Hauptmenü starten:

bash /usr/local/sbin/CreateSVN.sh
Webserver-Konfiguration svn.conf

Folgende Angaben werden in Konfigurations-Datei dav_svn.conf unter /etc/apache2/mods_available eingefügt.

Bearbeiten der Datei /etc/apache2/mods_available/dav_svn.conf:

nano /etc/apache2/mods-available/dav_svn.conf

Folgende Zeilen einfügen:

...

# die SVN-Root
<Location /svn>
	DAV svn
	SVNParentPath /media/sda1/svn
	SVNListparentPath on
			
	# Info:
	# https://wiki.samba.org/index.php/Authenticating_Apache_against_Active_Directory
	
	#SSLRequireSSL
</Location>

Nun wird eine weitere Konfigurationsdatei /etc/apache2/sites-available/svn_http.conf angelegt.

nano /etc/apache2/sites-available/svn_http.conf

Folgende Zeilen werden in Datei svn_http.conf eingefügt.

<Directory "/media/sda1/svn">
	# Die SVN-Test-Website
	AllowOverride All 

	# immer wenn Benutzerkennungen uebergeben werden
	#SSLRequireSSL
	
</Directory>

Die SVN-Website wird aktiviert.

a2ensite svn_http.conf

Die Webserver-Konfiguration wird eingelesen.

service apache2 reload
Test auf dem Windows-Computer
SVN-Rootverzeichnis

Der Aufruf der Adresse http://192.168.178.79/svn im Browser sollte nun das SVN-Rootverzeichnis auflisten. Momentan befindet sich hier das SVN-Repository Test_Rep.

Noch wird keine Benutzeranmeldung für den Zugriff auf die SVN-Repositories abgefragt. Das wird sich ändern, nachdem die Website /svn auf HTTPS umgestellt wurde.

Auf HTTPS umstellen

Da bei Zugriff auf ein SVN-Repository die Benutzerkennung an das NAS-Gerät übertragen wird, ist es erforderlich, das HTTPS-Protokoll zu verwenden. Damit werden Benutzerkennungen auch im LAN nicht unverschlüsselt übertragen.

  • Zertifikat für NAS-IP-Adresse erstellen
  • Apache2-Konfiguration anpassen
  • SVN-Konfiguration anpassen

Backup der SD-Karte

Um eine Sicherungskopie auf einem Server oder auf dem PC zu hinterlegen, wird das NAS-Gerät heruntergefahren, die Karte entnommen und in einen SD-Kartenleser am PC angesteckt.

Befindet sich auf dem PC cygwin oder Linux, kann eine Kopie des gesamten Datenträgers mit dd durchgeführt werden. Mit fdisk -l wird der Name des neu eingelegten Mediums ermittelt.

fdisk -l

In diesem Fall ist es /dev/sdd.

Anlegen der Kopie mit dd:

dd bs=1M if=/dev/sdd of=./BananaPiNAS.8GB.img
7695+0 Datensätze ein
7695+0 Datensätze aus
8068792320 Bytes (8,1 GB) kopiert, 7355,94 s, 1,1 MB/s

Die Client-Seite

Tortoise auf dem Windows-Computer

Download: https://tortoisesvn.net/downloads.de.html

RabbitVCS auf dem Linux-Computer

Download: http://rabbitvcs.org/