philzip
Goto Top

KIX - Löschen von Dateien bei Anmeldung

Hallo zusammen,

wir haben folgendes Szenario:

Für den Zugriff auf eines unserer Systeme wird ein einzigartiges Zertifikat benötigt, welches lokal gespeichert ist.

Beim Anmelden wird das Zertifikat von einer Serverfreigabe nach C:\Users\username\ kopiert.

Soweit alles paletti.

Jetzt hatten wir aber den Fall, dass ein Mitarbeiter seinen Arbeitsplatz (oder viel mehr seinen PC) gewechselt hat und somit auch Zugriff auf das Zertifikat hat, das dem Mitarbeiter gehört, der vor ihm an dem PC angemeldet war.

Da alle Mitarbeiter lokale Admin-Rechte haben, ist es klar, dass sie in die lokalen Benutzerordner von Kollegen Einsicht haben.

Das können wir auch nicht ändern, da aus verschiedenen Gründen jeder Adminrechte braucht.

Nun war meine Idee, das Problem per Batch oder KIX zu lösen.

Meine Idee:

Bei Anmelden sollen alle lokal unter C:\users\ gespeicherten Zertifikate gelöscht werde - außer das Zertfikat des Benutzers, der sich gerade anmeldet.

Ist das überhaupt per KIX bzw. Batch möglich? Falls ja, wie? Ich bin leider total überfragt.

Danke im Voraus!

Gruß Philzip

Content-Key: 281705

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

Printed on: April 25, 2024 at 05:04 o'clock

Mitglied: 114757
114757 Sep 01, 2015 updated at 13:00:18 (UTC)
Goto Top
Moin,
Zitat von @Philzip:
Das können wir auch nicht ändern, da aus verschiedenen Gründen jeder Adminrechte braucht.
Heutzutage eigentlich nicht mehr nötig ... es gibt heutzutage genug Möglichkeiten sowas anders zu lösen. Sicherheitstechnisch ein Gau, denn ein Admin kann auch gelöschte Dateien wiederherstellen...
Nun war meine Idee, das Problem per Batch oder KIX zu lösen.

Meine Idee:

Bei Anmelden sollen alle lokal unter C:\users\ gespeicherten Zertifikate gelöscht werde - außer das Zertfikat des
Benutzers, der sich gerade anmeldet.

Ist das überhaupt per KIX bzw. Batch möglich? Falls ja, wie? Ich bin leider total überfragt.
Das wäre kein Problem wenn man wüsste welche Erweiterung deine Zertifikate haben (*.crt /*.cer/*.pfx/...), aber wieso gebt Ihr den Mitarbeitern nicht einen USB-Stick oder eine Smartcard worauf das persönlich Cert gespeichert ist, oder gleich im persönlichen Zertifikatsstore oder im AD ?? Das wäre wesentlich sinnvoller, denn solche Zertifikate gehören besonders geschützt und nicht im Dateisystem abgelegt !!

Gruß jodel32
Member: Philzip
Philzip Sep 01, 2015 at 13:03:46 (UTC)
Goto Top
Das wäre kein Problem wenn man wüsste welche Erweiterung deine Zertifikate haben (*.crt /*.cer/*.pfx/...), aber wieso
gebt Ihr den Mitarbeitern nicht einen USB-Stick oder eine Smartcard worauf das persönlich Cert gespeichert ist, oder gleich
im persönlichen Zertifikatsstore oder im AD ?? Das wäre wesentlich sinnvoller, denn solche Zertifikate gehören
besonders geschützt und nicht im Dateisystem abgelegt !!

Gruß jodel32

Angenommen ich will es so lösen - kannst du mir bei dem Code helfen? Bin leider völlig überfragt. Die Endungen sind bekannt -> .pfx

Gruß
Mitglied: 114757
114757 Sep 01, 2015 updated at 13:09:04 (UTC)
Goto Top
Kurzer Powershell-Schnippsel:
gci 'C:\Users\*.pfx' -Recurse -Force | ?{$_.DirectoryName -notlike "*$($env:USERNAME)*"} | remove-item -Force  
Gruß jodel32
Member: Philzip
Philzip Sep 01, 2015 at 13:12:21 (UTC)
Goto Top
Zitat von @114757:

Kurzer Powershell-Schnippsel:
> gci 'C:\Users\*.pfx' -Recurse -Force | ?{$_.DirectoryName -notlike "*$($env:USERNAME)*"} | remove-item -Force  
> 
Gruß jodel32

Ist das auch per Batch oder KIX realisierbar?
Mitglied: 114757
114757 Sep 01, 2015, updated at Sep 04, 2015 at 08:55:33 (UTC)
Goto Top
Zitat von @Philzip:
Ist das auch per Batch oder KIX realisierbar?
Ja.
@echo off
for /f "tokens=* delims=" %%a in ('dir /b /s /A-D "C:\Users\*.pfx" ^| findstr /i /v /c:"%userprofile%"') DO del "%%a"  
Member: Philzip
Philzip Sep 01, 2015 at 13:24:01 (UTC)
Goto Top
Zitat von @114757:

> Zitat von @Philzip:
> Ist das auch per Batch oder KIX realisierbar?
ja.

... und wie? face-smile

Ich hatte hier schon einen Ansatz, allerdings funktioniert so überhaupt nicht.

for /D %%a in (c:\users\*.*) do (
if EXIST %%a\SSHkey\*.ppk (
del %%a\SSHkey\*.ppk
)
if EXIST %%a\SSHkey\*.prv (
del %%a\SSHkey\*.prv
)
if EXIST %%a\SSHkey\*.pub (
del %%a\SSHkey\*.pub
)
)

Bin leider überhaupt kein Skript-Experte, habe mich da irgendwie "reingewurschtelt" :D
Mitglied: 114757
114757 Sep 01, 2015 updated at 13:26:09 (UTC)
Goto Top
s. mein letztes Kommentar.

mach jetzt Mittag
Member: Philzip
Philzip Sep 01, 2015 at 13:30:20 (UTC)
Goto Top
Zitat von @114757:

s. mein letztes Kommentar.

mach jetzt Mittag

Oh entschuldigung, ich habe den Code gar nicht gesehen.

Ich probiers mal damit und sag schonmal DANKE und Mahlzeit! face-smile
Member: Philzip
Philzip Sep 04, 2015 at 06:44:23 (UTC)
Goto Top
Zitat von @114757:

Zitat von @Philzip:
Ist das auch per Batch oder KIX realisierbar?
Ja.
> @echo off
> for /f "tokens=* delims=" %%a in ('dir /b /s /A-D "C:\Users\*.pfx" ^| findstr /iv "%userprofile%"') DO del "%%a"  
> 

Hallo jodel,

zunächst mal Danke, der Code funktioniert super. Ich hätte noch zwei Fragen:

1. Kannst du mir genau erklären, was hier passiert? Manches kann ich mir zusammenreimen, aber eben nicht alles face-smile
2. Wenn ich den Code in das Login-Skript einarbeite, erhalte ich, sofern sich seine .pfx-Datei unter C:\Users befindet, im CMD die Meldung "Datei nicht gefunden" (obwohl ein @echo off davor steht'). Kann man das irgendwie ausblenden?
Mitglied: 114757
114757 Sep 04, 2015 updated at 08:54:52 (UTC)
Goto Top
Also,
die for-Schleife durchläuft alle Zeilen der Ausgabe des folgenden Befehls:
dir /b /s /A-D "C:\Users\*.pfx" ^| findstr /i /v /c:"%userprofile%"  
Dieser macht nichts anderes als folgendes: Zuerst werden alle *.pfx Dateien aus allen Unterordnern (/s) von c:\Users ohne Ordner (/A-D) im einfachen Dateilisting-Modus von dir (/b) aufgelistet. Diese Ausgabe wird dann mit findstr gefiltert, und zwar wird dabei Groß- und Kleinschreibung ignoriert /i , mit /v wird das ganze umgedreht, also es werden alle Pfade gelistet bei denen nicht der aktuelle Userprofilpfad vorkommt. Das /c: besagt das der Suchstring als eine Einheit zu sehen ist, denn ohne diesen Schalter würde ein Leerzeichen zwei separate Suchstrings daraus machen.

Zu deinem Problem mit der Ausgabe "Datei nicht gefunden" das Habenichts vergessen zu unterdrücken hiermit solltest du dann klar kommen:
@echo off<br />
for /f "tokens=* delims=" %%a in ('dir /b /s /A-D "C:\Users\*.pfx" ^| findstr /i /v /c:"%userprofile%" 2^>nul') DO del "%%a" >nul 2>&1  
Member: Philzip
Philzip Sep 04, 2015 updated at 08:36:51 (UTC)
Goto Top
Zitat von @114757:

Also,
die for-Schleife durchläuft alle Zeilen der Ausgabe des folgenden Befehls:
> dir /b /s /A-D "C:\Users\*.pfx" ^| findstr /Ivc:"%userprofile%"  
> 
Dieser macht nichts anderes als folgendes: Zuerst werden alle *.pfx Dateien aus allen Unterordnern (/s) von c:\Users ohne Ordner (/A-D) im einfachen Dateilisting-Modus von dir (/b) aufgelistet. Diese Ausgabe wird dann mit findstr gefiltert, und zwar wird dabei Groß- und Kleinschreibung ignoriert /i , mit /v wird das ganze umgedreht, also es werden alle Pfade gelistet bei denen nicht der aktuelle Userprofilpfad vorkommt. Das /c: besagt das der Suchstring als eine Einheit zu sehen ist, denn ohne diesen Schalter würde ein Leerzeichen zwei separate Suchstrings daraus machen.

Zu deinem Problem mit der Ausgabe "Datei nicht gefunden" das Habenichts vergessen zu unterdrücken hiermit solltest du dann klar kommen:
> @echo off<br />
> for /f "tokens=* delims=" %%a in ('dir /b /s /A-D "C:\Users\*.pfx" ^| findstr /ivc:"%userprofile%" 2^>nul') DO del "%%a" >nul 2>&1  
> 


Dank dir! Hat leider nicht geklappt, habe es aber etwas abgewandelt, nun funktioniert es:

for /f "tokens=* delims=" %%a in ('dir /b /s /A-D "C:\Users\*.pfx" 2^>nul^| findstr /iv "%userprofile%" 2^>nul') DO del "%%a" >nul 2>&1
Mitglied: 114757
114757 Sep 04, 2015 updated at 08:54:02 (UTC)
Goto Top
Ah sorry das c muss hier separat stehen /c:
Klappt hier einwandfrei, siehe bitte die Kommandozeilenparameter für findstr:
http://ss64.com/nt/findstr.html
Dann musst du nicht trial&error betreiben.
Member: Philzip
Philzip Sep 04, 2015 at 08:57:47 (UTC)
Goto Top
Zitat von @114757:

Ah sorry das c muss hier separat stehen /c:
Klappt hier einwandfrei, siehe bitte die Kommandozeilenparameter für findstr:
http://ss64.com/nt/findstr.html
Dann musst du nicht trial&error betreiben.

Danke für alles face-smile
Mitglied: 114757
Solution 114757 Sep 04, 2015, updated at Sep 07, 2015 at 07:04:41 (UTC)
Goto Top
Zitat von @Philzip:
Danke für alles face-smile
Keine Ursache. Dann fehlt jetzt nur noch ein gelöst.