Seite 1 von 2
Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 09:12
von dige
Ist es unter Windows möglich, dass man auf ein bestimmtes Verzeichnis nur über ein spezielles Programm zugreifen kann?
Ich möchte darauf verschienden Nutzer zugreifen lassen, allerdings nicht mit dem Windows Explorer,
sondern mit einem eigenen Programm, dass die Zugriffsrechte intern regelt.
Das Verzeichnis darf auch nicht sichtbar oder zugreifbar werden, während das Programm läuft..
Habt Ihr eine Idee?
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 09:13
von RSBasic
Was ist das für ein geheimnisvolles Verzeichnis, das du erstellen und verstecken möchtest?
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 09:31
von dige
Ich möchte dort Daten (Bilder, Dokumente etc.) ablegen, die ich über eine Datenbank verwalte.
Und innerhalb der Datenbank möchte ich reglementieren könnten, wer auch welche Daten zugreifen darf.
Die Ressource, die ich mit dem Programm verbinde (Netzlaufwerk, TrueCrypt Container etc.), darf aber
nur über das Programm zugänglich sein und nicht automatisch nach dem Verbinen auch für den
Explorer etc..
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 09:39
von RSBasic
Du kannst beispielsweise einen neuen Benutzer anlegen, der mit einem Passwort geschützt ist und das Passwort kennt nur deine Anwendung.
Im Eigenschaftsfenster eines beliebigen Ordners kannst du unter "Sicherheit" festlegen, dass nur der von dir angelegte Benutzer Zugriff (Lese- und Schreibrechte) darauf hat.
Deine Anwendung müsste also mit Hilfe einer Windows-Authentifizierung die Rechte des passwortgeschützten Benutzers erben bzw. sich als Benutzer XYZ anmelden, um auf den Ordner zugreifen zu können.
Da nur deine Anwendung das Passwort kennt, kann i.d.R. sonst niemand darauf zugreifen.
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 10:05
von dige
Danke RSBasic, dass klingt sehr vielversprechend. Bei mir fällt nur noch nicht der Groschen,
wie ich mit der Anwendung auf ein fremdes Verzeichnis zugreifen soll, also mich Nutzer und Passwort
anmelden kann..
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 11:36
von RSBasic
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 11:48
von HeX0R
Wieso packst Du die Dateien nicht einfach mit in die Datenbank?
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 12:50
von RSBasic
Soll er alle Dateien (Bilder Dokumente, etc.) in die Datenbank speichern? Um diese Dateien öffnen zu können, müssen diese aber in einem temporären Ordner erstellt werden, die aber für Jeden zugänglich ist. Ich glaube, das will er nicht.
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 16:26
von dige
Code: Alles auswählen
Procedure.s Runas (UserName.s, Domain.s, Password.s, program.s = "", parameters.s = "")
Protected *lpUserName, *lpDomainName, *lpPassword, *lpApplication, *lpCommandLine, *F
Protected LastError, Buffer.s, Error.s, Result.s = "", LibID
Protected lpProcessInfo.PROCESS_INFORMATION
Protected lpStartUpInfo.STARTUPINFO
; Funktioniert nicht mit Netzlaufwerken, die über einen Laufwerksbuchstaben
; verbunden sind. In diesem Fall muss der UNC Pfad: "\\Server\Prg.exe" verwendet werden
#CHARSIZE = 256
If parameters <> ""
program = program + " " + Chr(34) + parameters + Chr(34)
EndIf
*lpUserName = AllocateMemory(#CHARSIZE)
*lpDomainName = AllocateMemory(#CHARSIZE)
*lpPassword = AllocateMemory(#CHARSIZE)
*lpApplication = AllocateMemory(#CHARSIZE)
*lpCommandLine = AllocateMemory(#CHARSIZE)
;convert ansi strings to unicode
MultiByteToWideChar_(#CP_ACP, 0, UserName, -1, *lpUserName, #CHARSIZE)
MultiByteToWideChar_(#CP_ACP, 0, Domain, -1, *lpDomainName, #CHARSIZE)
MultiByteToWideChar_(#CP_ACP, 0, Password, -1, *lpPassword, #CHARSIZE)
MultiByteToWideChar_(#CP_ACP, 0, program, -1, *lpApplication, #CHARSIZE)
LibID = OpenLibrary(#PB_Any, "ADVAPI32.DLL")
If LibID
*F = GetFunction(LibID, "CreateProcessWithLogonW")
If *F
If CallFunctionFast(*F, *lpUserName, *lpDomainName, *lpPassword, 0, 0,*lpApplication,0,0,0,@lpStartUpInfo,@lpProcessInfo) = 0
Buffer = Space(200)
LastError = GetLastError_()
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, LastError, #LANG_NEUTRAL, @Buffer, 200, 0)
Result = "Error (" + Str(LastError) + ") " + Buffer + #CRLF$
Result + "PrgName: " + program + #CRLF$
Result + "User / Domain: " + UserName + " / " + Domain
EndIf
Else
Result = "This function is Not available."
EndIf
CloseLibrary(LibID)
Else
Result = "Open ADVAPI32.DLL failed"
EndIf
FreeMemory(*lpUserName)
FreeMemory(*lpDomainName)
FreeMemory(*lpPassword)
FreeMemory(*lpApplication)
FreeMemory(*lpCommandLine)
ProcedureReturn Result
EndProcedure
Habe die Procedure gleich mal etwas überarbeitet, bekomme damit aber nichts zum laufen.
Wenn ich das über die Shell mache, wird mein Testprogramm zwar gestartet, aber gleich wieder
beendet. Kann man mit RunAs überhaupt GUI Programme starten?
@HeX0R, das ist mir zu langsam. In der Datenbank verwalte ich nur die Pfade..
Re: Wie kann man ein Verzeichnis absichern?
Verfasst: 02.04.2015 16:33
von RSBasic
Ich werde den Code heute Abend mal testen.
Alternativ kannst du auch einfach die Windows-Anwendung "runas.exe" nutzen. Weitere Informationen siehe: cmd.exe /k runas.exe /?