文件和目錄的權(quán)限管理是一項(xiàng)復(fù)雜且耗時(shí)的工作溃列,尤其是在Windows環(huán)境中劲厌,windows環(huán)境中,文件和目錄權(quán)限管理使用圖形化界面進(jìn)行標(biāo)準(zhǔn)操作听隐。但Powershell
將能使這項(xiàng)工作更快更容易补鼻。
Powershell能夠完成權(quán)限管理的哪些操作呢
- 列出文件和目錄權(quán)限設(shè)置
- 添加文件和目錄權(quán)限
- 移除文件和目錄權(quán)限
- 修改文件和目錄的屬主
- 啟用和禁用目錄的繼承屬性
列出NTFS文件和目錄權(quán)限
PS C:\Windows\System32> [System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights])
image.png
上述權(quán)限類型,在windows系統(tǒng)中雅任,可大致分為兩類
基本權(quán)限
- Full Control:用戶可以修改风范、添加、移動(dòng)和刪除文件和目錄以及相應(yīng)的屬性沪么,換而言之硼婿,用戶可以改變所有文件以及子目錄的權(quán)限設(shè)定。
- Modify:用戶可以修改文件和文件屬性禽车,包括刪除或添加文件到目錄或者刪除草巡、添加屬性到文件
- Read & Execute:用戶可以運(yùn)行可執(zhí)行文件磅崭,包括腳本
- Read:用戶能夠查看文件、文件屬性和目錄
- Write:用戶能夠?qū)懭胄聰?shù)據(jù)到文件并能將文件添加到目錄
高級(jí)權(quán)限
- Traverse Folder/Execute File:允許用戶即使沒(méi)有文件和目錄的權(quán)限,也允許其瀏覽文件夾蓖议。此外,也允許執(zhí)行文件
- List Folder/Read Data:允許列出文件以及子目錄淀散,并能夠訪問(wèn)文件中包含的內(nèi)容
- Read Attributes:查看文件或目錄的屬性
- Write Attributes:更改文件或目錄的屬性
- Read Extended Attributes:查看文件或目錄的擴(kuò)展屬性
- Write Extended Attributes:更改文件或目錄的擴(kuò)展屬性
- Create Files/Write Data:允許在目錄中創(chuàng)建文件并能更改目錄中的文件(change)
- Create Folders/Append Data:允許在當(dāng)前目錄中創(chuàng)建目錄棋傍,允許追加數(shù)據(jù)到文件,但是不允許更改(change)彻采、刪除或者覆蓋替換文件中的內(nèi)容
- Delete:允許刪除文件或目錄
- Read Permissions:用戶可以讀取文件或目錄的權(quán)限設(shè)置
- Change Permission:用戶可以更改(change) 文件或目錄的權(quán)限設(shè)置
- Take Ownership:用戶可以取得文件或目錄的所有權(quán)
- Synchronize:使用文件或目錄進(jìn)行同步腐缤。(原文是
Allows or denies different threads to wait on the handle for the file or folder and synchronize with another thread that may signal it. This permission applies only to multithreaded, multiprocessing programs.
,不太理解肛响,有大神知道的話岭粤,煩請(qǐng)告知,多謝)
檢索文件或目錄的權(quán)限設(shè)置
使用get-ACL
來(lái)檢索文件或目錄的權(quán)限設(shè)置
Get-ACL -Path "Folder1"
image.png
默認(rèn)輸出不易讀特笋,可以使用下面的方式
(Get-ACL -Path "Folder1").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -AutoSize
image.png
新建一個(gè)文件test1.txt剃浇,查看它的權(quán)限配置
(Get-ACL -Path "Test1.txt").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -AutoSize
image.png
修改文件或目錄的權(quán)限設(shè)置
使用powershell來(lái)修改文件或目錄的權(quán)限巾兆,一般流程如下
- 檢索已存在的ACL規(guī)則
- 創(chuàng)建需要應(yīng)用的目標(biāo)規(guī)則,
FileSystemAccessRule
語(yǔ)法結(jié)構(gòu)類似:Identity String,FileSystemRights,AccessControlType- 添加新的ACL規(guī)則到已存在的規(guī)則集
- 使用
Set-ACL
將前面新建的ACL規(guī)則應(yīng)用到目標(biāo)文件或目錄
$ACL = Get-ACL -Path "Test1.txt"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("TestUser1","Read","Allow")
$ACL.SetAccessRule($AccessRule)
$ACL | Set-Acl -Path "Test1.txt"
(Get-ACL -Path "Test1.txt").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -AutoSize
image.png
復(fù)制權(quán)限設(shè)置到新的對(duì)象上面
我們將文件test1上面的訪問(wèn)權(quán)限復(fù)制到文件Test2上
Get-ACL -Path "Test1.txt" | Set-ACL -Path "Test2.txt"
(Get-ACL -Path "Test2.txt").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -AutoSize
image.png
移除文件或目錄的訪問(wèn)權(quán)限
要移除文件或目錄的某個(gè)訪問(wèn)權(quán)限虎囚,需要通過(guò)與修改權(quán)限同樣的步驟角塑,但是用的對(duì)象方法不一樣(前者使用$ACL.SetAccessRule()
,而后者使用$ACL.RemoveAccessRule()
$ACL = Get-ACL -Path "Test1.txt"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("TestUser1","Read","Allow")
$ACL.RemoveAccessRule($AccessRule)
$ACL | Set-Acl -Path "Test1.txt"
(Get-ACL -Path "Test1.txt").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -AutoSize
image.png
修改繼承和所有權(quán)屬性
啟用\禁用繼承屬性
要更改繼承屬性淘讥,我們不得不使用SetAccessRuleProtection
方法圃伶,它包括兩個(gè)參數(shù),isProtected
:定義是否禁用繼承蒲列,可用值為(False)窒朋,如果值為
True$False)侥猩,如果值為$True,將保留繼承的權(quán)限
$ACL = Get-Acl -Path "Folder1"
$ACL.SetAccessRuleProtection($true,$false)
$ACL | Set-Acl -Path "Folder1"
image.png有時(shí)上述操作可能需要管理員身份抵赢,不然會(huì)報(bào)如下錯(cuò)誤:
Set-Acl: The process does not possess the 'SeSecurityPrivilege' privilege which is required for this operation.
修改所有權(quán)屬性
修改所有權(quán)屬性欺劳,需要定義一個(gè)用戶賬號(hào)對(duì)象,然后使用SetOwner()
方法來(lái)完成
$ACL = Get-Acl -Path "Folder1"
$User = New-Object System.Security.Principal.Ntaccount("TestUser1")
$ACL.SetOwner($User)
$ACL | Set-Acl -Path "Folder1"
Get-ACL -Path "Folder1"
image.png