Wie kann man ein Verzeichnis absichern?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Wie kann man ein Verzeichnis absichern?

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wie kann man ein Verzeichnis absichern?

Beitrag von RSBasic »

Was ist das für ein geheimnisvolles Verzeichnis, das du erstellen und verstecken möchtest?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Wie kann man ein Verzeichnis absichern?

Beitrag 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..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wie kann man ein Verzeichnis absichern?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Wie kann man ein Verzeichnis absichern?

Beitrag 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..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wie kann man ein Verzeichnis absichern?

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
HeX0R
Beiträge: 3056
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Wie kann man ein Verzeichnis absichern?

Beitrag von HeX0R »

Wieso packst Du die Dateien nicht einfach mit in die Datenbank?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wie kann man ein Verzeichnis absichern?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Wie kann man ein Verzeichnis absichern?

Beitrag 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..
Zuletzt geändert von dige am 02.04.2015 16:50, insgesamt 1-mal geändert.
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wie kann man ein Verzeichnis absichern?

Beitrag 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 /?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten