Достъп до мрежови дискове от програми, работещи с повишени привилегии

Едно от значителните подобрения в сигурността за операционната система Windows (като се започне от Vista) беше въвеждането на функционалност за контрол на потребителските акаунти (UAC). Контролът на потребителските акаунти изисква потвърждение от потребителя всеки път, когато се стартира програма, която се опитва да направи промени в системните настройки. Един от страничните ефекти на UAC е невъзможност за достъп свързан (чрез нето употреба) мрежови устройства от приложения, работещи в привилегирован режим (Изпълнете като администратор). Това означава, че когато стартирате команден ред или файлов мениджър (на един и същ Total Commander) с повишени права, те няма да съдържат (не достъпни) букви на устройството на монтирани мрежови папки.

В тази бележка ще покажем как в Windows 10, Windows 8.1 и Windows 7 предоставете достъп до мрежови устройства от приложения, работещи в привилегирован режим (стартирайте като администратор). Проблемът се проявява както за мрежови папки, свързани чрез групови правила, така и за папки на свързани потребители независимо.

Важно е. Силно се обезкуражава напълно да деактивира UAC, дори и за едно конкретно приложение.

В действителност, когато UAC е активиран от "привилегировано" приложение в Windows, не можете да получите достъп до мрежово устройство, свързано в нормалния режим. Нека да демонстрираме как изглежда проблемът. Например, уверете се, че в командния ред, стартиран с правата на редовен потребител на системата, имате достъп до съдържанието на свързаното мрежово устройство Z: \.

Ако в контекста на същия потребител да отвори прозорец на командния ред с права на администратор, тогава когато се опитате да получите достъп до едно и също устройство, се появява съобщение, че указаният път не е намерен:

Системата не може да намери посочения път..

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

Защо това се случва? Тази функция е свързана с UAC механизма за потребител с права на локален администратор. Факт е, че когато такъв потребител влиза в системата, се създават два маркера за достъп: един маркер за достъп с права на администратор с деактивирани права (филтриран маркер за достъп - от който се стартират повечето програми) и пълноправен администраторски жетон с пълни права в системата (в този контекст изпълняват се всички програми, получили потвърждение за повишаване на правата в UAC).

Ако използвате командата whoami / всички сравнете текущите привилегии на един и същи потребител в две сесии cmd.exe (редовни и привилегировани), можете да видите, че те са много различни. Следващата таблица изброява разликите в групите и текущите идентификационни данни за всяка сесия..

Редовна потребителска сесияПривилегирована сесия на потребителите
Група за достъпЗадължителен етикет \ Среден етикет за задължително ниво S-1-16-8192Задължителен етикет \ Етикет с високо задължително ниво 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 Explorer (непривилегирован процес).

забележка. На Windows Server можете да стартирате Windows Explorer с повишени привилегии.

Като решение можете да препоръчате свързване (чрез нетна употреба или rundll32 SHELL32.dll, SHHelpShortcuts_RunDLL Connect) мрежови дискове в контекста на командния ред, който се изпълнява с права на администратор. Но това решение не винаги е приложимо и не е много удобно..

Има по-просто решение, за неговото прилагане трябва да направите следните промени в системния регистър:

  1. Отворен редактор на системния регистър (regedit.exe).
  2. Отидете до ключа на системния регистър HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Политики \ Система .
  3. Създайте нов параметър (тип DWORD) с име EnableLinkedConnections и стойност 1 .
    съвет. Можете да направите същото с една команда:
    reg добавете "HKEY_LOCAL_MACHINE \ Софтуер \ Microsoft \ Windows \ CurrentVersion \ Политики \ Система" / v "EnableLinkedConnections" / t REG_DWORD / d 0x00000001 / f
  4. Рестартирайте компютъра си (или рестартирайте услугата LanmanWorkstation).

След рестартирането се уверете, че потребителят вижда мрежови дискове от програми, работещи с права на администратор. Обратното също е вярно, всички мрежови дискове, свързани в контекста на привилегирована сесия, ще бъдат налични в обикновена сесия.

съвет. За съжаление в груповите политики няма начин да активирате параметъра EnableLinkedConnections, така че за да разпространите тези настройки на компютри с домейни, ще трябва да разпространите тази настройка на регистъра на компютри, използващи GPP.

Как работи. След като активира записа на регистъра EnableLinkedConnections, услугата LanmanWorkstation и LSA ще проверят втори маркер за достъп, свързан с текущата сесия на потребителя. Ако се намери такъв маркер за достъп, списъкът на картографираните мрежови дискове ще бъде копиран от един маркер в друг. По този начин мрежовите дискове, свързани в привилегирован режим, ще бъдат видими в нормален режим и обратно.
съвет. Алтернативно решение е да се създаде символична връзка към директорията на целевата мрежа. Например, така
mklink / D c: \ docs \\ msk-fs1 \ docs
Достъпът до тази директория ще бъде възможен както в нормален, така и в привилегирован режим. Сред недостатъците на метода отбелязваме, че достъпът до споделената папка се осъществява с привилегиите на текущия потребител. Не можете, както в случая с мрежова употреба, да използвате друг потребителски акаунт.