Доступ до мережевих дисків з програм, запущених з підвищеними привілеями

Одним з істотних поліпшень системи безпеки ОС сімейства Windows (починаючи з Vista) було впровадження функціоналу User Account Control (UAC). Служба захисту користувачів запитує підтвердження користувача кожного разу, коли запускається програма намагається внести зміни в параметри системи. Одним з побічних ефектів роботи UAC є неможливість доступу до підключеним (через net use) Мережевих дисків з додатків, запущених в привілейованому режимі (Run As Administrator). Це означає, що при запуску командного рядка або файлового менеджера (того ж, Total Commander) з підвищеними правами, в них будуть відсутні (не доступні) літери дисків змонтованих мережевих папок.

У цій замітці ми покажемо, як в Windows 10, Windows 8.1 і Windows 7 надати доступ до мережевих дисків з програм, які потребують привілейованому режимі (Запущених від імені адміністратора). Проблема проявляється як для мережевих папок, підключених через групові політики, так і для папок підключених користувачів самостійно.

важливо. Настійно не рекомендується зовсім відключати UAC, навіть для одного конкретного додатка.

Дійсно, при включеному UAC з "привілейованого" додатка в Windows можна отримати доступ до підключеного в звичайному режимі мережного диска. Продемонструємо, як виглядає проблема. Наприклад, переконаємося, що в командному рядку, запущеної з правами звичайного користувача системи, є доступ до вмісту підключеного мережевого диска Z: \.

Якщо в контексті цього ж користувача відкрити вікно командного рядка з правами адміністратора, то при спробі отримати доступ до цього ж диску, з'явиться повідомлення, що зазначений шлях не знайдений:

The system can not find the path specified.Сістеме не вдається знайти вказаний шлях.

Така поведінка системи може викликати ряд незручностей при частому запуску додатків в привілейованому режимі. Можна запускати додатки без прав Администартор, але це не завжди можна застосувати.

Чому це відбувається? Дана особливість пов'язана з механізмом роботи UAC для користувача з правами локального адміністратора. Справа в тому, що при вході такого користувача в систему створюються два маркера доступу: один маркер доступу з відключеними правами адміністратора (маркер фільтрованої доступу - з-під якого запускаються більшість програм) і маркер повноцінного адміністратора, який володіє повними правами в системі (в цьому контексті виконуються всі програми, які отримали підтвердження на підвищення прав в UAC).

Якщо за допомогою команди whoami / all порівняти поточні привілеї одного і того ж користувача в двох сесіях cmd.exe (звичайної і привілейованої), можна побачити, що вони сильно відрізняються. У цій таблиці наведено відмінності в групах і поточних повноваження в кожної сесії.

Звичайна сесія користувачаПривілейованих сесіія користувача
Група доступуОбов'язкова мітка \ Середній обов'язковий рівень (Medium Mandatory Level) Метка S-1-16-8192Обов'язкова мітка \ Високий обов'язковий рівень (High Mandatory Level) Метка S-1-16-12288
привелегииSeLockMemoryPrivilege

SeMachineAccountPrivilege

SeShutdownPrivilege

SeChangeNotifyPrivilege

SeUndockPrivilege

SeIncreaseWorkingSetPrivilege

SeTimeZonePrivilege

SeLockMemoryPrivilege

SeIncreaseQuotaPrivilege

SeMachineAccountPrivilege

SeSecurityPrivilege

SeTakeOwnershipPrivilege

SeLoadDriverPrivilege

SeSystemProfilePrivilege

SeSystemtimePrivilege

SeProfileSingleProcessPrivilege

SeIncreaseBasePriorityPrivilege

SeCreatePagefilePrivilege

SeBackupPrivilege

SeRestorePrivilege

SeShutdownPrivilege

SeSystemEnvironmentPrivilege

SeChangeNotifyPrivilege

SeRemoteShutdownPrivilege

SeUndockPrivilege

SeManageVolumePrivilege

SeImpersonatePrivilege

SeCreateGlobalPrivilege

SeIncreaseWorkingSetPrivilege

SeTimeZonePrivilege

SeCreateSymbolicLinkPrivilege

SeDelegateSessionUserImpersonatePrivilege

При включеному UAC додатки під одним і тим же користувачем можуть запускатися в двох контекстах (привілейованому і непривілейованому). При підключенні загальних мережевих папок, система створює символічні посилання (DosDevices), в які зберігається зіставлення букви диска і UNC шляху. Ці посилання асоціюються з поточним сеансом для поточного маркера доступу процесу і з-під іншого маркера недоступні.

Відповідно, може мати місце і зворотна проблема: якщо користувач володіє правами адміністратора на своєму комп'ютері, то при підключенні мережевих дисків через логон-скрипти групових політик, завдання планувальника або SCCM (які запускаються з підвищеними привілеями), ці диски не видно користувачеві в провіднику Windows (непривілейований процес).

Примітка. У Windows Server можна запустити Провідник Windows з підвищеними привілеями.

Як обхідного рішення можна порекомендувати підключати (через net use або rundll32 SHELL32.dll, SHHelpShortcuts_RunDLL Connect) Мережеві диски в контексті командному рядку, запущеної з правами адміністратора. Але це рішення не завжди може бути застосовано, і не дуже зручно.

Є більш просте рішення, для його реалізації потрібно внести наступні зміни до реєстру:

  1. Відкрийте редактор реєстру (regedit.exe).
  2. Перейдіть в розділ реєстру HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System .
  3. Створіть новий параметр (типу DWORD) з ім'ям EnableLinkedConnections і значенням 1 .
    Порада. Те ж саме можна зробити однією командою:
    reg add "HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System" / v "EnableLinkedConnections" / t REG_DWORD / d 0x00000001 / f
  4. Перезавантажте комп'ютер (або перезапустіть службу LanmanWorkstation).

Після перезавантаження переконайтеся, що користувач бачить мережеві дискам з програм, запущених з правами адміністратора. Вірно і зворотне твердження, всі мережеві диски, підключені в контексті привілейованої сесії, будуть доступні і в звичайній сесії.

Порада. На жаль, в групових політиках відсутня можливість включення параметра EnableLinkedConnections, тому для поширення цих налаштувань на комп'ютери домену доведеться поширити даний параметр реєстру на комп'ютери за допомогою GPP.

Як це працює. Після включення параметра реєстру EnableLinkedConnections, служба LanmanWorkstation і LSA перевірятимуть наявність другого маркера доступу, пов'язаного з сесією поточного користувача. Якщо такий маркер доступу буде виявлений, список підключених мережевих дисків буде скопійований з одного маркера в інший. Таким чином мережеві диски, підключені в привілейованому режимі, буде видно в звичайному і навпаки.
Порада. Як альтернативне рішення можна запропонувати створити символічне посилання на цільовий мережевий каталог. Наприклад, так
mklink / D c: \ docs \\ msk-fs1 \ docs
Доступ до даного каталогу буде можливий і в звичайному і в привілейованому режимі. З недоліків методу, відзначимо, що доступ на загальну папку виконується з повноваженнями поточного користувача. Не можна, як у випадку з net use, використовувати обліковий запис іншого користувача.