4

У меня странное поведение с переменными среды на моем Windows XP SP3.

Когда я вхожу в систему как администратор, строки %SystemRoot% в PATH заменяются на C:\WINDOWS , значение переменной 'SystemRoot' - C:\WINDOWS .

Но когда я вхожу в систему как любой пользователь без прав администратора, %SystemRoot% буквально остается в PATH, хотя переменная SystemRoot имеет то же значение, что и в учетной записи администратора.

Запуск PowerShell от имени обычного пользователя:

PS C:\Users\vic> $ env: путь (Enter)

% SystemRoot%\system32\WindowsPowerShell\v1.0\; C:\Program Files\AMD APP\bin\x86; C:\Windows\system32; C:\Windows; C:\Windows\System32\Wbem; C:\Windows\System32\WindowsPowerShell\v1.0; C:\Program Files\ATI Technologies\ATI.ACE\Core-Static

Запуск PowerShell повышен (я щелкаю правой кнопкой мыши, run as admin):

PS C:\Windows\system32> $ env: путь

C:\Windows\system32\WindowsPowerShell\v1.0\; C:\Program Files\AMD APP\bin\x86; C:\Windows\system32; C:\Windows; C:\Windows\System32\Wbem; C:\Windows\System32\WindowsPowerShell\v1.0; C:\Program Files\ATI Technologies\ATI.ACE\Core-Static

Путь Env в Windows:

C:\Program Files\AMD APP\bin\x86;% SystemRoot%\system32;% SystemRoot%;% SystemRoot%\System32\Wbem;% SystemRoot%\System32\WindowsPowerShell\v1.0; C:\Program Files\ATI технологии \ATI.ACE \Core-Static

Зачем?

1 ответ1

1

Вероятно, это связано с известной ошибкой в Windows XP, Windows 7 и некоторых других. (На основании доступной документации, он либо не влияет, либо не был замечен в Windows 8 или более поздней версии.)

Ошибка задокументирована в статье 329308 базы знаний Майкрософт (переменная окружения не может раскрывать% APPDATA% в папку приложения). Он также задокументирован как Средняя уязвимость в Национальной базе данных уязвимостей NIST, как CVE-2007-6753. В одной из цитируемых ссылок в статье CVE, статье в блоге безопасности ACROS, утверждается, что проблема может быть такой же старой или даже более старой, чем в 2003 году.

Несмотря на то, что в указанной статье базы знаний конкретно упоминается %APPDATA% , ошибка затрагивает все «переменные внутри переменных» и, в частности, становится проблемой безопасности, когда обнаруживается в %PATH% .

Я не знаю, почему повышенные привилегии могут повлиять на то, как эта ошибка выражается. По моему опыту, воспроизведение проблемы, как правило, довольно ненадежно. Но общий случай, когда переменные внутри переменных не были должным образом раскрыты, является известной ошибкой, поэтому я бы не стал тратить много времени, пытаясь ее устранить.

Единственный обходной путь, о котором я знаю, - это редактирование затронутых переменных так, чтобы пути были явно определены, а не зависели от других переменных. Везде, где вы видите «% SystemRoot%» в %PATH% , замените его точным значением %SystemRoot% . Сделайте то же самое для любых других вложенных переменных в вашей среде, где это возможно, особенно если эти переменные определяют пути к файлам / папкам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .