carnap
Goto Top

Batchprogrammierung (Windows) - Rückgabewerte von GPG abfangen

Meine ersten Batchprogramme funktionieren zwar, aber gerade mal eben so ...

Ich habe mir zwei Skripts gebastelt, um meine Daten sicher auf einem USB-Stick herumtragen zu können. Skript 1 macht aus dem Ordner "protected" zuerst eine TAR-Datei und verschlüsselt diese sodann mit GPG die Datei "protected.tar.gpg" und löscht am Schluss den ursprünglichen Ordner.

Skript 2 machts umgekehrt: Entschlüsseln, entpacken und dann den Ordner an den ursprünglichen Ort kopieren.

Skript 1:
M: 
tar -c -f M:/protected.tar M:/data/protected
if errorlevel 0 echo Tar-File erfolgreich erzeugt.
else echo Erzeugung des TAR-Files fehlgeschlagen.
rd M:\data\protected /s /q 
gpg --symmetric protected.tar
if errorlevel 0 echo Tar-File erfolgreich verschlüsselt.
del protected.tar
echo Der Ordner ist nun verchluesselt.
pause

Skript 2:
gpg --decrypt --output protected.tar protected.tar.gpg
tar -xvf protected.tar
xcopy M:\protected M:\data /k /r /e /i /s /c /h
del protected.tar
del protected.tar.gpg
echo Sie koennen nun arbeiten.
pause

Was ich in Skript 1 will: Nur wenn die Archivierung des Ordners erfolgreich war, soll der Ordner gelöscht werden. War die Archivierung nicht erfolgreich, dann soll ausgegeben werden: "Bei der Erzeugung des Tar-Files ist ein Fehler aufgetreten. Der Ordner wird nicht gelöscht."
Und nur wenn der Verschlüsselungsvorgang erfolgreich war, soll das Tar-File gelöscht werden. War die Verschlüsselung nicht erfolgreich, dann sollte ausgegeben werden: "Verschlüsselung nicht erfolgreich. Das Tar-File wird nicht gelöscht."

Analog möchte ich einen solchen Sicherheitsmechanismus auch in Skript 2.

Wie gehe ich das am besten an?

Carnap

Content-Key: 101893

Url: https://administrator.de/contentid/101893

Ausgedruckt am: 30.03.2024 um 07:03 Uhr

Mitglied: bastla
bastla 15.11.2008 um 10:14:04 Uhr
Goto Top
Hallo Carnap!

Etwa so:
M: 
tar -c -f M:/protected.tar M:/data/protected
if errorlevel 1 (
    echo Erzeugung des TAR-Files fehlgeschlagen.
    goto :Ende
) else (
    echo Tar-File erfolgreich erzeugt.
    rd M:\data\protected /s /q
)

gpg --symmetric protected.tar
if errorlevel 1 (
    echo Verschluesselung nicht erfolgreich.
) else (
    echo Tar-File erfolgreich verschlüsselt.
    del protected.tar
    echo Der Ordner ist nun verchluesselt.
)

:Ende
pause
Mit "if errorlevel" erfolgt die Überprüfung immer nach "größer/gleich", sodass "if errorlevel 0" immer "true" ergibt - daher die Änderung auf "if errorlevel 1" ...

Grüße
bastla
Mitglied: Ren
Ren 16.11.2008 um 14:22:38 Uhr
Goto Top
Zitat von @Carnap:
Ich habe mir zwei Skripts gebastelt, um meine Daten sicher auf einem
USB-Stick herumtragen zu können.
Hm, vom Ansatz her würde ich ein dickes Fragezeichen hinter das sicher machen. Wenn ich den Quellcode richtig überflogen habe, dann packst du das Verzeichnis, löscht das dann mit rd, verschlüsselst das Archiv, und löscht es dann mit del. Meine Frage: Warum verschlüsselst du die Datei, wenn du die Ausgangsdaten nicht sicher löscht. Wenn jemand deinen Stick klaut, dann kann er recht einfach die gelöschten Dateien wiederherstellen. So gelangt er an die Dateien, ohne deine Verschlüsselung angreifen zu müssen.
Oder überschreibst du den leeren Platz auf dem Stick dann noch mit Zufallsmüll, dann hättest du das Problem natürlich gelöst.
Alternativ würde ich dir empfehlen, del und rd durch andere Programme zu ersetzen. Ich meine mal ein Programm names "ncrypt" oder so gesehen zu haben, was das machen kann.
Soll das ganze nur mit batch gehen, kann dir hier im Forum sicher weitergeholfen werden! Eine Batch, die zwar für paranoide wie mich sicher auch nicht zufriedenstellend ist, die ich aber mal für so ein Problem genutzt habe:
@echo off
setlocal
if exist "%~1" call :secDelete "%~1" & goto :end  
echo Die Datei "%~1" konnte nicht gefunden werden. 1>&2  
::Datei nicht gefunden, beendet mit Errorcode 1
exit /b 1
goto :end

:secDelete
set size=%~z1
echo Die Datei ist %size% groß.
::Die "Zufallszahlen" werden 1817 byte groß werden... 
set /a rounds=%size%/1817
set /a rounds=%rounds%+1
echo Die Datei "%~1" wird jetzt sicher gelöscht...  
echo Daten zum  überschreiben werden ausgewürfelt...
call :makeRandomData
echo. >"%~1"  
:rounds
echo rounds: %rounds%
if %rounds% LSS 1 del "%~1" & goto :eof  
set /a rounds=%rounds%-1
goto :rounds

:makeRandomData
::bauen wir uns etwas Müll zusammen, den wir dann ýber die Datei schreiben
set /a loop += 1
if 2000 LSS %loop% set loop= & goto :eof
call :getRandom
set müll=%müll%%rand%
goto :makeRandomData

:getRandom
set /a rand=%random%
::Stellt sicher, dass dir Random nicht zu kurz sind
if %rand% LSS 10000 goto :getRandom
goto :eof

:end
endlocal
::kein Fehler aufgetreten, beendet mit Errorcode 0
exit /b 0
Die Batch ist eigentlich uralt, ich habe gerade aber mal die größten Schnitzer, die mir aufgefallen sind, herausgenommen. Für Kritik bin ich offen, wenn sich jemand mit dem Thema "Dateien sicher löschen" auskennt, darf er mir gerne sagen, was er davon hält.
Mitglied: Carnap
Carnap 16.11.2008 um 16:40:18 Uhr
Goto Top
Hallo ren, hallo bastla,

besten Dank euch beiden für die Code-Vorschläge. Sieht ja sehr gut aus.

bastla: ich werde das ausprobieren, sobald ich wieder zu Hause bin.

ren: Du hast Recht, mir ist es einmal um ein funktionierendes Skript gegangen. Das mit dem Löschen von Dateien auf dem Stick ist sowieso ein Problem, siehe:
http://en.wikipedia.org/wiki/Wear_levelling
http://de.wikipedia.org/wiki/Solid_State_Drive
www.corsair.com/_faq/FAQ_flash_drive_wear_leveling.pdf

Ich experimentiere gerade mit cipher.exe. Das Programm überschreibt leeren Platz auf dem Stick:
http://blog.danielhahn.eu/2008/sicheres-loeschen-mit-windows-bordmittel ...

Mir ist auch einmal eine Idee untergekommen: Die zu löschende Datei vorher öffnen, Inhalt löschen und dann mit lauter Nullen beschreiben, abspeichern und erst dann löschen.
So steht in der datei nichts Relevantes drinnen, wenn sie wirklich restauriert werden können sollte.

Mein Problem wird aber die Performance des Ganzen sein. Aber darüber zerbreche ich mir derzeit noch nicht den Kopf. Ich will etwas lernen dabei.

lg Carnap
Mitglied: Ren
Ren 17.11.2008 um 11:48:03 Uhr
Goto Top
genau diesen Ansatz verfolgt meine Batch. Sie überschreibt die Datei mit Zufallsdaten. Ob das aber auf einem Flash-Speicher funktioniert, weiß ich nicht. Es wurde für Festplatten im klassischem Sinn "entwickelt".
Ich habe es gerade mal auf einer SD-Karte versucht. Ich habe einen Datei mit del gelöscht, und eine mit meiner Batch. Das Programm Undelete+ konnte die mit del gelöschte Datei wiederherstellen, die mit meiner Batch gelöschte Datei nicht. Sie scheint also schon mal besser zu sein, als sich gar keine Gedanken drüber zu machen.