使用PowerShell管理NTFS权限


使用NTFS权限创建目录

我们经常可能会需要使用特定的NTFS权限创建一个目录,下面有一个创建新目录的例子,并且会演示怎样给已存在的目录添加新权限:

$Path = 'c:\protectedFolder'

# 创建一个新目录
$null = New-Item -Path $Path -ItemType Directory

# 获取目录的权限
$acl = Get-Acl -Path $path

# 添加新权限
$permission = 'Everyone', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# 添加另外一个新权限
# 警告: 把用户名"Tobias" 替换成你自己想分配权限的用户或着组
$permission = 'Tobias', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# 设置新权限
$acl | Set-Acl -Path $path

 

管理NTFS权限

上一小节我们演示如何给一个目录添加NTFS权限,如果要查看目录已经被分配了那些类型的权限,可以这样做:

PS> [System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights])
ListDirectory
ReadData
WriteData
CreateFiles
CreateDirectories
AppendData
ReadExtendedAttributes
WriteExtendedAttributes
Traverse
ExecuteFile
DeleteSubdirectoriesAndFiles
ReadAttributes
WriteAttributes
Write
Delete
ReadPermissions
Read
ReadAndExecute
Modify
ChangePermissions
TakeOwnership
Synchronize
FullControl

假设我们创建了一个名为 “protectedfolder”的目录:

$Path = 'c:\protectedFolder'

# 创建一个目录
$null = New-Item -Path $Path -ItemType Directory

要给用户”Tobias”添加一个新的规则(请确保将例子中的用户名替换成你自己环境中真实存在的用户名),要分配文件系统权限运行下面的例子:

# 获取权限
$acl = Get-Acl -Path $path

# 添加新权限
$permission = 'Tobias', 'Read,Write,Modify', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# 设置新权限
$acl | Set-Acl -Path $path

获取特定的NTFS权限

要查看直接分配给文件或者文件夹有那些NTFS权限,请检查isInherited属性。下面我们会创建一个新文件夹”sampleFolderNTFS”,然后查看指定给它的NTFS权限。因为文件夹是刚创建的,它只会有一些继承的权限,没有任何指定的权限。

荔非苔注:本文中我们把文件系统从父目录继承来自的权限成为“继承权限”,把用户单独分配的权限称为“指定权限”。

$Path = 'c:\sampleFolderNTFS'

# 创建新目录
$null = New-Item -Path $Path -ItemType Directory -ErrorAction SilentlyContinue

# 获取指定权限
$acl = Get-Acl -Path $path
$acl.Access |
Where-Object { $_.isInherited -eq $false }

一旦你添加了指定权限,脚本才会有返回结果。下面会演示如何使用PowerShell添加指定权限。脚本会给当前用户添加读,写,和更新的权限。

$acl = Get-Acl -Path $path

# 添加新权限
$permission = $env:username, 'Read,Write,Modify', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# 设置新权限
$acl | Set-Acl -Path $path

删除指定的NTFS权限

在上面的例子中,我们演示了如何给已存在的文件夹添加新的指定权限。如果你想把这些添加的指定权限删掉,解铃还须系铃人,可以尝试下面的脚本。

#请确保文件夹存在
$Path = 'c:\sampleFolderNTFS'

# 获取指定权限
$acl = Get-Acl -Path $path
$acl.Access |
Where-Object { $_.isInherited -eq $false } |
# 删除所有指定权限
ForEach-Object { $acl.RemoveAccessRuleAll($_) }

# 设置新权限
$acl | Set-Acl -Path $path

 

管理NTFS继承权限

上面的例子我们不止一次提到了继承权限,貌似很神秘,其实就是从父文件夹继承来的权限。比如有一个文件夹,我想把所有的权限都牢牢地控制在自己手里,我给它当前用户的权限,给它管理员的权限,但是神马继承来的权限统统删除,请看看下面的例子。

$Path = 'c:\PermissionNoInheritance'
$null = New-Item -Path $Path -ItemType Directory -ErrorAction SilentlyContinue

# 获取当前权限的引用
$acl = Get-Acl -Path $path

# 给当前用户添加权限
$permission = $env:username, 'Read,Modify', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# 给管理器添加权限
$permission = 'Administrators', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# 禁用继承权限
$acl.SetAccessRuleProtection($true, $false)

# 设置新权限
$acl | Set-Acl -Path $path

本文引用链接:

本文链接: https://www.pstips.net/manage-ntfs-permission.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注