Posts by RomanG

    Ich hab mir den neuen Stand jetzt nochmal angesehen. Es ist einiges besser geworden, keine Frage. Aber beim Thema Sicherheit bist du damit ehrlich gesagt noch lange nicht durch. Nach dem, was ich mir jetzt so angesehen habe, hast du noch einiges vor dir.

    Gerade bei Backup/ Restore, Dateipfaden und ein paar Sachen mit Root-Rechten sind immer noch Punkte drin, die ich so auf keinen Fall auf einem NAS haben will. Teilweise geht es da auch um Datenverlust oder darum, dass Fehler am Ende trotzdem als Erfolg behandelt werden in deinem Code.

    Ich werde dir jetzt aber nicht jedes einzelne Problem komplett auf dem Silbertablett servieren und direkt die fertige Lösung dazuschreiben. Ich helfe dir gerne mit Hinweisen, aber ich bin nicht dein kostenloses Sicherheitsaudit.

    Einen richtig dicken Brummer gebe ich dir aber noch mit auf den Weg: Schau dir mal deinen Disk-Restore vom NAS genauer an. Gerade den Pfad mit gzip | dd. Da kannst du dir im Fehlerfall eine Platte teilweise überschreiben und die App meldet dir am Ende trotzdem noch sinngemäß „Restore fertig“. Das ist für mich bei einem NAS-Admin-Tool schon eine ziemlich krasse Nummer.

    Wie und warum das passiert, darfst du bzw. deine KI jetzt aber selbst auseinandernehmen. ;)

    Vor allem wenn du daraus noch eine PRO-Version (Paypal Donation) mit Lizenzmodell machst, wie ich gesehen habe, finde ich schon, dass du die Sicherheit deines eigenen Codes auch selbst vernünftig prüfen musst. Nur gucken ob die Funktion läuft reicht halt einfach nicht bei sowas aus.

    Dazu gehören eben auch Fehlerfälle, manipulierte Eingaben, Root-Rechte, Shell-Befehle, Backup/Restore usw. und nicht nur „Button gedrückt, geht, passt“. xD

    Ein paar konkrete Sachen werde ich dir noch nennen, aber den kompletten Code musst du bzw. deine KI schon selbst einmal richtig auseinandernehmen. Sonst sitzen wir in zwei Tagen wieder da und finden die nächste Baustelle. ;)

    Also hau nicht ein Release nach dem anderen raus, sondern geh erst mal alles in Ruhe durch.

    Ja genau da liegt für mich ehrlich gesagt das Problem. Es geht dabei gar nicht darum, dass deine KI irgendwann Skynet startet, die Menschheit auslöscht oder absichtlich irgendwas Böses in deinen Code einbaut. xD
    Dafür reicht ein fehlerhafter oder unsicherer Code vollkommen aus und davon habe ich in deinem Projekt mittlerweile leider genug gefunden.

    Wenn du deine KI sowieso für die Entwicklung nutzt, dann kannst und musst du sie meiner Meinung nach auch dafür nutzen, ihren eigenen Code nochmal auf Sicherheitsprobleme, unsichere Standardeinstellungen und so Sachen wie deine READMEs zu prüfen.

    Natürlich ersetzt das keine richtige Sicherheitsprüfung. Aber es ist schon mal wesentlich besser, als den Code einfach zu übernehmen, kurz zu gucken ob die Funktion tut was sie soll und ihn danach zu veröffentlichen. Denn genau da liegt für mich der entscheidende Unterschied: Nur weil eine Funktion funktioniert, heißt das noch lange nicht, dass sie sicher ist. Das habe ich dir jetzt ja leider schon mehrfach demonstriert.

    Ich habe mir deinen aktuellen Stand inzwischen etwas genauer angesehen und da sind immer noch ein paar Sachen drin, die ich bei einem Tool mit SSH- und Root Rechten schon ziemlich riskant finde.

    Die größten Baustellen sind:

    • Bei verschiedenen Skript-Funktionen werden Dateinamen weiterhin direkt in Shell-Befehle eingebaut. Teilweise laufen diese Befehle anschließend sogar als root.
    • Bei den geplanten Backups kann dein tar mit Fehlern durchlaufen und das Archiv wird trotzdem weiter als vollständiges Backup behandelt. Danach werden ältere Backups automatisch gelöscht ohne Verifizierung. Damit hätte man dann im ungünstigsten Fall ein kaputtes oder unvollständiges Backup. Das finde ich bei einer Backup-Funktion schon ziemlich sportlich.
    • Die geplanten Backup-Jobs werden aus einer JSON-Datei wieder zu Root-Cronjobs. Die Werte werden im aktuellen Stand nicht überall geprüft, bevor sie in /etc/cron.d landen.
    • Bei Uploads hast du noch ein chown -R auf Zielverzeichnisse. Existiert der Ordner oder eine UGOS Freigabe schon, kannst du damit die Besitzer eines kompletten vorhandenen Verzeichnisbaums verändern.
    • Bei Docker gibt es Funktionen, die Mountpfade nehmen und darauf rekursiv chmod 777 ausführen. Bei deinem Tool würde ich sowas wirklich nur machen, wenn es wirklich erforderlich ist.
    • Dein Schutz- bzw. Vollzugriffsmodus ist standardmäßig freigeschaltet. Im Code steht sogar danger_functions_unlocked = True. Bei einem Tool, das Root Cron schreiben, Snapshots löschen, Systemkonfiguration verändern und mit dd Datenträger beschreiben oder löschen kann, würde ich das ehrlich gesagt genau anders herum machen: erstmal alles zu und der User muss die gefährlichen Funktionen bewusst selbst freischalten.
    • Auch deine automatische Update-Funktion würde ich nochmal überarbeiten. Die SHA-256-Prüfung ist auf jeden Fall besser als vorher, aber Installer und Prüfsumme kommen beide aus demselben GitHub-Release. Falls dein GitHub-Account bzw. dein Veröffentlichungsprozess irgendwann kompromittiert wird, kann jemand einen manipulierten Installer samt passender Prüfsumme veröffentlichen. Deine App sagt dann sinngemäß „Hash stimmt“ und startet anschließend einen nicht signierten Installer, der Administratorrechte verlangt und somit die Nutzer gefährdet.

    Und das sind jetzt wirklich nur die größeren Sachen.

    Was ich dir eigentlich damit sagen will: Du musst als privater Entwickler selbstverständlich kein komplettes Sicherheitsteam beschäftigen, aber du kannst dir mit ziemlich wenig Aufwand schon sehr viel Arbeit abnehmen.

    Änderungen nur noch über Pull Requests, automatische Tests vor dem Zusammenführen der Änderungen, CodeQL oder ähnliche Prüfungen, regelmäßige Prüfung der verwendeten Abhängigkeiten, Prüfung auf versehentlich veröffentlichte Zugangsdaten und vor allem Tests für alles, was Root-Rechte, Shell-Befehle, Backup & Restore oder Benutzereingaben verarbeitet. Das geht alles super per Github und deine KI kann dich hier sicherlich beraten. Wenn du sowieso KI für praktisch die komplette Entwicklung nutzt, dann lass genau diese KI vor jedem Release nochmal ihren eigenen Mist auseinandernehmen.

    Die Geschichte mit dem "öffentlich" Ordner ist für mich eigentlich das perfekte Beispiel. Du hast selbst geschrieben, dass deine KI private und öffentliche Sachen durcheinandergebracht hat. Genau sowas muss dir vor einer Veröffentlichung auffallen und nicht erst, wenn irgendein User zufällig drüber stolpert.

    Und die Repo selbst würde ich ehrlich gesagt auch mal etwas aufräumen. HANDBOOK_EN.md, HANDBOOK_EN.pdf, HANDBUCH.md, HANDBUCH.pdf, HANDBUCH_STRUKTURIERT.md, Builder, Installer, Bilder und Anwendungscode alles im Hauptverzeichnis wirkt wie eins der Kinderzimmer meiner Kinder.

    Leg dir hier doch einfach Ordner an für docs, src, tests usw., das würde es wesentlich übersichtlicher machen.

    Dazu kommen weiterhin Ungereimtheiten in der Dokumentation. Deine README hat z.B. noch auf eine ältere Version verwiesen und im CHANGELOG finden sich Verweise auf Sachen, die im öffentlichen Repo überhaupt nicht vorhanden sind.

    Und bitte nicht falsch verstehen: Ich erwarte nicht von dir, dass du jede einzelne Codezeile auswendig kennst, aber wenn man ein Tool veröffentlicht das mit Root Rechten auf dem NAS anderer Leute arbeitet, kann die Lösung meiner Meinung nach nicht sein:

    „Ich verstehe nicht alles, was die KI schreibt und teste halt ob es funktioniert.“

    Du kannst nicht erst veröffentlichen und dann darauf hoffen, dass irgendwann jemand aus der Community deine Sicherheitsprüfung übernimmt.

    Am Ende spielst du mit der Sicherheit und den Daten der Benutzer deines Tools. Die Verantwortung für das, was veröffentlicht wird, liegt bei demjenigen, der auf Release drückt. Und das bist am Ende du und nicht deine KI.

    Ich finde dein Engagement für die Community wirklich super und auch die Idee hinter deinem Tool ist klasse, aber bei so weitreichenden Rechten auf einem NAS würde ich persönlich lieber fünf Funktionen weniger haben wollen und dafür wirklich verstehen, testen und absichern, was die vorhandenen Funktionen machen.

    Sicherheit geht bei sowas für mich einfach vor. Viele User installieren solche Tools blind, geben ihre NAS Zugangsdaten ein und denken „wird schon passen, was RUNLEVEL da gemacht hat“. Genau deshalb sollte bei einem Admin-Tool Sicherheit immer an erster Stelle stehen. ;)

    Naja genau das meinte ich eigentlich. Wenn deine KI private und öffentliche Sachen durcheinanderwirft und du selbst schreibst, dass du dir nicht alles durchlesen kannst, was die Kiste reinschreibt, dann ist das bei so einem Tool für mich halt schon ein Problem und sicherheitstechnisch schwierig ;)

    Beim Thema TLS geht es auch nicht darum, dass UGOS ein selbstsigniertes Zertifikat nutzt, deswegen muss man nicht die Verifizierung abschalten. Das eigentliche Problem ist verify_ssl=False. Die Verbindung kann damit zwar verschlüsselt sein, aber die Gegenstelle wird eben nicht geprüft und somit weißt du im Zweifel nicht sicher, mit wem du da gerade sprichst.

    Das ist ja nur ein Thema. Wenn ich mir später deinen Code weiter anschaue bin ich gespannt, was sich noch so auftut. Bei einem Tool, das per SSH und mit Root Rechten auf dem NAS arbeitet, finde ich sowas einfach schwierig, wenn du die verschiedenen Optionen im Code nicht verstehst oder prüfst.

    Ich würde da ehrlich gesagt lieber eine Funktion weniger einbauen und dafür wirklich verstehen und prüfen, was den der Code überhaupt macht.

    Nicht, dass du mich falsch verstehst: Ich finde es wirklich toll, dass du dich so für die Community einsetzt und so etwas in deiner Freizeit baust. Aber gerade bei so einem Tool musst du meiner Meinung nach auch wissen, was dein Code im Hintergrund macht. Wenn du das nicht weißt, wird es irgendwann schwierig und potentiell gefährlich für jeden, der das Tool nutzt.

    Ist wirklich nicht böse gemeint, aber Sicherheit geht bei sowas für mich einfach vor. Viele User installieren solche Tools einfach blind, auch weil sie davon ausgehen, dass das schon sicher sein wird. Genau deshalb finde ich auch, dass man hier bei so einem Tool lieber einmal mehr hinschauen sollte, als einmal zuwenig. ;)

    Immer wieder gerne :)
    Ich guck mir das später mal genauer an. Aber ich muss dich ehrlich mal fragen: Prüfst du eigentlich nach, was deine KI dort schreibt?

    Alleine in deiner README steht:

    Quote

    This file is the public release README (folder öffentlich/). The step-by-step guide below mirrors the private project's main README.md ...

    Den Ordner öffentlich gibt es in der GitHub-Repo überhaupt nicht. Das wirkt auf mich ehrlich gesagt so, als würdest du mit KI Arbeiten, ohne danach nochmals zu prüfen, was überhaupt gemacht wird. Gerade bei einem Tool mit SSH und Root-Zugriff finde ich das sehr gefährlich. Das ist nicht böse gemeint, damit können User unnötig gefährdet werden, die sich blind auf dieses Tool verlassen.

    Den Code habe ich auch nur kurz überflogen und dabei direkt noch weitere Sachen gesehen. Zum Beispiel steht in ugos_api_client.py weiterhin:

    verify_ssl: bool = False

    This image is exclusive to our members!
    Please log in or register for free to view graphics and attachments.

    Damit ist zumindest der TLS-Punkt nicht vollständig umgesetzt, sondern die Zertifikatsprüfung ist trotzdem ausgeschaltet. Den Rest schaue ich mir später an, wie bereits geschrieben. ;)

    Ich finde es wirklich toll, das du dich für die Community so einsetzt, aber eine Sache muss auch klar sein. Sicherheit geht hier einfach vor.

    Servus, kleiner Hinweis von mir, bevor hier noch mehr Leute die App mit SSH- und sudo-Rechten auf ihren NAS testen.

    Ich hatte im GitHub-Repo bereits einige aus meiner Sicht ziemlich kritische Sicherheitspunkte gemeldet. Unter anderem fehlende SSH-Host-Key-Prüfung, standardmäßig deaktivierte TLS-Verifikation, Auto-Update ohne zusätzliche Integritätsprüfung und die Speicherung von Zugangsdaten in einer JSON-Datei.

    Gerade bei einem Admin-Tool mit so weitreichenden Rechten finde ich das ehrlich gesagt nicht ganz unwichtig.

    Auf eine Antwort zu meinem GitHub-Issue warte ich übrigens immer noch. ;)

    Security: SSH Host-Key, TLS-Verifikation, Auto-Update und Credential-Speicherung · Issue #1 · runlevel1977-del/UgreenNASAdmin
    Hallo, ich habe mir das Projekt etwas genauer angesehen, weil mir beim Durchsehen der Repo ein paar Dinge aufgefallen sind. Dabei bin ich auf mehrere Punkte…
    github.com

    Mein aktuelles Setup besteht aus einem DXP 4800 Plus als Backup-NAS und einem DXP 8800 Plus als Haupt-NAS.

    Besonders wichtig fände ich:

    • eine E-Mail-Benachrichtigungsfunktion für den RAID- und HDD-Status, gern auch für Firmware- und App-Updates.
    • eine VM Backup & Restore Funktion
    • native Apps für Emby, Jellyfin, Plex
    • anheftbare Widgets
    • One klick Restore Funktion bei Gerätedefekt beim Austauschgerät
    • eine native IP Kamera Software

    Ja, so sehe ich das auch. Ich würde dir aber für die Zukunft ein Sicherungskonzept empfehlen.
    Gut, wenn du eine Datensicherung hast, dann passt es ja :) Aber bitte prüfe, dass die Daten wirklich auch lesbar sind und kein Kauderwelsch gespeichert wurde. 20GB jpg Datei usw ;)

    Wenn du weiter Hilfe brauchst, einfach melden. Persönlich würde ich dir zu Seagate Ironwolf raten, nachdem die Problematik mit WD RED bekannt ist.

    eineb Alles gut :) Ich würde nur erst einmal das Thema Datensicherung angehen. Notfalls machen wir das händisch per cp per ssh. Ihm hat es sein Raid zerlegt.
    Wenn er keine Datensicherung hat und jetzt am Raid herumspielt sind, könnten seine Daten weg sein.

    Deswegen ja auch die Frage, ob er eine Datensicherung hat. Wenn er keine hat, müsste man auf jeden Fall erst einmal das angehen. Das RAID reparieren ist nicht das Problem, aber wenn er keine Datensicherung hat, würde ich davon Abstand nehmen.

    Ich rate einfach mal ins Blaue. Das Dateisystem deiner externen Platte ist APFS/HFS+/FAT32 oder?
    Wie viel Platz ist auf deiner externen HDD? Wenn du mehr Speicher drauf sichern willst als frei ist wird das nichts. Sync & Backup kann nichts mit MAC Dateisystemen anfangen. Bitte hier ext4 wählen.

    Bei deinem Raid Rebuild ist einiges schiefgelaufen, wahrscheinlich weil du den SSD Cache nicht vorher deaktiviert hast.

    Das sieht man gut in deinem Screenshot:
    mdadm --detail /dev/md1 Mitglied “removed” und /dev/sdb2 hängt nur als “spare” (Ersatz, falls eine Platte ausfällt) drin. Dadurch bleibt der Pool in UGOS degraded.

    Was ich dir empfehlen würde:
    1. Datensicherung mit der externen HDD, die mit ext4 formatiert wurde am NAS oder exFAT, das kann auch dein MAC lesen. Hier müsstest du aber am MAC formatieren.
    2. Raid reparieren mit diesen Befehlen unter ssh als sudo:

    cat /proc/mdstat
    mdadm --detail /dev/md1

    # spare einmal sauber neu einhängen, damit er resync neu startet
    mdadm --manage /dev/md1 --remove /dev/sdb2
    mdadm --manage /dev/md1 --add /dev/sdb2
    Damit kannst du den Resyncfortschritt sehen.

    watch -n 5 cat /proc/mdstat