NTFS engedélyek kezelése a mappákban és fájlokban a PowerShell programból

A fájlokhoz és mappákhoz való hozzáférés vezérléséhez Windows-ban minden NTFS fájlrendszer-objektumhoz (könyvtárhoz vagy fájlhoz) külön ACL (hozzáférés-vezérlési lista, hozzáférés-vezérlési lista) van rendelve. Az ACL objektum meghatározza az elérhető műveleteket (engedélyeket), amelyeket a felhasználó és / vagy csoportok elvégezhetnek az objektummal. A Windows rendszergazdák a legtöbb esetben a File Explorer GUI-t (mappa / fájl tulajdonságok -> Biztonság fül) vagy az icacls konzol segédprogramot használják az NFTS-fájlok és -mappa engedélyek kezelésére. Ebben a cikkben megvizsgáljuk az NTFS fájlrendszer-objektumok engedélyek kezelésének módját a PowerShell-ből. Ezeket a parancsokat parancsfájlokban és az NTFS engedélyek kezelésének automatizálására használhatja a Windows fájlkiszolgálókon.

Tartalom:

  • Beépített parancsmagok az ACL-ek kezeléséhez NTFS-ben: Get-Acl és Set-Acl
  • Az NTFSSecurity modult használjuk a PowerShell engedélyek kezelésére
  • A hatékony NTFS engedélyek ellenőrzése objektumokon a PowerShellből

Beépített parancsmagok az ACL-ek kezeléséhez NTFS-ben: Get-Acl és Set-Acl

A PowerShell v5 verzióban (Windows 10 / Windows Server 2016) két külön beépített parancsmag található az ACL-ek kezelésére (a Microsoft.PowerShell.Security modul tartalmazza):

  • Get-ACL - lehetővé teszi az NTFS fájlrendszer egy adott objektumának aktuális ACL-jének beolvasását;
  • Set-ACL - az aktuális objektum-ACL-ek hozzáadásához / módosításához használható.

Ezekben a beépített parancsmagokban nem fogunk részletesebben foglalkozni, mint ezek funkcionalitása a legtöbb esetben nem elegendő az NTFS engedélyek igazi feladatokhoz történő kezeléséhez. Nézzük csak néhány tipikus példát ezek használatára..

Sorolja fel a mappa (fájl) jelenlegi tulajdonosát és az NTFS-hez hozzárendelt engedélyeket:

get-acl C: \ Drivers \ | fl

Útvonal: Microsoft.PowerShell.Core \ FileSystem :: C: \ Illesztőprogramok \
Tulajdonos: WORKSTAT1 \ root
Csoport: WORKSTAT1 \ hiányzik
Hozzáférés: NT HITELESSÉG \ Hitelesített felhasználók engedélyezik a módosítást, a szinkronizálást
NT HATÓSÁG \ RENDSZER Engedélyezze a FullControl alkalmazást
BUILTIN \ Administrators Engedélyezi a FullControl alkalmazást
BUILTIN \ A felhasználók engedélyezhetik a ReadAndExecute alkalmazást, a szinkronizálást
WORKSTAT1 \ root Engedélyezze a módosítást, a szinkronizálást
Audit:
Sddl: O: S-1-5-21-3650440056-3766451173-3310994491-1001G: S-1-5-21-3650440056-766451173-3310994491-513D: PAI (A; OICI; 0x1301bf ;;; AU) ( A; OICI; FA ;;; SY) (A; OICI; FA ;;; BA) (A; OICI; 0x1200a9 ;;; BU) (A; OICI; 0x1301bf ;;; S-1-5-21-3650440056 -37664 51173-3310994491-1001)

Mint láthatja, a jelenlegi engedélyeket SDDL karakterlánccal is bemutatjuk - ezt a hozzáférési leírás formátumot röviden megvizsgáltuk a Windows szolgáltatások jogainak kezelése című cikkben..

Az NTFS engedélyeket csak érthetőbb formátumban sorolhatja fel:

(get-acl C: \ Drivers \) hozzáférés

A következő parancs használatával az NTFS engedélyeket másolhatja az egyik mappából, és a másikba alkalmazhatja:

Get-Acl C: \ Illesztőprogramok | Set-Acl C: \ Distr

A művelet végrehajtásához a fióknak az erőforrás tulajdonosának (tulajdonosnak) kell lennie, és tulajdonosi jogokkal kell rendelkeznie.

A Set-ACL használatának fő problémája az, hogy a parancsmag mindig megpróbálja megváltoztatni az erőforrás tulajdonosát, még akkor is, ha csak NTFS engedélyeket szeretne megváltoztatni. Ennek eredményeként ahhoz, hogy jogokat adjon az objektumhoz, a következő konstrukciót kell használnia:

$ path = "c: \ drivers"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Olvasás, ReadAndExecute, ListDirectory"
$ InheritSettings = "Containerinherit, ObjectInherit"
$ PropogationSettings = "Nincs"
$ RuleType = "Engedélyezés"
$ acl = Get-Acl $ elérési út
$ perm = $ felhasználó, $ jogok, $ InheritSettings, $ PropogationSettings, $ RuleType
$ szabály = Új-Objektum - Típusnév System.Security.AccessControl.FileSystemAccessRule --ArgumentList $ perm
$ acl.SetAccessRule ($ szabály)
$ acl | Set-Acl -Path $ elérési út

Az NTFS mappához való hozzáférés eltávolítása egy felhasználó vagy csoport számára:
$ path = "c: \ drivers"
$ acl = Get-Acl $ elérési út
$ szabályok = $ acl.Access | ahol az IsInherited -eq $ false
$ targettrule = $ szabályok | ahol IdentityReference -eq "WORKSTAT1 \ user1"
$ acl.RemoveAccessRule ($ aimtrule)
$ acl | Set-Acl -Path $ elérési út

A mappák öröklésének letiltása a PowerShellből:

$ path = 'C: \ dist'
$ acl = Get-ACL -Path $ elérési út
$ acl.SetAccessRuleProtection ($ True, $ True) # az első $ True azt jelzi, hogy ez a könyvtár védett-e, a második $ True - a jelenlegi NTFS engedélyek másolása
Set-Acl -Path $ elérési út -AclObject $ acl

Ezenkívül a Get-acl és a Set-Acl használatával vezérelheti az NTFS objektumok ellenőrzésének paramétereit (lásd a Ki törölte a fájlt a szerveren cikket), vagy az aktuális OU engedélyekkel kapcsolatos információkat az AD-ben.

Az NTFSSecurity modult használjuk a PowerShell engedélyek kezelésére

Mint mondtam, a beépített modul az ACL-ek kezelésére a PowerShell-objektumokon nem a legkényelmesebb. Az NTFS fájl- és mappajogok Windows-on történő kezeléséhez jobb, ha külön PowerShell galériamodult használunk - NTFSSecurity. Az NTFSSecurity modul legújabb verziója (jelenleg 4.2.4) telepíthető a paranccsal Telepítési modul - Név NTFSSbiztonság, vagy töltse le kézzel (link). A kézi telepítéshez elegendő a modul archívuma tartalmának kibontása a C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSbiztonsági könyvtárba (ne felejtsd el feltölteni a letöltött fájlokat)..

Importálja az NTFSS-biztonsági modult egy PowerShell-munkamenetbe:

Import-modul NTFSSbiztonság

Soroljuk fel a modulban elérhető parancsokat (36 cmdlet áll rendelkezésre):

Get-Command -modul NTFSSbiztonság

Sorolja fel az aktuális NTFS könyvtár engedélyeket:
'C: \ distr' | Get-NTFSAccess

Mint láthatja, a jelenlegi engedélyek kényelmesebb formában vannak bemutatva..

Egy adott felhasználónak és a csoportnak a mappához való teljes csoportosítása érdekében futtassa a következő parancsot:
Add-NTFSAccess -C út: \ distr -A 'WORKSTAT1 \ confroom', 'BUILTIN \ Administrators' -AccessRights 'Fullcontrol' -PassThru

tanács. Alapértelmezés szerint az NTFSSecurity modul parancsmagjai nem adnak vissza adatot, így a parancs a végrehajtás után új ACL-eket jelenít meg, használja a paramétert passthru.

Csak a legfelső szintű jogok megadásához és a beágyazott objektumok (csak egy mappák) engedélyének megváltoztatásához használja a következő parancsot:

Add-NTFSAccess c: \ data \ public -Account corp \ aaivanov -AccessRights módosítása -AppliesToFolderConly

Törölje az NTFS-hez hozzárendelt engedélyeket:

Eltávolítás-NTFSAccess -C út: \ distr -A 'WORKSTAT1 \ confroom' számla -AccessRights FullControl -PassThru

A következő parancs megfoszthatja a megadott fiókjogokat a megadott mappában lévő összes beágyazott objektumhoz (az örökölt engedélyeket átugorja):

Get-ChildItem -C út: \ distr -Fizetés | Get-NTFSAccess -A 'WORKSTAT1 \ confroom' fiók -ExcludeInherited | Eltávolítás-NTFSAccess -PassThru

A következő parancs teheti az adminisztrátor fiókot a könyvtár összes beágyazott objektumának tulajdonosává:

Get-ChildItem -C út: \ distr -Fizetés -Force | Set-NTFSOwner - 'Administrator' fiók

A könyvtári objektumokhoz rendelt összes engedély manuális törlése (az örökölt engedélyeket nem törli):

Get-ChildItem -C út: \ distr -Fizetés -Force | Tiszta-NTFSAccess

Engedélyezze az NTFS öröklést a könyvtár összes objektumához:

Get-ChildItem -C út: \ distr -Fizetés -Force | Engedélyezze-NTFSAccessInheritance

Az összes, kézzel hozzárendelt engedély megjelenítése az örökölt engedélyek kivételével:

dir C: \ distr | Get-NTFSAccess -ExcludeInherited

Megjelenítheti egy adott fiókhoz hozzárendelt engedélyeket (ne tévessze össze a hatékony engedélyekkel, ezekről alább beszélünk):

dir C: \ distr | Get-NTFSAccess -Account corp \ aaivanov

A hatékony NTFS engedélyek ellenőrzése objektumokon a PowerShellből

Ellenőrizheti hatékony NTFS engedélyek egy adott fájlba vagy mappába a parancsmag segítségével Get-EffectiveAccess. Tegyük fel, hogy több AD biztonsági csoportnak megadta a hozzáférést egy adott mappához, és most meg szeretné tudni, hogy egy adott fiók (SID) hozzáfér-e ehhez a mappához. Hogyan lehet ezt megtenni anélkül, hogy felsorolnánk a fiókját tartalmazó AD csoportokat? Ebben a helyzetben a hatékony NTFS engedélyek ellenőrzésének funkciója segít. Tegyük fel, hogy ellenőriznie kell a confroom felhasználói könyvtár összes almappájának érvényes jogait.

Get-ChildItem -Path c: \ distr -Fizetés -Directory | Get-NTFSEffectiveAccess -A 'WORKSTAT1 \ confroom' fiók | válassza a Fiók, az AccessControlType, az AccessRights, a FullName lehetőséget

Vagy ellenőrizheti egy adott fájl érvényes engedélyét:

Get-Item - 'C: \ distr \ mstsc.exe.manifest' elérési út | Get-NTFSEffectiveAccess -A 'WORKSTAT1 \ confroom' fiók | Format-List