Git auf einem QNAP-NAS TS-119P II einrichten

Ein QNAP-NAS TS-119P II mit einem Git-Repostory und einem SSH-Server,der normale Usern die Anmeldung ohne Passwort erlaubt, einrichten.

Leider hat der Q-NAS nur einen SSH-Zugang der für Administratoren parametriert ist und als zusätzliche Hürde wird kein Git-Paket von QNAP für den TS-119P II geliefert.

Um die Software zu laden, ist die Seite https://www.qnapclub.eu/de/ sehr hilfreich.

Notwendige Software:
Entware-3x-std für das Model TS-ARM-X19 (https://www.qnapclub.eu/de/qpkg/517)

Von der Seite http://entware.zyxmon.org/binaries/armv5/Packages.html die Software:

  • openssh-client 7.6p1-1 net OpenSSH client.
  • openssh-client-utils 7.6p1-1 net OpenSSH client utilities.
  • openssh-keygen 7.6p1-1 net OpenSSH keygen.
  • openssh-moduli 7.6p1-1 net OpenSSH server moduli file.
  • openssh-server 7.6p1-1 net OpenSSH server.
  • openssh-server-pam 7.6p1-1 net OpenSSH server (with PAM support).
  • openssh-sftp-client 7.6p1-1 net OpenSSH SFTP client.
  • openssh-sftp-server 7.6p1-1 net OpenSSH SFTP server.
  • Git 2.16.1-2 net Git is …
  • git-http 2.16.1-2 net Git is …

Diese Pakete werden nachher mit der Paketverwaltung opkg heruntergeladen und installiert.

Installation

Die ersten Arbeiten werden auf Konfigseite des NAS gemacht:
Für jeden User der sich auf dem NAS über SSH anmelden soll, muss ein Verzeichnis mit dem Namen des Users unter /share/homes/ angelegt werden, wenn es nicht schon existiert. Es ist wichtig, das das home-Verzeichnis von allen Usern über die Systemsteuerung – Rechte – Freigabeordner der Zugriff erlaubt wird. Über File Station wird dann jedes home-Verzeichnis nur für dem User hingerichtet, für alle anderen gesperrt. Dies kann auch auf der Konsole eingestellt werden.
Nach den die grundsätzlichen Einstellungen auf dem Webinterface durchgeführt wurden, erledigt man die nächsten Schritte mittels SSH mit dem User Admin.
[~] # chmod 700 gituser
Die Rechte können hier nur eingeschrängt werden. Ausserdem dürfen die Rechte nicht mehr über die WEB-Oberfläche verändert und angepasst werden. Die Web-Oberfläche setzt auch die Gruppenrechte wieder. Dies bedeutet, das die Arbeit wiederholt werden muss.
Das Ergebnis muss in etwa so aussehen:
[~] # ll share/HDA_DATA/homes/
drwxrwx--- 8 admin users 4.0k Mar 18 16:09 ./
drwxrwxrwx 33 admin administ 4.0k Mar 11 14:25 ../

drwx------ 3 user1 user1 4.0k Mar 19 19:47 user1/
drwx------ 5 gituser git 4.0k Mar 21 17:38 gituser/
In jedem User-home wird ein Verzeichniss .ssh/ angelegt, mit den selben Rechten, wie mit dem Home-Verzeichniss.
An dem Beispieluser gituser:
[~] # mkdir .ssh
[~] # chmod 700 .ssh
[~] # ll
drwx------ 4 gituser git 4.0k Mar 23 12:37 ./
drwxrwx--- 8 admin users 4.0k Mar 18 16:09 ../

drwx------ 2 gituser git 4.0k Mar 20 18:53 .ssh/
In dem .ssh-Verzeichnis
[~] # cd .ssh
[~] # touch authorized_keys
[~] # chmod 700 authorized_keys
[~] # cd ..
[~] # chmod 700 .ssh

Das Ergebniss muss dann so aussehen:
[~] # ll
[~] # ll .ssh
drwx------ 2 gituser git 4.0k Mar 20 18:53 ./
drwx------ 4 gituser git 4.0k Mar 23 12:37 ../
-rwx------ 1 gituser git 1.4k Mar 20 18:53 authorized_keys*

Als nächstes muss die Software Entware-3x-std von der Seite https://www.qnapclub.eu/de/qpkg/517 herunter geladen und über das App-Center des NAS die Software manuell installieren werden. Die Software installiert das Werkzeug opkg. Damit ist es möglich Pakete über den SSH-Zugang manuell zu installieren.

Jetzt ist es notwendig den Port des Adminzugang zu verschieben.
Auf der Konfigseite ControlPanel – Netzwerk – Telnet / SSH des NAS den SSH-Sever von Port 22 auf einen anderen Port (z. B.: 4422) verschieben, weil der Standardport vom neuen OpenSSH belegt wird. Sicherheitshalber sollte noch der TELNET-Zugang freigeschaltet werden, denn falls durch eine Fehlkonfiguration/Einstellung der SSH-Zugang unerreichbar ist, kann man über diesen Zugang die Reparatur einleiten.

Für die dauerhafte Sicherheit, muss aber der TELNET-Zugang nach dem Ende der Arbeiten wieder abgeschaltet werden.

Mit dem Werkzeug ihrer Wahl (PUTTY, ssh) auf dem NAS anmelden:
~> ssh -p 4422 admin@QNAS

Als erstes wird ein Update und dann das Upgrade durchgeführt:
[~] # opkg update
[~] # opkg upgrade

Jetzt kann der OpenSSH-Server installiert werden:
[~] # opkg install openssh-server
[~] # opkg install openssh-client
[~] # opkg install openssh-sftp-client
[~] # opkg install openssh-sftp-server

Der Server kann jetzt gestartet werden.
[~] # /opt/etc/init.d/S40sshd start

Damit der SSH-Server automatisch startet, ist es notwendig einen Autostart-Eintrag in der Datei /etc/config/qpkg.conf zu erstellen. Dieser Eintrag beschreibt nur die autorun-Datei die unten erzeugt und ausgefüllt wird.

[autorun]
Name = autorun
Version = 1.0
Author = Ulf Kornblum
Date = 2015-10-01
Shell = /share/HDA_DATA/.qpkg/autorun/autorun.sh
Install_Path = /share/HDA_DATA/.qpkg/autorun
Enable = TRUE
Status = complete

Anschließend wird die eigentliche Autostart Datei erstellt und mit den entsprechenden Rechten ausgestattet:
[~] # mkdir /share/MD0_DATA/.qpkg/autorun
[~] # vim /share/MD0_DATA/.qpkg/autorun/autorun.sh
die Datei erhält folgenden Inhalt:
#!/bin/sh
/opt/etc/init.d/S40sshd start
jetzt noch die Rechte setzten:
[~] # chmod +x /share/MD0_DATA/.qpkg/autorun/autorun.sh

Meine SSH-Installation wurde standardmäßig automatisch gestartet. Bevor das NAS neugestartet wird muss noch einmal die sshd_config bearbeitet werden:
Der Eintrag PubkeyAuthentication muss auskommentiert werden und von no auf yes geändert werden.
Nachdem das NAS neugestartet wurde, kann sich ein User (z.B.: gituser) anmelden:
~> ssh gituser@QNAS

Nun ist es an der Zeit einen Schlüssel zu erzeugen und den öffentlichen Schlüssel auf dem gituser-ssh-Konto, auf dem man sich ohne Passwort einloggen möchte, hinterlegen.
~> ssh-keygen -t rsa -b 4096
Der Befehl erzeugt einen privaten und eine öffentlichen Schlüssel, vom Typ RSA und einer Länge 4096 Bit. Die Länge kann auf 8192 Bit vergrößert werden. Der Befehl fragt einen Speicherort ab, die Vorgabe ist: .ssh/id_rsa und .ssh/id_rsa.pub und schon der richtige Ort und Name. Dann wird das Passwort für den Schlüssel abgefragt, bitte hier kein Passwort oder keine Passphrase eingegeben. Diesen Schlüssel am besten nur auf das Userkonto, das das Git Repository verwalten soll kopieren.
~> ssh-copy-id -i .ssh/id_rsa gituser@QNAS
Zum Kopieren wird noch einmal das Passwort des Kontobesitzers abgefragt. Danach kann man sich ohne Passwort auf dem Konto anmelden. Sollte dies nicht funktionieren, liegt es meist an den falschen Berechtigungen des home und/oder des .ssh Verzeichnisses.

Nun muss das Git-Paket installiert werden.
[~] # opkg install git
Damit die Befehle git, less, etc funktionieren, muss der Suchpfad um die Einträge /opt/bin und /opt/sbin erweitert werden. Damit alle User diese Befehle nutzen können, muss der Pfad in der Datei etc/profile erweitert werden. In der Datei wird der Eintrag PATH um die Zeilen /opt/bin\ und /opt/sbin\ ergänzt.

Leider ist der Suchpfad nicht um die notwendigen Pfade ergänzt worden, um die Befehle git, etc aufrufen zu können. Um die Pfade /opt/bin und /opt/sbin nach der Anmeldung im Suchpfad zu haben, wird in der Datei /etc/profile nach der Zeile export PATH=\ die genannten Pfade eingefügt.
export PATH=\
/opt/bin:\
/opt/sbin:\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/usr/bin/X11:\
/usr/local/sbin

Leider ist diese Änderung nicht reboot-sicher, diese Änderung muss nach jedem Reboot wieder angepasst werden.

Um den PATH tatsächlich nach jedem Reboot wieder um die gewünschten Pfade zu erweitern, muss eine Erweiterung in der Datei /etc/init.d/Entware-3x.sh geschrieben werden.

Vor der Kommentarzeile # startup Entware-3x services werden die Zeilen
# Testen ob der Pfad /opt/... schon im PATH steht
/bin/cat /etc/profile | /bin/grep "PATH" | /bin/grep "/opt/bin" 1>>/dev/null 2>>/dev/null
# wenn nicht dann am Ende anfuegen
[ $? -ne 0 ] && /bin/echo "export PATH=/opt/bin:/opt/sbin:\$PATH" >> /etc/profile
eingefügt.

Jetzt kann das NAS neu gestartet werden. Wenn alles richtig gemacht wurde, kann man sich jetzt als Admin (auf Port 2222) oder als normaler User (Port 22) mit ssh anmelden und die Befehle git, less, etc sind ausführbar und kann ein Repository angelegt werden und genutzt werden.

Quellennachweis und hilfreiche Seiten:
1. https://forum.qnapclub.de/thread/37886-howto-entware-ng-und-linux-pakete-installieren/
2. https://core23.de/blog/2015/10/15/ssh-durch-openssh-auf-dem-qnap-nas-ersetzen
3. https://forum.qnap.com/viewtopic.php?t=103416
4. https://www.mittwald.de/blog/mittwald/howtos/ssh-key-erstellen