c # - Forhindre andre processer og brugere i at få adgang til en fil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en Windows-tjeneste skrevet i C # kører på en maskine, og den opretter og bruger en række filer. Er der mulighed for at forhindre en bruger på maskinen, inklusive administratorer fra at messe med disse filer (flytning, redigering, omdøbning, sletning) fra koden?


Jeg ved, at StreamWriter kan opnå dette, men Jeg vil ikke holde filerne åbne hele tiden uden at det faktisk er nødvendigt at få adgang til dataene i dem, men jeg kan ikke synes at finde andre vej.


REDIGER: Lad mig omformulere spørgsmålet, giv kommentarerne nedenfor. Er der en måde at konfigurere ACL på, så kun min tjeneste har adgang til filerne? Jeg ville også acceptere, hvis kun tjenester kunne få adgang til filerne (jeg har set nævne sikkerhedsgruppen All Services i Microsoft Docs, men jeg kan ikke synes at finde den på systemet eller i .net).

Bedste reference


Du kan gøre det skiftende adgangsrettigheder, men jeg anbefaler stærkt at bare holde dem åbne (bare pas på at skylle strømmen efter hver batch skrive).


I den første del forsøger jeg at rette direkte op på dit spørgsmål ( 'Sådan forhindres ...' ), men i anden del forsøgte jeg at skitsere en anden tilgang (gøre din ansøgning modstandsdygtig: hold en sikkerhedskopi) .


Sådan forhindres ...



Hvis du antager, at du kører på Windows for at undgå, at andre brugere røber med dem, bør du:



  • Angiv skjult attributten. Som standard er skjulte filer gemt, og mange brugere vil ikke se dem selv. Hvis du kan gøre det på katalogniveau, så endnu bedre.

  • Skift ACL til nægt Full access til Users og Administrators gruppen. Bedre hvis du vælger kirsebær og bare forlader Read tilladelser. Som standard vælger Windows den mest restriktive politik, selv når en bruger tilhører to grupper, stopper det effektivt alle med at skrive den pågældende fil (hvis du nægter også Read tilladelser, så kan de ikke selv se dens indhold, men se senere).

  • Opret en særlig gruppe (med de nødvendige tilladelser og kun dem) med en enkelt bruger. Sørg for, at brugeren ikke er tilføjet automatisk til gruppen Users.

  • Skift din ansøgning for at efterligne den bruger, når du skriver disse filer. Hvis du forlod Read tilladelserne på stedet, er kode for læsning ikke påvirket.



Glem ikke at tjekke med forskellige versioner og udgaver af Windows (HomeUsers holde hoppende i mit sind.) Hvis din ansøgning er en Windows Service, kan tingene være lidt lettere, se eryksuns kommentar. ]]


Du kan eksperimentere med alle disse ting ved blot at bruge Windows Stifinder, bare find den rette balance, men lad dig ikke glemme, at hver enkelt installation er en anden verden, og kun Gud ved, hvad miljøet er (men han ved ikke hvorfor).


Få åbenlyse ulemper:



  • En administrator kan altid gøre, hvad han vil, da de kan finde disse filer og returnere tilladelser. Jeg tror (jeg er ikke sikker), at System Installer har nogle særlige privilegier for at forhindre dette, men jeg er ikke sikker (og jeg kan ikke forestille mig hvordan man gør det).

  • Installation er meget mere kompliceret (og du har brug for en, hvis du ikke har det). Du kan gøre det, når applikationen udføres første gang, men så skal du have administrative rettigheder (kun én gang men sandsynligvis værre.)

  • Din kode er mere kompleks.

  • Flere opsætninger betyder flere ting, der kan gå galt, balancere dette med det tekniske supportteams indsats.

  • Opdateringer (og teknisk support job) bliver mere komplicerede.

  • Brugere med visse privilegier vil ikke blive påvirket (se en anden kommentar), men det er virkelig en god ting, og du bør ikke forsøge at omgå det.



Backup er nøglen!



Glem ikke, at hvis de virkelig vil bryde din ansøgning, så vil de bare slette applikationsmappen ...


Jeg tror, ​​men jeg ved ikke din specifikke brugssag, at du måske nærmer dig problemet fra den forkerte vinkel. Hvis det, du vil forhindre brugeren i at korrupte dine datafiler (med vilje eller ej), så er det du har brug for BACKUP . Gem en kopi på en anden placering hver gang du skriver dem, marker det som skjult og lev glad. Hvis de ikke er for store, kan du endda gemme indhold direkte inde i Windows-registreringsdatabasen . For krypterede/hashed/checksummed filer kan din applikation nemt opdage, når de er brudt eller mangler: bare gendan backup og dig ' re done.

Andre referencer 1



  Jeg vil ikke holde filerne åbne hele tiden



Men at holde dem åbne er en god måde, der nøje følger dine hensigter og krav.


Så længe det ikke handler om hundredvis eller mere, synes dette det bedste valg.


Den anden måde er at indstille sikkerhedsegenskaberne (ACL), men det er rodet og kræver et højere privilegium.


Undtagen Admin er ikke helt muligt, og du bør ikke virkelig have det. Undgå tilfældig sletning eller omdøbning er gennemførlig, total kontrol er ikke.

Andre referencer 2


2 Andre muligheder er



  • Angiv nogle tilladelser på de steder, hvor filerne er, så ingen kan få adgang til dem

  • Hvis alle de pågældende filer oprettes af din ansøgning, kan du kontrollere mulighederne i CreateFile, hvor du kan indstille delingsindstillingerne til 0x00000000 til 'Forhindre andre processer i at åbne en fil eller en enhed, hvis de anmoder om at slette, læse eller skrive adgang. ' [13]



Hvis du vil bruge CreateFile Jeg tror du bliver nødt til at pege den [14]