Benutzer-Werkzeuge

Webseiten-Werkzeuge


hades

Hades

Hades (Hard Disk Eraser) ist eine Software zum systematischen Beschreiben von Datenträgern. Hauptanwendungszweck ist das sichere Löschen von Daten von Festplatten. Der Name ist durch die Mythologie der griechischen Antike inspiriert, in der der Herrscher über die Unterwelt, sowie die Unterwelt selbst, Hades genannt wurden.

Architektur

Das Hades-Paket besteht aus zwei verschiedenen Programmen: hadesd und hades-client. hadesd ist ein Daemon, der mit hades-client gesteuert werden kann.

hadesd

hadesd ist ein Daemon, der in C++17 entwickelt wird. Bei der Entwicklung wird versucht, mit externen Abhängigkeiten sparsam umzugehen. Dennoch müssen folgende Programme und Bibliotheken installiert werden, um hadesd kompilieren zu können:

  • cmake
  • libconfig++-dev
  • libdbus-1-dev
  • libsystemd-dev

hadesd baut zwei Verbindungen über den DBus auf. Zum einen wird der UDisks2-Daemon über DBus angesprochen, um Informationen zu den verbundenen Festplatten zu gewinnen.

Zum anderen bietet hadesd selbst DBus-Interfaces an, um von Clients gesteuert werden zu können.

hades-client

Da die Steuerung von hadesd nicht wirklich zeitkritisch ist, wird hades-client in Python entwickelt.

Spezifikation der DBus-Schnittstellen

Sollte der Wunsch bestehen, Server in anderen Programmiersprachen zu entwickeln, sollte aus Kompatibilitätsgründen auf die folgende Spezifikation zurückgegriffen werden. Ein DBus-Server muss die im Folgenden angegebenen Interfaces und Methoden implementieren, um mit allen Clients kompatibel zu sein.

Mit einem [✓] werden Methoden und Signale gekennzeichnet, die bereits implementiert sind.

Interface org.computerwerk.Hades.DeviceManager

Der DeviceManager verwaltet alle Geräte, die beschrieben werden können. Konkret sind das alle angeschlossenen Massenspeicher, die nicht auf der Blacklist stehen. Einzelne Partitionen werden nicht aufgeführt, da Partitionstabellen sowieso überschrieben werden.

Signal: DeviceAdd ⮕ (String deviceid)

Signal: DeviceRemove ⮕ (String deviceid)

Signal: DeviceUpdate ⮕ (String deviceid, String action)

Wird ausgeführt, wenn ein Gerät hinzugefügt oder entfernt wird. Der Rückgabeparameter action nimmt einen der Werte „add“ oder „remove“ an.

[✓] ListDevices() ⮕ (String devicelist)

Gibt eine Liste aller Devices in Form einer JSON-Liste von JSON-Objekten zurück. Ein Objekt hat die Struktur:

{
    "id": "<ID>",
    "blockdevice": "<BLOCKDEVICE>"
}

Interface org.computerwerk.Hades.JobManager

Der JobManager verwaltet, wie der Name schon sagt, die Jobs. Job lässt sich in diesem Kontext mit „Auftrag“ übersetzen. Durch den Nutzer werden dem Hades-System Aufträge erteilt, die darin bestehen, Daten aus einer bestimmten Quelle (Source) auf ein bestimmtes Gerät (Device) zu schreiben.

[✓] ActiveJobs() ⮕ (Int32 active)

Gibt die Zahl laufender Jobs zurück.

[✓] AddJob(String source, String device) ⮕ (String job)

Fügt einen neuen Job hinzu; einen Auftrag, der darin besteht, aus der Quelle source auf ein Gerät device zu schreiben.

AddEraseJob(String device) ⮕ (String job)

Fügt einen neuen Auftrag hinzu, der eine Festplatte mit dem ATA-erase Kommando löscht. Dabei wird die Platte mit Nullen überschrieben.

AddSecureEraseJob(String device) ⮕ (String job)

Fügt einen neuen Auftrag hinzu, der eine Festplatte mit dem dafür vorgesehenen ATA-secure-erase Kommando löscht. Die Daten auf der Platte werden mit vom Hersteller definierten Mustern überschrieben. Je nach Implementierung auf dem Festplatten(/SSD)-Controller kann es sein, dass dieses Kommando durch eine Verschlüsselung der Platte mit einem zufälligen Schlüssel – der nach dem „Löschen“ verworfen wird – realisiert wird.

[✓] InactiveJobs() ⮕ (Int32 inactive)

Gibt, analog zu ActiveJobs, die Zahl inaktiver, d.h. pausierter oder abgeschlossener, Jobs zurück.

[✓] JobStatus(String id) ⮕ (String status)

Gibt den Status eines Jobs als String zurück.

[✓] ListJobs() ⮕ (String joblist)

Gibt eine Liste aller Jobs als JSON-Liste von JSON-Objekten zurück. Ein Objekt hat die Form

{
    "id": "<JOB ID>",
    "progress": "<JOB PROGRESS [%]>"
}

PauseJob(String jobid) ⮕ ()

Pausiert einen Auftrag.

RemoveJob(String jobid) ⮕ ()

Löscht einen Auftrag.

ResumeJob(String jobid) ⮕ ()

Nimmt einen pausierten Auftrag wieder auf.

Interface org.computerwerk.Hades.SourceManager

[✓] ListSources() ⮕ (String sourcelist)

Gibt eine Liste aller Quellobjekte als JSON-Liste zurück. Ein Objekt hat die Form

{
    "name": "<NAME>",
    "filename": "<FILENAME>"
}

Die Liste ist im Laufe des Programms stets konstant, sodass die Methode nur einmalig vom Client aufgerufen werden muss.

hades.txt · Zuletzt geändert: 2019/01/09 09:08 von henry.krumb