Одним из существенных улучшений системы безопасности ОС семейства Windows (начиная с Vista) являлось внедрение функционала User Account Control (UAC). Контроль учетных записей запрашивает подтверждение пользователя каждый раз, когда запускаемая программа пытается внести изменения в параметры системы. Одним из побочных эффектов работы UAC является невозможность доступа к подключенным (через net use) сетевым дискам из приложений, запущенных в привилегированном режиме (Run As Administrator). Это означает, что при запуске командной строки или файлового менеджера (того же, Total Commander) с повышенными правами, в них будут отсутствовать (не доступны) буквы дисков смонтированных сетевых папок.
В этой заметке мы покажем, как в Windows 10, Windows 8.1 и Windows 7 предоставить доступ к сетевым дискам из приложений, работающих в привилегированном режиме (запущенных от имени администратора). Проблема проявляется как для сетевых папок, подключенных через групповые политики, так и для папок подключенных пользователей самостоятельно.
Действительно, при включенном UAC из «привилегированного» приложения в Windows нельзя получить доступ к подключенному в обычном режиме сетевому диску. Продемонстрируем, как выглядит проблема. Например, убедимся, что в командной строке, запущенной с правами обычного пользователя системы, имеется доступ к содержимому подключенного сетевого диска Z:\.
Если в контексте этого же пользователя открыть окно командной строки с правами администратора, то при попытке получить доступ к этому же диску, появится сообщение, что указанный путь не найден:
Такое поведение системы может вызывать ряд неудобств при частом запуске приложений в привилегированном режиме. Можно запускать приложения без прав администартора, но это не всегда применимо.
Почему это происходит? Данная особенность связана с механизмом работы 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 (непривилегированный процесс).
В качестве обходного решения можно порекомендовать подключать (через net use
или rundll32 SHELL32.dll,SHHelpShortcuts_RunDLL Connect
) сетевые диски в контексте командной строке, запущенной с правами администратора. Но это решение не всегда применимо, и не очень удобно.
Есть более простое решение, для его реализации нужно внести следующие изменения в реестр:
- Откройте редактор реестра (regedit.exe).
- Перейдите в раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System .
- Создайте новый параметр (типа DWORD) с именем EnableLinkedConnections и значением 1 .Совет. То же самое можно сделать одной командой:
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLinkedConnections" /t REG_DWORD /d 0x00000001 /f
- Перезагрузите компьютер (или перезапустите службу LanmanWorkstation).
После перезагрузки убедитесь, что пользователь видит сетевые дискам из программ, запущенных с правами администратора. Верно и обратное утверждение, все сетевые диски, подключенные в контексте привилегированной сессии, будут доступны и в обычной сессии.
Как это работает. После включения параметра реестра EnableLinkedConnections, служба LanmanWorkstation и LSA будут проверять наличие второго маркера доступа, связанного с сессией текущего пользователя. Если такой маркер доступа будет обнаружен, список подключенных сетевых дисков будет скопирован из одного маркера в другой. Таким образом сетевые диски, подключенные в привилегированном режиме, будут видны в обычном и наоборот.
mklink /D c:\docs \\msk-fs1\docs
Доступ к данному каталогу будет возможен и в обычном и в привилегированном режиме. Из недостатков метода, отметим, что доступ на общую папку выполняется с полномочиями текущего пользователя. Нельзя, как в случае с net use, использовать учетную запись другого пользователя.
Спасибо, как раз на днях была проблема с обновлением дрвеба по сети, теперь знаю в чем дело
Данный метод не работает на windows 10, и 2012 r2 после обновления, есть ли новые решения ?
Спасибо большое очень сильно помогли с советом))
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLinkedConnections /t REG_DWORD /d 0x00000001 /f
В таком виде надо писать команду, без кавычек, а не как в тексте статьи…
Это проблема WordPress, он кавычки любит коверкать, заенять на елочки.
Спс — поправил код.
Так кавычки тоже не нужны, с кавычками в реестре и появляется ветка, не думаю, что она будет работать в таком виде…
Все ок работает в таком виде.
Не забывайте, в реестре куча веток имеют пробелы в имени. Поэтому брать путь в кавычки это правильно.
Нормально ключи с пробелами в реестре прописываются без кавычек в самой команде, а если кавычки в команде прописать, то и сам ключ в реестре будет в кавычках! Никогда не видел ключи в реестре с кавычками, поэтому не могу сказать, будет ли он работать в таком виде…
Добрый день.
Наблюдаю похожую картину с запуском REGEDIT из CMD.
Скрипт импортирует файл.reg для ветки HKCU.
И у обычного пользователя UAC молчит и скрипт выполняется.
А у админа локального или доменного, UAC : «разрешить этому приложению вносить *** устройстве ?»
Отключаем UAC и тогда у админов всё тихо а у пользователей «разрешить вносить *** устройстве ?»
В принципе не критично но есть админы локальные которые всё таки не знают что им делать.
Пробовал добавить:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
«C:\\Windows\\System32\\regedit.exe»=»RunAsInvoker» Не помогло.
Как победить?
Может вы какой-то ключик специфический правите. Сравните разрешения на ключ реестра у админа и у юзера
Ключи все из HKCU одинаковые для пользователя и админа файл
Запрос именно на выполнение regedit даже если выбрать «выполнить» и ввести regedit будет запрос на выполнение. У пользователей запроса нет.
>>> Сейчас заметил в логах локального админа на win 10. возможно не связанно.
Аудит отказа 4673 Вызвана привилегированная служба.
имя пользователя (лок админ)
C:\Windows\System32\taskhostw.exe Шедулер
C:\Windows\System32\spoolsv.exe ПЕЧАТЬ
C:\Windows\System32\ie4uinit.exe ИНТЕРНЕТ
C:\Windows\System32\sihost.exe
C:\Windows\explorer.exe ПРОВОДНИК
C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\14.2.1031.0100.105\Bin\ccSvcHst.exe
C:\Windows\System32\SystemSettingsBroker.exe
Не мог в фотошопе открыть файлы с фтп-сервака. Вариант с правкой реестра помог. Винда 10.