Může mít aplikace vyšší práva než její uživatel?   zodpovězená otázka

VB.NET

Věděl by někdo, jak realizovat, aby aplikace mohla zapisovat a číst ze složky, ke které uživatel aplikace nemá žádná práva (tj. nesmí složkou ani procházet)? Možnost mě zajímá pro VB.NET (express 2005) i pro VB6.

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Podle mě to možné není, pokud aplikace není instalátor (tam se to nějak řeší, ale nevím, jak to vnitřně funguje). Jde tedy o to přesvědčit systém, že aplikace je instalátor, a pak to jde. Dvojnásob to platí pro Windows Vista, u XP moc netuším, jak to je, vždycky jsem měl jen Home Edition, která moc na práva nehrála.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Nevím, ale podle mého laického názoru by to snad jít ani nemělo - jinak by to totiž popřelo jakékoliv principy (a důvody) různých přístupových práv, nebo se mýlím?

Vždy jsem žil v přesvědčení, že se jedná o vlastnost toho kterého operačního systému a pokud by to šlo "jenom nějak nastavit v programu", pak by jaksi postrádala smysl taková ta začátečnická školení "kvůli bezpečnosti nepracujte zbytečně na PC s právy Administrátora" - to by si přece každý hacker své produkty nastavil tak, aby nebyly omezeny přístupovými právy.

Poslední rok jsem využíval XP/Pro, ale do té doby jsem dlouhá léta chodil na W2K a tam jsem kdysi potřeboval vyřešit (na úrovni systému) obdobný problém. Zjišťoval jsem, je-li vůbec možné delegovat svá (rozšířená) práva pro nějaký soubor jinému uživateli (něco podobného bylo možné na UNIXu, kdy root (správce) mohl nastavit u konkrétního programu atribut, že jej může spouštět i uživatel s nižším stupněm oprávnění), ale dotazem u technické podpory MS jsem zjistil, že to (tehdejší) Windowsy neumějí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za rozbor, má logiku.

Zabezpečení by možné bylo. Aplikace by sama o sobě přístupová práva neměla, administrátor by musel nejprve zadat svoje data a tím aplikaci vyšší práva přidělit. Ta by mohl (raději musel) omezit, třeba jen na měnit pro určenou složku. Navíc má možnost přidělit práva ke spouštění aplikace jen pro určité uživatele.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Instalátor využívá systémovou službu která běží pod účtem NT AUTHORITY\LocalService a ta má samozřejmě všechna potřebná oprávnění.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Možné to samozřejmě je (bavíme se o .NET 2.0), každé vlákno v aplikaci má svojí identitu se kterou se táhnou i veškerá oprávnění s ním spojená, takže řešením by bylo uvnitř aplikace spustit vlákno s jinou identitou než tou, pod kterou byla aplikace spuštěna. Takže reálně by to vypadalo asi tak, že aplikace by běžela pod účtem uživatele s oprávněním User a uvnitř by se spustilo vlákno pod účtem uživatele s oprávněním Administrator.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, chcete tím snad naznačit, že tato konstrukce je možná i bez přispění uživatele? (Tj. já vytvořím aplikaci, která si v průběhu svého vykonávání založí nové vlákno třeba s právy administrátora a toto vlákno pak bude moci kompletně nabourat systém toho, kdo si program spustil?)

Nebo jste pouze jinými slovy popsal konstrukci, kterou zmínil pan Renner, že si aplikace vyžádá přihlášení uživatele k jinému účtu (tak jak to někdy vyžadují třeba instalátory), a pokud uživatel tuto operaci potvrdí (a zná přihlašovací údaje, samozřejmě), pak další svůj chod provádí pod identitou tohoto nového uživatele?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak kdy. Pokud jste přihlášen jako administrátor, pak se vás nic ptát nebude, protože oprávnění už máte. Nejsem si jistý, jak by toto fungovalo na Windows Vista, ale patrně by se zobrazil dialog UAC s žádostí na zvýšení oprávnění aplikaci. Stálo by za to to vyzkoušet.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém jsem popsal asi málo a později odpovědí p. Langerovi pěkně zamotal.

O co tedy jde?

O to, aby aplikace mohla zapisovat a číst ze složky, ke které uživatel aplikace nemá žádná práva (tj. nesmí složkou ani procházet). Aplikace nedělá to, co si přeje uživatel aplikace, ale jen to, co sama "chce" (umí). A to není nic víc, než čtení a zápis do textových souborů.

Proč?

Aplikace je test a je univerzální v tom, že obsah testu (zadání), jeho vzorové řešení pro automatické vyhodnocení odpovědí i odpovědi jednotlivých žáků jsou prosté textové soubory. Je to tak proto, aby učitel mohl test zadat i číst řešení žáků s minimálními dovednostmi s počítačem (stačí mu Poznámkový blok). A v tom je problém. Je třeba aby všechny instance aplikace (v síti) textové soubory četly a do souborů od všech žáků zapisovaly do jedné složky, do které smí učitel a nesmí žáci.

Pan Langer mi vysvětlil, že nelze obecně dát vývojáři možnost vytvořit aplikaci, která by nerespektovala přístupová práva. Tomu nelze oponovat. Odpověděl jsem myšlenkou (pustou teorií bez představy realizace), že aplikaci by musel oprávněný (v mém případu učitel) nejprve svá práva přidělit (login by aplikace zašifrovala a zapsala do konfigurace) a teprve potom by aplikace mohla do složky oprávněného zapisovat i při spuštění uživatelem s nižšími právy - v mém případu žák. Žák by tedy pouze aplikaci spustil, nic nezadával, aplikace by ze své zašifrované konfigurace použila práva učitele ke složce.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tom případě by bylo ideální řešení nepracovat s textovými soubory, ale s centrálně uloženou databází do které bude mít přístup jen ta aplikace.

Jinak pokud by stačilo aby složka s kritickými daty byla na daném počítači a nemusela být centrálně sdílená, mohl byste použít chráněné úložiště což je prostor vyhrazený pro danou .NET aplikaci do kterého nemá přístup nic jiného. Pracuje se s tím stejně jako s běžným souborovým systémem, ale ve skutečnosti je to něco jako virtuální disk. V případě zájmu hledejte IsolatedStorage na MSDN.

Já to používám na ukládání licenčních klíčů v našem produktu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Samozřejmě je nutné znát přihlašovací jméno a heslo toho uživatele s členstvím v Administrators. Jak ho předáte do té identity vlákna je už na vás. Buď to může být jméno a heslo natvrdo v kódu, potom to ale bude fungovat jenom tam, kde existuje účet s příslušným jménem a heslem, nebo se může načítat ze (zašifrovaného) souboru, nebo se může získat pomocí zobrazeného dialogového okna.

Svým příspěvkem sem chtěl jenom podotknout, že v aplikaci může existovat současně několik vláken každé s jinou identitou a tudíž s jinými přístupovými oprávněními.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback