Windows Server Core 管理与 PowerShell 笔记(四)———— 本地访问控制

2019-04-05 278 Words Windows Powershell

Windows Server Core 管理与 PowerShell 笔记(四)———— 本地访问控制

在上一篇文章中,我们介绍了关于 Windows 用户和用户组的相关操作。Windows 中最常用的登陆方式,就是基于用户口令的身份鉴别机制。 在本文中,我们将会进一步介绍 Windows 的访问控制策略。其中主要包括对于文件和其他各种系统资源的权限控制。

一、Windows 的文件访问权限策略

1.1 安全标识符(SID)

Windows 对于所有的主体(包括用户、组、计算机等)都分配一个安全标识符,这类似于 Linux 中的 uid, gid, pid 等相关概念。 每一个安全标识符都对应了一个安全主体。

Windows 的 SID 由字母 S 开头,而后紧跟多个数字。分别代表了修订级别、颁发机构、子颁发机构、其余颁发机构以及相对标识符构成。

1.2 NTFS 文件权限

NTFS 和 ReFS 的文件权限基本类似,主要分为标准访问权限和特殊访问权限。简单的来说,标注访问权限的细粒度较粗,是多个特殊访问权限的结合, 在一般情况下使用标准访问权限就能够很好的对文件进行访问控制。特殊访问权限的划分非常细致,当有特殊需求的时候,可以使用特殊访问权限加以控制。 由于篇幅原因,我们只重点记录标准访问权限。

在 Windows 中,对于文件的标准访问控制权限主要有以下五种:

  1. 读取:读取文件内容、属性、扩展属性、权限。
  2. 写入:写入或者附加内容,写入属性和扩展属性。
  3. 读取和执行:比写入多了执行文件权限。
  4. 修改:除了读取、写入、执行权限之外,还能够删除该文件。
  5. 完全控制:上述所有权限,外加修改权限和获得所有权。

对于文件夹的标准访问控制权限主要有一下六种:

  1. 读取:列出该文件夹、读取属性、扩展属性以及权限。
  2. 写入:在文件夹内创建新的文件和文件夹,写入属性和扩展属性。
  3. 列出文件夹内容:比读取多一个列出该文件夹中内容的权限。
  4. 读取和执行:具有的权限与“列出文件夹内容”权限一样。但是在继承时有区别,所有文件夹都能继承该属性,而只有子文件夹才能继承“列出文件夹内容”属性。
  5. 修改:具有读取和写入的权限,外加删除该文件夹的权限。(但是没有删除子文件夹和文件的权限)
  6. 完全控制: 具有上述所有权限以及删除子文件夹、文件,更改权限、获得所有权。

1.3 文件权限的运算规则

  1. 权限最小化原则:尽量给用户分配最小的权限,而不分配过多权限。
  2. 累加原则:将用户以及用户所在的所用组的权限叠加,作为用户的权限。
  3. 拒绝有限:当用户某一个组具有拒绝权限时,则直接拒绝该权限。
  4. 继承原则:一个文件夹中的权限默认继承自该文件夹。当然,我们也可以设置权限不继承。注意之前有提到文件夹继承的特殊性。

另外,当使用 SMB 分享文件时,文件同时具有分享权限和NTFS权限。此时对权限取交集。

1.4 Windows 访问控制列表(ACL)

回顾 Linux 的文件权限控制。传统的 Linux 的访问控制,主要是划分为 属主、属组、其他人 三类来进行权限管理,当然还有其他机制在这里暂且不提。 在最近的发行版之中,开始加入了对于访问控制列表(ACL)的更加细致的文件访问控制方法。

Windows 原生使用访问控制列表(ACL)来对文件进行控制。这个列表主要记录了某一个主体(SID)对于这个客体(文件等)的具体访问权限。每一种权限都有允许、拒绝、空三种状态。

我们使用 Get-ACL 来获取某一个文件的访问控制列表,从其中可以看到具体的文件名、拥有者以及具体的访问控制列表。

PS C:\Users\ertuil> Get-Acl .\Documents\readme.txt

    目录: C:\Users\ertuil\Documents
Path           Owner                  Access
----           -----                  ------
readme.txt WIN-DV9QMKNEK7H\ertuil WIN-DV9QMKNEK7H\test Deny  ReadAndExecute...

注意到其中的 Access 是一个 Powershell 列表对象,我们来详细列出其中的内容:

PS C:\Users\ertuil> (Get-Acl .\Documents\readme.txt).Access

FileSystemRights  : ReadAndExecute
AccessControlType : Deny
IdentityReference : WIN-DV9QMKNEK7H\test
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : WIN-DV9QMKNEK7H\ertuil
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

可以看到对 test 用户设置了“读取和执行”的拒绝权限,以及 ertuil 用户、 Administrators 组、 System 组的允许完全控制权限。

同理,我们使用 Set-ACL 来设置某一文件的访问控制列表。例如我们可以加上对于用户 test 的安全控制拒绝权限:

$account = "WIN-DV9QMKNEK7H\test"
$FileSystemRights = "FullControl"
$objType = [System.Security.AccessControl.AccessControlType]::Deny
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$FileSystemRi
ghts,$objType)
$acl = Get-ACL Readme.txt
$acl.SetAccessRule($accessRule)
Set-Acl -Path Readme.txt -AclObject $acl

对于 ACL 对象来说,还有 RemoveAccessRule 函数可以用来删除一项内容。其接受的参数可以是 Access 列表中的具体某一个元素。

二、组策略和本地安全策略

当计算机没有加入域时,其主要策略由“本地组策略”进行设置。当计算机加入域时,域控制器可以对域内的计算机设置多个组,可以为每一个组单独建立“组策略”。

而“本地安全策略”则是“组策略”中非常重要的一部分,主要控制计算机的访问控制等相关设置。我们使用 “gpedit.msc” 来打开 “组策略编辑器”, 而后在“计算机配置” -> “安全设置” 即可查看本地安全策略相关设置。其中的主要设置有:

安全策略经常配置等项目有:

  1. 账户策略
    1. 密码策略:设置密码长度,使用期限等。
    2. 账户锁定策略:登陆失败时的锁定策略。
  2. 本地策略:
    1. 审核策略:各种审计功能是否打开
    2. 用户权限分配:对于特殊任务(关机、远程登录等),指定其所能执行的组和用户
    3. 安全选项:对于各种安全选项是否允许(未登录时关闭计算机等)
  3. 高级Windows Definder: 防火墙配置
  4. 软件限制策略、应用程序限制策略
  5. 高级审核策略:高级等审计是否打开

此外,在组策略的 “Windows 策略” 中,可以修改 DNS 服务器、启动和关机时脚本、打印机等配置。在组策略的“管理模版”中可以配置“控制面板“、“桌面”、“开始菜单”等系统组建的设置。

在 Windows Server Core 中,没有 gpedit.msc 因此我们只能够通过直接修改注册表,或者使用 secedit 命令行工具等,来修改本地安全策略。

三、总结

这里主要介绍了现代 Windows 系统对文件系统访问控制机制,以及安全策略的配置的相关方法。灵活使用这些配置,能够使得我们的系统更加稳定和可靠。 下一部分,将会介绍 Windows 的磁盘管理、进程管理、内存管理、文件共享的相关知识;另外,还将穿插 PowerShell 更加高级的使用方法, 在这一部分,你会发现基于对象的 PowerShell 强大之处。这一部分结束之后,基本已经可以熟练的进行系统的配置。此后,中心将会从系统配置专向网络的方向。