Ultimate Backup Ultimate Backup

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
(Dies ist die Weiterentwicklung des Projekts "rsync -Alternative dateibasierte Datensicherung".)

Ultimate Backup

Ultimate Backup bietet eine dateibasierte sowie ggf. versionierte, als auch ordnerverschlüsselte Datensicherung. Dabei kann die Datensicherung sowohl -von- als auch -auf- interne Volumes, sowie über extern angeschlossenen USB/SATA-Datenträgern an der Diskstation erfolgen. Steht eine SSH-Verbindung zu einer weiteren Diskstation oder einem anderen entfernten Server im LAN oder WAN zur Verfügung, so kann die Datensicherung auch hierüber erfolgen.

Hinweise zur Installation:

  • Ultimate Backup kann in der jeweils aktuellsten Version über die alternative Paketquelle - Community Package Hub - ([url]https://www.cphub.net/?p=umbackup[/URL]) heruntergeladen und im Anschluss über das DSM Paket-Zentrum manuell installiert werden.
  • Weiterhin kann Ultimate Backup auch direkt über das DSM Paket-Zentrum als Installationspaket, sowie für die Bereitstellung zukünftiger Updates zur Verfügung gestellt werden. Hierfür muß im Vorfeld https://www.cphub.net dem Paket-Zentrum als "alternative Paketquelle" hinzugefügt werden.
  • Wer, aus welchen Gründen auch immer, eine ältere Version von Ultimate Backup verwenden oder testen möchte, findet in diesem Thread die Versionen von 0.10.0 bis einschließlich 0.30.2 als Download. Versionen ab 0.30.2 werden nur auf Anfrage und ausdrücklichen Wunsch hin per E-Mail versendet.
  • Ab der Version 1.0.2 werden darüber hinaus keine weiteren Zusatzpakete (Init_3rdParty sowie PHP) für den Betrieb von Ultimate Backup mehr benötigt.

Hinweise zur Nutzung:

Ultimate Backup unterliegt der GNU GENERAL PUBLIC LICENCE Version 3 von 29. Juni 2007 und wird somit lizenzkostenfrei angeboten. Eine Haftung wird grundsätzlich ausgeschlossen. Hierzu ein Auszug aus der GPL3...

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/

Wir wünschen euch viel Freude mit diesem System und stehen immer für Fragen oder Problemen in diesem Thread zur Verfügung.

Tommes & PsychoHH



Ultimate Backup 0.10 - Release Notes vom 23.07.2016

- Projekt zu Ultimate Backup umbennant
- Flexible Source/Target Eingaben
- SSH wird nun darauf geprüft, ob die Verbindung auch akzeptiert wurde
- Es wird überprüft ob nicht die lokale IP eingegeben wurde
- Es gibt eine neue WOLIP Variable
- Full Restore Modus
- Rechte können direkt festgelegt werden
- Script Parameter "dry, debug und restore"
- SPK



Es gibt nun ein SPK für das "neue" Ultimate Backup von Tommes & PsychoHH

Release Notes vom 23.07.2016 - SPK


Systemvoraussetzungen: ab DSM 5.x
Zusätzliche Pakete erforderlich: Init_3rdparty, php (ab DSM 6)
Verwendete Sprachen: HTML, CSS, php, Bourne-Shell Script (bin/sh)
GUI created and designed by Tommes, inspired by PsychoHH



Nochmal als Anmerkung:

Auch wenn dieses Script intensiv auf einwandfreie Funktion hin getestet wurde, so kann eine Fehlfunktion und
demzufolge ein möglicher Datenverlust nicht ausgeschlossen werden. Aus diesem Grund solltet ihr das System erstmal mit
unwichtigen Testdaten auf Herz und Nieren prüfen und sich mit der Arbeitsweise des Scripts und dessen Funktionen vertraut machen
bevor ihr das ganze "produktiv" einsetzt. Ihr verwendet dieses Script auf eigene Gefahr.[/SIZE]
 

Anhänge

  • UltimateBackup_0_10.spk
    170 KB · Aufrufe: 554
Zuletzt bearbeitet von einem Moderator:

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Flexible Source/Target eingaben:

Angenommen ich habe auf meiner DS den gemeinsamen Ordner "homes" unter /volume1, dann kann ich die Ordner wie gewünscht angeben:

/homes
homes
volume1/homes
/volume1/homes

Da wir aber einen "Standard" vorgeben wollen, empfehlen wir /homes zu nutzen.
Es gibt jetzt aber keine Probleme mehr, falls man den Ordner mal anders schreibt.



WOLIP:

Meine entfernte DS (212j) will die Daten per FromSSH von der 415+ holen.
Als erstes wird geprüft ob die DS an ist und wenn nicht wird der WOL Befehl gesendet, wenn die MAC Adresse der entfernten DS eingetragen wurde.
Da dies aber bei mir nicht durch die VPN Verbindung geht, besteht jetzt die Möglichkeit eine IP Adresse von z.B. einem Pi oder Vu+ einzutragen.
So wird der WOL Befehl zum entfernten Gerät geschickt und dieses führt den WOL Befehl dann lokal aus.
Natürlich muss hierfür ein SSH Zugang eingerichtet sein.



Restore:

Wenn man alle Ordner vollständig auf eine DS zurückkopieren will,
muss man einfach nur einen Ordner "restore" beim Script ablegen und das Script ausführen.
Oder aber im SPK das Script mit restore ausführen, anderfalls kann man auch das Script mit dem Parameter restore ausführen.

Alle Daten landen im richtigen Ordner, dabei ist es egal auf welchem volumen die Ordner vorher waren.
Die einzige Bedingung ist, dass der gemeinsame Ordner vorher eingerichtet wurde.

Ihr wollt also alle Daten auf eine andere DS sichern, die DS komplett Neueinricht oder z.B. ein Raid einrichten.
Einfach das Backup durchführen und alle Daten sichern.
Dann die DS wie gewünscht einrichten und die gemeinsamen Ordner erstellen.

Wenn ihr das alte/neue Keyfile auf der externen Festplatte habt, werden die Ordner auch automatisch gemountet.

Der restore Ordner wird nach dem restore automatisch entfernt, sodass bei einem erneuten ausführen wieder ein Backup ausgeführt wird.

Der restore funktioniert auch bei ToSSH/FromSSH, wenn die SSH-Keys für beide Richtungen eingerichtet wurden.
So kann man ziemlich einfach alle Daten sichern und zurückspielen.



Script Parameter:

dry - Führt alles im Script durch bis auf den rsync Kopiervorgang also ein Testlauf
debug - Schreibt einige Zusatzinfos in das Logfile, falls es mal Probleme geben sollte
restore - führt einen Restore durch

Alle Parameter können beliebig kombiniert werden.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Vielleicht noch ein zwei Worte meinerseits zum Entwicklungsstand des SPK!

Gestern kam in einem anderen Thread bereits die Frage bzw. der Wunsch von geimist auf, eine visuelle Ordnerstruktur abzubilden um so die Auswahl von Sicherungsquellen und dem Ziel benutzerfreundlicher zu gestalten.

Aktuell sehe ich jedoch keine Möglichkeit etwas in der Art einheitlich umzusetzen, da wir neben internen Volumes und extern angeschlossen USB/SATA-Datenträgern auch externe Server ansprechen können und wollen, wobei wir uns hierbei nicht auf eine Diskstation beschränken. Wenn hier jemand einen Tipp hat oder gar einen Lösungsweg für diese Aufgabenstellung kennt, dann immer her damit. Bis dahin müssen wir uns leider auf die manuelle Eingabe der Quell- und Zielpfade beschränken.

Ein weiterer Punkt betrifft das Anlegen und wiederaufrufen bereits gespeicherter Datensicherungsaufgaben um evtl. nachträgliche Änderungen vorzunehmen. Hier möchte ich in Zukunft gerne eine Dateibasierte Datenbank einrichten um dies zu ermöglichen. Vielleicht hat hier aber auch jemand einen guten Tipp wie man sowas evtl. anders lösen könnte... z.B. indem man das angelegte RSync-Script einliest und man sich die Variablen in das Formular zurückholt... mit grep z.B. Ich bin da völlig offen für mögliche Vorschläge!

Ansonsten bleibt mir nur noch zu sagen, das ich im Leben nicht daran gedacht hätte überhaupt mal ein eigenes SPK aus dem Boden zu stampfen. Jedoch hat mich PsychoHH quasi freiwillig dazu gezwungen mich damit auseinanderzusetzen, da er meinen Ehrgeiz kennt und weiß wie man mich kriegt. Es hat auf jeden Fall wahnsinnig viel Spaß gemacht und es ist mir immer wieder eine Ehre dieses Projekt zusammen mit PsychoHH gestallten zu dürfen.

Wir brennen auf euer Feedback damit wir Ultimate Backup weiter verbessern können und um euch ein Backup-Tool an die Hand zu geben, welches durch seine Funktionsvielfalt anderen Systemen vielleicht einen Ticken überlegen ist.

Tommes
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Das mit der Ordnerstruktur wird schwierig, da ihr dazu ja irgendwie zugriff auf den externen Server braucht. Ggf könntet nach eingabe der logindaten und dem protokoll (eh immer ssh?) auf dem externen server das betreffende directory auslesen (ls bspw.).. Das ist aber sicherheitstechnisch heikel (v.a. bei deinem PHP Tommes - setz bitte wenigstens um alle $_POST und $_GET ein addslashes()!).

Das mit der Datenbank sollte einfach sein, wenn du die configs der einzelnen scripte gesammmelt abspeicherst und bspw im ini format ablegst - oder in jedem anderen maschinell gut lesbaren format.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Hey jugi, danke für dein Feedback

Ich denke auch, das es (wenn überhaupt) nur ein schwer lösbares Problem darstellt, auf einer soliden Basis die Baumstruktur entfernter Server abzubilden.

Mag sein, das ich nicht mehr "up to Date" bin, aber mir ist die Maskierung von $_POST ($_GET verwende ich garnicht) mittels addslashes() nur in Verbindung mit SQL geläufig um so zu verhindern das man bei einem select oder insert nicht durch ein unmaskiertes " und/oder ' Probleme bekommt. Daher die Frage an dich zurück: Siehst du im aktuellen Zustand meiner Programmierung ein Sicherheitsproblem? Falls ja, dann muß ich wohl nochmal in mich gehen und schauen, was ich tun kann um die Sicherheit zu erhöhen. Hier jedoch mit addslashes() zu arbeiten, war mir bisher nicht wirklich geläufig.

Ob ich überhaupt auf eine Datenbank zurückgreifen werde, weiß ich noch nicht. Ich würde mir eher das erstellte Script irgendwie per PHP einlesen und weiterverarbeiten, da ich nicht immer sicher sagen kann, wo sich ein abgespeichertes Script im Endeffekt real befindet. Sollte ich z.B. ein Script mit der Variablen volumeUSB1 in der Datenbank gespeichert haben, das Script in Wahrheit aber in diesem Moment auf volumeUSB2 liegt, hab ich ein Problem. Sicherlich lässt sich das anpassen, jedoch ist das nicht immer offensichtlich. Daher denke ich noch über mögliche Vorgehensweisen nach. Mal schau'n

Tommes
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Alle Daten, welche das Produkt eines Benutzers sind, darf man nicht blind vertrauen und müssen entsprechend ihrer Struktur zuvor überprüft und ggf. gefiltert werden. Es sind zwar keine Benutzerdaten oder Benutzereingaben, es handelt sich aber ebenfalls um für dein Script unbekannte Daten. Auf einem Server könnte z.B in einem Verzeichnis eine Datei test"123.txt liegen (kann leicht mit touch test\"12.txt erstellt werden).
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Hey QTip!

Danke für deine Erläuterungen, leider hat jugi ja nicht mehr auf meine Rückfrage geantwortet. Sicherlich habe ich den Sicherheitsaspekt bei den Formulareingaben bzw. das unschädlich machen von unsachgemäßen Benutzereingaben wohl nur oberflächlich betrachtet. Anderseits werden die meisten Eingaben auch nochmal durch das eigentlich RSync-Script gegengeprüft, weshalb ich hier jetzt nicht soooo das große Problem drin sehe. Aber recht habt ihr zwei natürlich, keine Frage.

Ich werde mich gleich mal daran machen, das Ganze ein wenig zu entschärfen und neben addslashes() vielleicht auch noch den ein oder anderen Wert auf andere Weise in die Schranken zu weisen. Bis dahin erstmal danke für euer Feedback.

Tommes
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Ich hielt meine Aussagen für eindeutig und nicht weiter Erklärungsbedürftig, aber extra für dich nochmal die Antwort auf deine Rückfrage: ja! :D
QTip hat die Erklärung ja bereits geliefert und ich hatte ja auch letztes mal bereits geschrieben, dass Globale Variablen (=Usereingaben) "nie, nie, niemals" ungeprüft weiterverarbeitet werden dürfen.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Ja. Ja. Okay, ich bin ja schon still.
Ich bin halt alt und vergesslich... deinen verlinkten Post hatte ich garnicht mehr auf dem Sender :cool:
Und ich bin auch dankbar für eure Tipps und Ratschläge und auch schon dabei diese umzusetzen. Jedoch bin ich wohl nicht Profi genug um alles auf Anhieb zu verstehen und richtig zu machen. Also habt bitte Rücksicht mit mir... es ist ja auch mein erstes SPK, was ich zusammengebaut habe und meine letzten aktiven Taten in Sachen php liegen schon ein paar Jährchen zurück.

Aber ich arbeite an mir.

Tommes
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Kein Problem, jeder darf Fehler machen - jeden ein mal ;)
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Ich brauch mal eure Hilfe!

Ich bin grade dabei das Eingabeformular komplett neu zu gestallten um die Benutzereingaben einmal auf Gültigkeit zu prüfen um diese danach "gefiltert" an das eigentliche RSync-Script zu übergeben. Ich komme zwar gut voran, jedoch bin ich eine absolute Niete in Sachen Reguläre Ausdrücke um die Gültigkeitsprüfung mittels preg_match() durchzuführen. Einige Regeln wie z.B. für die E-Mail Prüfung, Domain- sowie IP-Prüfung habe ich bereits gefunden und funktionieren auch. Was mir noch fehlt ist z.B. eine "Sinnvolle" Überprüfung der Port-s und der MAC-Adresse. Aktuell überprüfe ich die Ports z.B. so...

PHP:
        // Abweichender SSH-Port
			if (empty($_POST["sshport"])) {
			}
			else {
				$sshport = test_input($_POST["sshport"]);
				if (!preg_match("#^[0-9]{1,5}$#", $sshport) ) {
					$sshportError = "<label style=\"color: red;\">Ungültiger Port</label>";
				} 
			}

... wobei bei auf bis zu 5 Stellen begrenzt wird, aber nicht explizit bis Port 65536. Kann mir dazu vielleicht jemand den passenden Regulären Ausdruck zukommen lassen?

Ich bräuchte also für Ports und MAC-Adresse sinnvolle Prüfungen. Ebenso stell ich mal die Frage, wie genau ich Dateinamen sowie Pfadangaben validieren soll? Aktuell habe ich z.B. für Dateinamen...

PHP:
if (!preg_match("/^[a-zA-Z0-9-_+]*$/", $scriptname)) {

... vergeben. Macht das Sinn, oder sollte man das erweitern, bzw. verändern.

Vielleicht blöde und einfache Fragen für euch, für mich aber ziemlich knifflig.

Tommes
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Regex für MAC-Adresse: http://stackoverflow.com/questions/4260467/what-is-a-regular-expression-for-a-mac-address
Stackoverflow bin ich sehr oft am stöbern und für mich eine gute Quelle für Lösungen und Denkanstösse. Der mit einem grünen Haken versehenen Post, ist die akzeptierte Lösung vom Threadersteller. Musst du aber vermutlich noch an PHP anpassen.

Für Erstellung und Test benutze ich oft https://regex101.com/ , für mich einer der besten Online Regex Tester. (Anmeldung nicht notwendig)
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Alter, erst gar nicht und dann übertrieben :D KISS!

Email: check ob @ und . drin sind, dann passt das schon
Domain: string.string -> passt (ich sag nur ??.museum)
Port: $sshport = (int) $_POST["sshport"]; (wenn du willst danach noch $sshport < 65537)
Pfade: hängt von den anforderungen ab, beginnen die immer mit nem /? viel mehr kannst du da gar nicht prüfen, da theopraktisch ja auch sowas geht: /volume1/ordner/$f00.b@r ??
…you get it.


edit: das forum kriegts nicht hin, die ? sind ein Emoji :)
edit2: generell würde ich, wo möglich, auf regexen verzichten… zu viel hassle und die performance ist auch mies.
edit3: generell natürlich die unerlaubten zeichen rausfiltern (' " / \ usw), aber dafür gibts ja funktionen
 
Zuletzt bearbeitet:

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Ich wollte mir mal eure gute Arbeit ansehen und bewundern.

Bei der Installation von dem spk bekomme ich aber eine Meldung ich soll erst init_3rdparty 1,5 oder höher installieren.
In welcher Abhängigkeit steht das zu Ultimate Backup, wo bekomme ich das Paket her und was macht dieses Paket?
Fragen über Fragen....;).
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
@QTip
Danke für die Links, das sieht vielversprechend aus.

Alter, erst gar nicht und dann übertrieben :D KISS!
Naja, ich kann deinen Spruch ja nicht auf mir sitzen lassen...
...Das ist aber sicherheitstechnisch heikel (v.a. bei deinem PHP Tommes - setz bitte wenigstens um alle $_POST und $_GET ein addslashes()!).

Also hab ich mich hingesetz... überlegt... mich kurz mit PsychoHH ausgetauscht... eine Nacht drüber geschafen... und heute morgen dann angegriffen. Dabei kam mir erstmal die Idee mit der preg_match() Prüfung sowie einer kleinen Funktion um Benutzereingaben zu entschärfen. Wenn ich dann alle Benutzeingaben validiert habe, bin ich schon mal ein gutes Stück weiter. Dann noch die Übergabe ans Script mittels addslashes() und dann sollte es passen.

Tommes
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
@rednag

Init_3rdParty schafft die passende Umgebung um php basierte 3rd_Party Apps unter DSM ans laufen zu bekommen. Und da Ultimate Backup auf php basiert benötigst du dieses Paket. Finden kannst du es bei https://www.cphub.net/ bzw. kannst dir die Paketquelle von CPHUB im Paketzentrum einbinden um auch weitere 3rd_Party Apps von der Seite zu laden. Du mußt nur die Verstrauensstufe im Paketzentrum anpassen damit der DSM das Paket akzeptiert.

Tommes
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Hehe, ist auch alles gut und richtig so :) Lernprozess eben. Ich habs damals (vor 15 Jahren *sniff*) ähnlich gelernt wie du jetzt. Das wissen über guten und schlechten Code kommt dann (wenn überhaupt) erst (sehr viel) später. Ich will dir auf dem langen Weg nur ein paar Abkürzungen zeigen *hihi*


Und verzeih mir meinen manchmal(?) rauhen Ton, ich hab das alles noch in einer Zeit gelernt, in der der Frischling* getauft** wurde - meistens mein ichs eigentlich nur gut :eek:

* der jüngste im Team
** "Teammeeting" abends beim Chef mit 1 Buddel Hartalk - pro Nase. Und da wird dann gefälligste ausgetrunken!

…hach… gute alte Zeiten… heute wirste angepupt, wenn du jemanden falsch anschaust…
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Hallo @Thommes,

Danke für die Erklärung und den Link.
Ich mach mich dann mal an die Installation der Pakete.
Ich denke ich schaffe es die Woche mit einem Probedurchlauf. Falsch gewünscht kann ich gerne Feedback geben.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Ultimate Backup 0.10.1

Formularvalidierung hinzugefügt!
  • Plausibilitätsprüfung von E-Mail-, IP-, URL- und MAC-Adresse
  • Plausibilitätsprüfung von Ordner- und Script-Dateinamen
  • Plausibilitätsprüfung von numerischen Werten (z.B. Ports)
  • Fehlerauswertung und Rückmeldung verbessert.
  • Sicherheit bei der Weiterverarbeitung "globaler Variablen" verbessert
Zur Zeit muß die installierte Version 0.10 erst deinstalliert werden um die Version 0.10.1 installieren zu können. (Ich arbeite daran, das zu ändern)

@jugi und @QTip: Ich hoffe, ich konnte eure Erwartungen erfüllen (obwohl mein Programmierstil bestimmt noch ausbaufähig ist)


Tommes
 

Anhänge

  • UltimateBackup_0_10_1.spk
    170 KB · Aufrufe: 52


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat