Väljaandmiskuupäev:25. veebruar 2025

Versioon:.NET 8 ja uuemadversioonid.NET raamistik, kõik versioonid

Kokkuvõte

Microsoft on välja andnud Windowsi uusimate versioonide turbetäiustused. Need turbetäiustused muudavad ajutiste teede käsitsemist ning võivad põhjustada teatud .NET raamistik ja .NET API-de (ntSystem.IO.Path.GetTempPath()) tagastamist pärast paikade rakendamist mõne muu asukoha.

Nõutav on toiming

.NET raamistik ega . NET-põhine rakendus. Teie rakendusele rakenduvad automaatselt kõik teie keskkonna jaoks kohaldatavad turbetäiustused. Enamik rakendusi ei jälgi käitumismuudatust. 

Ülejäänud artiklist leiate teavet selle kohta, kuidas teha kindlaks, kas need turbetäiustused võivad mõjutada teie rakenduse käitusaja käitust. Selles artiklis on loetletud ka käitusaja kohandamise juhised, kui soovite

Rakendatav tarkvara

See artikkel kehtib järgmise tarkvara kohta: 

Ainult siis, kui see töötab järgmistes Windows Update'i versioonides: 

  • Windows 10 versioon 22H2, kui KB5052077 on installitud

  • Windows Server 2019, kui KB5053594 on installitud 

  • Windows Server 2016, kui KB5053594 on installitud 

See artikkel ei kehti .NET raamistik ega .NET-i kohta, mis töötavad Windows 11, Windows Server 2022 või uuemates versioonides. 

See artikkel ei kehti .NET-i kohta, kui see töötab windowsiga mitteseotud platvormidel. 

Üksikasjalik kirjeldus ja mõjuavaldus

Nagu eespool mainitud Windowsi värskenduste KB-dest, on Microsoft toetanud Win32 GetTempPath2 API-t Windowsi vanematele turul olevatele versioonidele, et tegutseda turvalisema asendusena varasema Win32 GetTempPath API jaoks. Sisemiselt kasutavad .NET raamistik ja .NET System.IO.Path.GetTempPath() meetodi juurutamiseks neid Win32 API-sid: Win32 GetTempPath2 API on eelistatud, kui see on olemas, ja Win32 GetTempPath API-t kasutatakse taandena, kui GetTempPath2 pole olemas. 

Kuna need KB-d teevad uue Win32 GetTempPath2 API kättesaadavaks vastavatel platvormidel, hakkavad .NET raamistik ja .NET getTempPath2 kasutama pärast KB-ide installimist. 

Peamine käitumismuudatus on see, et helistajad, kes töötavad SÜSTEEMI identiteedina, jälgivad vaikimisi System.IO.Path.GetTempPath() meetodit, tagastavad %WINDIR%\SystemTemp , samas kui helistajad, kes töötavad muuna kui SYSTEM-i identiteet, jälgivad meetodit, jätkavad olemasoleva väärtuse tagastamist. 

Kui teie rakendus vastab kõigile alltoodud kriteeriumidele, võib see muudatus teid mõjutada. 

  • Teie rakendus kasutab käitusaja ja operatsioonisüsteemi platvormi, mis on loetletud varasemas pealkirjas "Kohaldatav tarkvara"; ja

  • Teie rakendus töötab SÜSTEEMI identiteedina; ja

  • Seadke %TMP% või %TEMP% keskkonnamuutuja käsitsi ümber standardse ajutise faili asukoha ümbersuunamiseks. (Vt Win32 GetTempPath API dokumentatsiooni jaotist Kommentaarid .)

Kui vastate kõigile nendele kriteeriumidele, võite pärast Windowsi KB-de installimist jälgida oma rakenduse kirjutamist mõnda teise temp-kataloogi peale teie soovitud kataloogi. 

Käitumismuudatus võib olla nähtav mis tahes .NET raamistik või . NET-i pakutav API, mis lõpuks toetub GetTempPath2-le. Levinumad sisenemispunktid on järgmised. 

See ei ole täielik loetelu meetoditest, mille käitumine võib pärast KB-de paigaldamist muutuda. 

Rakenduse käitamise määratlemine SYSTEM-i identiteedi alusel 

.NET raamistik või .NET-rakenduse identiteedi tuvastamiseks on mitu erinevat mehhanismi

IIS-i põhised veebirakendused 

IIS viitab SÜSTEEMI identiteedile kui "LOCALSYSTEM". Kõigi rakendusekaustade ja nendega seotud identiteetide vaatamiseks avage IIS-i halduris (inetmgr.exe) vahekaart Rakendusekaustad. Samuti saate valida ripploendist Rühm "Identiteet", et hõlbustada kohaliku süsteemi identiteedina töötavate rakendusekaustade nägemist. 

Alloleval kuvatõmmisel on kujutatud rakendusekausta ("MyAppPool") näide, mis on konfigureeritud töötama funktsioonina LOCALSYSTEM. Kõik selles rakendusekaustas töötavad rakendused töötavad SÜSTEEMIidentiteedina. 

Kuvatõmmisel on kujutatud rakendusekausta ("MyAppPool") näide, mis on konfigureeritud töötama funktsioonina LOCALSYSTEM. Kõik selles rakendusekaustas töötavad rakendused töötavad SÜSTEEMIidentiteedina.

Sellele teabele pääsete programmiliselt juurde ka ülemaõigustes PowerShelli seansi kaudu, kasutades alltoodud skripti. 

Import-Module IISAdministration  Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"} 

Seadmes, mis on konfigureeritud SÜSTEEMItasemel "MyAppPool" rakendusekaustaga, nagu on näidatud ülaloleval kuvatõmmisel, prindib see PowerShelli skript järgmist, kuvades, et "MyAppPool" töötab süsteemiidentiteedi all. 

Name                 Status       CLR Ver  Pipeline Mode  Start Mode  ----                 ------       -------  -------------  ---------- MyAppPool            Started      v4.0     Integrated     OnDemand 

Windowsi teenused 

Kui teie .NET raamistik või . NET-põhine rakendus on registreeritud Windowsi teenusena, saate teenuste halduri abil vaadata sellega seotud identiteeti. 

Käivitage ülemaõigustega käsuviibas services.msc. Kuvatakse teenuste halduri kasutajaliides. 

Käivitage ülemaõigustes käsuviibas services.msc. Kuvatakse teenuste halduri kasutajaliides.

Kui veerus Sisselogimine on loetletud teenuseidentiteedi kohalik süsteem, töötab teenus süsteemiidentiteedi all. 

PowerShelli kaudu saate päringuid teha ka cmdlet-käsu Get-Service abil. Näiteks selle teabe päringu tegemiseks teenuse MyServicekohta kasutage järgmist käsku. 

(Get-Service MyService).UserName -ieq "LocalSystem" 

Kui teenus on registreeritud töötama SYSTEM-i identiteedi all, prinditakse see konsoolile tõene. 

Muud mehhanismid 

Tööriistad nagu Tegumihaldur (taskmgr.exe) või Sysinternals Process Explorer annavad teile ka teada, kas rakendus töötab süsteemiidentiteedi all. 

Tegumihalduris saate vaates Üksikasjad loetleda süsteemi kõik töötavad protsessid, seejärel otsida üles huvipakkuva protsessi ja vaadata kirjet veerus Kasutajanimi

Tegumihalduris saate vaates Üksikasjad loetleda süsteemi kõik töötavad protsessid, seejärel otsida üles huvipakkuva protsessi ja vaadata kirjet veerus Kasutajanimi.

Kui kasutajanime väärtus loeb ette teksti "SYSTEM", töötab protsess SYSTEM-i identiteedi all. 

Või otsige Sysinternals Process Exploreris üles huvipakkuv protsess ja sisestage vaade Atribuudid ning seejärel vaadake vahekaardil Pilt välja Kasutaja. 

otsige Sysinternals Process Exploreris üles huvipakkuv protsess ja sisestage vaade Atribuudid ning seejärel vaadake vahekaardil Pilt välja Kasutaja.

Kui kasutaja väärtus loeb ette teksti "NT AUTHORITY\SYSTEM", töötab protsess SÜSTEEMIidentiteedi all. 

Süsteemitaseme protsesside ajutise tee muutmine 

Alltoodud PowerShelli skript näitab, kuidas luua uus kataloog C:\NewSystemTemp\ ja piirata kataloogile juurdepääsu ainult süsteemiidentiteedi all töötavatele protsessidele. Ärge proovige muuta kataloogi ACL-e, mis on juba failidega täidetud. 

See skript tuleb käivitada ülemaõigustes PowerShelli seansilt. 

mkdir C:\NewSystemTemp\  $acl = New-Object System.Security.AccessControl.DirectorySecurity  $acl.SetSecurityDescriptorSddlForm("O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)")  Set-Acl C:\NewSystemTemp\ -AclObject $acl 

Selle toimingu õnnestumise kinnitamiseks käivitage käsk 

icacls C:\NewSystemTemp\ 

Mis annab järgmise väljundi, mis näitab edu: 

C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F)                    BUILTIN\Administrators:(OI)(CI)(F)   Successfully processed 1 files; Failed processing 0 files 

Pärast kataloogi loomist seadke süsteemitaseme ulatusega keskkonnamuutuja %SYSTEMTEMP% . Saate selle määrata System Juhtpaneel kasutajaliidese kaudu või programmiliselt PowerShelli kaudu. 

[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine) 

Seejärel taaskäivitage seade. 

keskkonnamuutuja %SYSTEMTEMP% muutmine ei muuda .NET raamistik ja .NET-rakenduste, mis töötavad muu identiteedina kui SYSTEM, tagastusväärtust System.IO.Path.GetTempPath() . Need rakendused järgivad jätkuvalt sama eraldusvõime loogikat, mis neil alati on, sealhulgas järgides %TMP% või %TEMP% keskkonnamuutujaid, kui need on olemas. 

Samamoodi ei muuda keskkonnamuutuja %TMP% või %TEMP% seadmine süsteemiidentiteedina töötavate .NET raamistik ja .NET-rakenduste System.IO.Path.GetTempPath() tagastusväärtust. 

Lisateavet

Lisateavet .NET raamistik ja .NET-i käitumise kohta leiate .NET-i dokumentatsioonist path.GetTempPathis

Lisateavet Selle aluseks oleva Windowsi operatsioonisüsteemi käitumise kohta leiate Windowsi dokumentatsioonist Win32 GetTempPath2 API-s.

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.