Jogosultságosztás ACL-lel

Előzmény: telepítő alkalmazás jól működik angol Windowson, elszáll magyaron. Vajon mi lehet az oka? Némi búvárkodás után egyáltalán nem meglepő eredményre jutottam: a Felhasználók.

Ha jogosultságokat szeretnénk állítgatni egy mappán .NET-ből, akkor 2005 óta örülhetünk, mert a .NET 2.0 már támogatja hozzáférés szabályozási listák, azaz ACL-ek (Access Control List) kezelését. Rá is kattanhatunk rögtön a FileSystemAccessRule osztályra és nem lepődünk meg, hogy a konstruktor első paramétere egy SID, azaz security identifier. Nagyon szép, hogy a SID-ek leírására létezik egy SecurityIdentifier osztály a System.Security.Principal névtérben és milyen egyszerű a konstruktornak paraméterként megadni, hogy például a @"BUILTIN\Users" csoportra vagyunk kíváncsiak. Király, hogy van BUILTIN, mert így nem kell bedrótoznunk a gépnevet, ám miközben ennek örülünk, sikerült bedrótoznunk a Users csoport nevét. És hasonlóan lehet például az Administrator vagy a Network Service fiókról is szó. Mi ezekben a közös? Hogy más operációs rendszereken máshogy hívják őket, konkrétabban van Rendszergazda, Network Service és vannak Felhasználók is.

Végignézve a bevezetőben említett kódot, azért dobott exceptiont, mert a Users csoport nem létezik magyar Windowson, ott ugyanis Felhasználóknak hívják. Most akkor drótozzuk be az összes lehetséges értéket?

A megoldás ennél azért szebb, köszönhetően annak, hogy bármennyire is azt szoktuk mondogatni, hogy a SID egyedi, valójában nem az. A minden gépen létező csoportoknak és felhasználóknak ún. well-known SID-jük van, azaz előre lehet tudni őket. A jó hír az, hogy létezik egy CreateWellKnownSid nevű Win32 API függvény, ami képes visszaadni ezeket az ismert SID-eket és hogy még szebb legyen a kép, ezt meg lehet hívni P/Invoke-kal .NET-ből, sőt mi több, a SecurityIdentifier osztály helyből képes erre, ha a WellKnownSidType paraméterezésű konstruktorát használjuk.

Ezek alapján tehát például így hozhatunk létre mappát úgy, hogy a Felhasználók csoportnak biztos Full Control joga legyen rajta:

    Directory.CreateDirectory( path );
    DirectoryInfo dirInfo = new DirectoryInfo( path );

    // @"BUILTIN\Users"
    SecurityIdentifier sid = new SecurityIdentifier( WellKnownSidType.BuiltinUsersSid, null );

    FileSystemAccessRule ace = new FileSystemAccessRule( sid, FileSystemRights.FullControl, AccessControlType.Allow );

    DirectorySecurity acl = dirInfo.GetAccessControl();
    acl.AddAccessRule( ace );

    dirInfo.SetAccessControl( acl );


Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2007.09.20. 13:49:17 | Permalink | Hozzászólások: 0 | Tárgyszavak:


  • Microsoft Security Intelligence Report 1H08

    Balássy György (MS RD, ASP.NET MVP, MCTS) Megjelent a Microsoft Security Intelligence Report ötödik kötete, amely a 2008. január és június között gyűjtött adatokat összesíti és elemzi. Nem különösebben szórakoztató olvasmány, de van benne néhány érdekesebb fejezet. Tovább »
  • Firefoxban nem jön be az oldal

    Balássy György (MS RD, ASP.NET MVP, MCTS) Webfejlesztés közben nagyon gyakran kerül elő az a probléma, hogy az alkalmazásunk Internet Explorer alól tökéletesen megy, Firefoxban viszont nem jelenik meg semmi. Olyan, mintha nem működne a névfeloldás, vagy a böngésző nem találná meg a szervert. Még ilyen üzenetet is kaphatunk. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások