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:
-
.NET 8 ja uuemad versioonid
-
.NET raamistik kõik versioonid alates 2024. aasta juuli turbevärskendustest ja järgnevatest värskendustest
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.
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.
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 .
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.
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.