{"id":2575,"date":"2020-08-17T07:00:00","date_gmt":"2020-08-17T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=2575"},"modified":"2020-08-11T10:04:16","modified_gmt":"2020-08-11T08:04:16","slug":"tdps-service-service-unit-fuer-den-teamdrive-personal-server","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/tdps-service-service-unit-fuer-den-teamdrive-personal-server\/","title":{"rendered":"tdps.service &#8212; Service-Unit f\u00fcr den TeamDrive Personal Server"},"content":{"rendered":"\n<p>Kaum eine Software verwende ich so lange wie <a rel=\"noreferrer noopener\" href=\"https:\/\/teamdrive.com\" target=\"_blank\">TeamDrive<\/a>. Die ersten Artikel dazu in diesem Blog stammen bereits aus dem Jahr 2011 <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/dateien-auf-mehreren-geraten-synchron-halten\/\">[0]<\/a>, <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/mit-teamdrive-daten-sicher-austauschen-und-synchronisieren\/\">[1]<\/a>.<\/p>\n\n\n\n<p>Nachdem ich den <a rel=\"noreferrer noopener\" href=\"https:\/\/teamdrive.com\/komponenten\/#personal\" target=\"_blank\">TeamDrive Personal Server<\/a> schon auf einem <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/td3-server-installation-auf-nas\/\">NAS installiert<\/a> und als <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/teamdrive-personal-server-als-dienst-konfigurieren\/\">Dienst konfiguriert<\/a> habe, dokumentiere ich in diesem Artikel die Erstellung einer <a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.ubuntuusers.de\/systemd\/Service_Units\/\" target=\"_blank\">Systemd-Service-Unit<\/a>. Dazu sei gesagt, dass ich kein Experte f\u00fcr Systemd-Units bin. Tats\u00e4chlich kenne ich mich nichtmal besonders gut damit aus. Folgende L\u00f6sung funktioniert auf meinem Server. Anregungen zur Verbesserung der Service-Unit nehme ich gern in den Kommentaren entgegen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation des TeamDrive Personal Server<\/h2>\n\n\n\n<p>Zuerst muss der TeamDrive Personal Server <a rel=\"noreferrer noopener\" href=\"https:\/\/teamdrive.com\/download\/\" target=\"_blank\">heruntergeladen<\/a> und installiert werden. Dabei hilft das dazugeh\u00f6rige <a rel=\"noreferrer noopener\" href=\"https:\/\/www.teamdrive.com\/wp-content\/uploads\/2015\/02\/TeamDrive-Manual-Personal-Server-de.pdf\" target=\"_blank\">Handbuch<\/a>. Auch wenn dieses schon einige Jahre auf dem Buckel hat, sind die enthaltenen Informationen weiterhin aktuell.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/td3-server-installation-auf-nas\/\">Da die Installation hier im Blog bereits einmal beschrieben wurde,<\/a> gehe ich hier im Detail nicht weiter darauf ein. Im vorliegenden Fall wurde die Software im Verzeichnis <em>\/opt\/tdps<\/em> installiert. Dar\u00fcber hinaus wurde ein Benutzer <em>tdps<\/em> erstellt, welchem das Verzeichnis <em>\/opt\/tdps<\/em> und die darin enthaltenen Dateien geh\u00f6ren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Systemd-Service-Unit tdps.service<\/h2>\n\n\n\n<p>Ich habe den TeamDrive Personal Server (TDPS) auf einem Debian 10 System installiert. Um diesen wie alle \u00fcbrigen Dienste mit dem Programm <a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.ubuntuusers.de\/systemd\/systemctl\/\" target=\"_blank\">systemctl<\/a> verwalten zu k\u00f6nnen, habe ich die Datei <em>\/etc\/systemd\/system\/tdps.service<\/em> mit folgendem Inhalt erstellt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=\"TeamDrive Personal Server\"\nAfter=network.target\n\n&#91;Service]\nUser=tdps\nPIDFile=\/opt\/tdps\/tdpsd.pid\nExecStart=\/opt\/tdps\/tdpsd -c \/opt\/tdps\/tdps.config -m \/opt\/tdps\/mime.types -w \/opt\/tdps\nExecStop=\/opt\/tdps\/stop-tdps -p \/opt\/tdps\/tdpsd.pid\nKillMode=process\nPrivateTmp=yes\nProtectHome=yes\nProtectSystem=full\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p>Im Abschnitt <code>[Unit]<\/code> findet sich eine kurze Beschreibung der Service-Unit. Die Option <code>After=network.target<\/code> gibt an, dass diese Unit erst gestartet werden soll, wenn das Netzwerk zur Verf\u00fcgung steht. Dies ist Voraussetzung, um den Dienst \u00fcber das Netzwerk nutzen zu k\u00f6nnen.<\/p>\n\n\n\n<p>Die Zeile im letzten Abschnitt <code>[Install]<\/code> definiert, dass diese Unit Bestandteil des <code>multi-user.target<\/code> ist und mit diesem geladen wird.<\/p>\n\n\n\n<p>Der Abschnitt <code>[Service]<\/code> definiert die f\u00fcr den Dienst relevanten Parameter. Die gew\u00e4hlten Optionen werde ich im Folgenden erl\u00e4utern.<\/p>\n\n\n\n<p><code>User=<\/code> gibt den Namen des Benutzers an, mit dessen Rechten der Dienst ausgef\u00fchrt werden soll. In diesem Fall wird der extra f\u00fcr diesen Zweck erstellte User <em>tdps<\/em> verwendet.<\/p>\n\n\n\n<p><code>PIDFile=<\/code> gibt den Pfad an, wo der Dienst seine PID speichert. Der Service-Manager liest die PID des Hauptprozess aus dieser Datei, nachdem der Service gestartet wurde.<\/p>\n\n\n\n<p><code>ExecStart=<\/code> gibt das Kommando mit allen notwendigen Argumenten an, um den Dienst zu starten. Ich habe hier ein wenig mit verschiedenen Aufrufen experimentiert. Dabei habe ich verschiedene M\u00f6glichkeiten gefunden, den Dienst erfolgreich zu starten. Worin die Unterschiede im Aufruf genau bestehen, kann ich leider nicht sagen. Am Ende habe ich mich f\u00fcr obige Kommandozeile entschieden, die ich im <a rel=\"noreferrer noopener\" href=\"https:\/\/forum.teamdrive.net\/viewtopic.php?f=18&amp;t=2892\" target=\"_blank\">TeamDrive-Forum gefunden habe.<\/a> Aus diesem Foren-Beitrag habe ich auch Stumpf die Option <code>KillMode=process<\/code> \u00fcbernommen. Zur Option selbst kann ich (noch) nicht viel sagen. Dies \u00e4nderst sich vielleicht noch, da ich mich noch etwas damit besch\u00e4ftigen m\u00f6chte.<\/p>\n\n\n\n<p>Mit <code>ExecStop=<\/code> gibt man entsprechend an, wie der Dienst zu stoppen ist. Auch hier stammt die Kommandozeile aus oben verlinktem Foren-Thread.<\/p>\n\n\n\n<p>Die n\u00e4chsten drei Optionen <code><code>PrivateTmp=<\/code><\/code>, <code>ProtectHome=<\/code> und <code>ProtectSystem=<\/code> dienen dazu den Dienst zu h\u00e4rten. Durch <code>PrivateTmp=yes<\/code> erh\u00e4lt der gestartete Prozess einen eigenen Dateisystem-Namespace f\u00fcr <em>\/tmp<\/em> und <em>\/var\/tmp<\/em>. So kann der Prozess nicht auf die Dateien anderer Prozesse und Benutzer in den normalen Verzeichnissen <em>\/tmp<\/em> und <em>\/var\/tmp<\/em> zugreifen. Mit <code>ProtectHome=yes<\/code>wird der Zugriff des Dienstes auf die Verzeichnisse <em>\/home<\/em>, <em>\/root<\/em> und <em>\/run\/user<\/em> verhindert. <code>ProtectSystem=full<\/code> sorgt daf\u00fcr, dass die Verzeichnisse <em>\/boot<\/em>, <em>\/etc<\/em> und <em>\/usr<\/em> im Nur-Lese-Modus f\u00fcr den Prozess zur Verf\u00fcgung stehen. Damit ist sichergestellt, dass der von dieser Unit gestartete Prozess keine Dateien innerhalb dieser Verzeichnisse ver\u00e4ndern kann.<\/p>\n\n\n\n<p>Die drei im vorhergehenden Abschnitt genannten Optionen stellen einen zus\u00e4tzlichen Schutz dar. Zwar darf der Benutzer <em>tdps<\/em> schon aufgrund der Datei- und Verzeichnisberechtigungen nicht in den genannten Verzeichnissen schreiben und Dateien ver\u00e4ndern bzw. diese \u00fcberhaupt lesen, doch bieten diese Optionen einen zus\u00e4tzlichen Schutz und greifen auch noch, wenn jemand Schindluder mit den Berechtigungen getrieben hat. Daher halte ich es f\u00fcr sinnvoll diese Optionen wenn m\u00f6glich in allen Service-Units zu nutzen.<\/p>\n\n\n\n<p>Neben den drei hier vorgestellten Optionen gibt es noch einige weitere, welche im englischsprachigen Artikel <a href=\"https:\/\/www.redhat.com\/sysadmin\/mastering-systemd\">&#8222;Mastering systemd: Securing and sandboxing applications and services&#8220;<\/a> nachgelesen werden k\u00f6nnen. Ich finde diese so sinnvoll, dass ich mich ehrlich gesagt frage, warum die genannten Einstellungen nicht der Standard sind und man diese editieren muss, wenn man entsprechende Zugriffe explizit erlauben m\u00f6chte.<\/p>\n\n\n\n<p>Damit ist alles getan und dokumentiert. Der TDPS l\u00e4sst sich mit oben beschriebener Service-Unit starten und stoppen. Den Status abfragen kann man selbstverst\u00e4ndlich auch.<\/p>\n\n\n\n<p>Es bleibt ein kleiner Sch\u00f6nheitsfehler. Wird der Dienst mittels <code>sudo systemctl stop tdps.service<\/code> gestoppt, endet die Unit im Status &#8222;failed&#8220;. Warum das so ist, habe ich noch nicht herausgefunden. Ich vermute, es h\u00e4ngt damit zusammen, dass der Dienst mittels SIGTERM beendet wird. Bin mir an dieser Stelle jedoch nicht sicher. Falls von euch jemand eine Idee dazu hat, freue ich mich \u00fcber euren Kommentar.<\/p>\n\n\n\n<p>Wie schreibt ihr eure Service-Units? Welche Optionen sollten eurer Meinung nach in keiner Unit fehlen? Wenn ihr m\u00f6gt, lasst uns gerne in den Kommentaren dar\u00fcber diskutieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c4ltere Artikel zu TeamDrive in diesem Blog<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/dateien-auf-mehreren-geraten-synchron-halten\/\">Dateien auf mehreren Ger\u00e4ten synchron halten<\/a><\/li><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/mit-teamdrive-daten-sicher-austauschen-und-synchronisieren\/\">Mit TeamDrive Daten sicher austauschen und synchronisieren<\/a><\/li><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/studie-sicherheitsmangel-bei-cloud-speicherdiensten\/\">Studie \u2013 Sicherheitsm\u00e4ngel bei Cloud-Speicherdiensten<\/a><\/li><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/td3-server-installation-auf-nas\/\">TeamDrive 3 Server auf NAS installieren<\/a><\/li><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/teamdrive-personal-server-als-dienst-konfigurieren\/\">TeamDrive Personal Server als Dienst konfigurieren<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Kaum eine Software verwende ich so lange wie TeamDrive. Die ersten Artikel dazu in diesem Blog stammen bereits aus dem Jahr 2011 [0], [1]. Nachdem ich den TeamDrive Personal Server schon auf einem NAS installiert und als Dienst konfiguriert habe, dokumentiere ich in diesem Artikel die Erstellung einer Systemd-Service-Unit. Dazu sei gesagt, dass ich kein<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/tdps-service-service-unit-fuer-den-teamdrive-personal-server\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[430,305,594,593,595,44],"class_list":["post-2575","post","type-post","status-publish","format-standard","hentry","category-linux","tag-osbn","tag-planet","tag-service-unit","tag-systemd-service","tag-tdps-service","tag-teamdrive"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2575"}],"version-history":[{"count":7,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2575\/revisions"}],"predecessor-version":[{"id":2585,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2575\/revisions\/2585"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}