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)
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 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
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
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