[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?

原创 2017年02月21日 11:26:32

我们知道,DSC的资源中,有很多的资源是需要访问文件共享目录,进入本地的用户的目录,或者为一个特定的用户安装一个MSI的安装包,修改注册表;这个时候,如果直接执行调用DSC的资源,则可能会弹出“Access is Denied” 错误或者异常。这个时候就需要在生成的MOF文件里面制定其访问的权限;因为默认的情况下,DSC是通过系统的账号(System account)运行资源的。解决方案就是在PowerShell DSC 5.x中,每一个资源都会默认支持PsDscRunAsCredential的属性。通过PsDscRunAsCredential属性,可以指定其用用户账号或者域账号运行DSC的资源。比如通过下面的命令,我们可以查看到 Group的DSC资源里面就包括一个PsDscRunAsCredential的属性。

PS C:\dsc> Get-DscResource -Name Group -Syntax
Group [String] #ResourceName
{
    GroupName = [string]
    [Credential = [PSCredential]]
    [DependsOn = [string[]]]
    [Description = [string]]
    [Ensure = [string]{ Absent | Present }]
    [Members = [string[]]]
    [MembersToExclude = [string[]]]
    [MembersToInclude = [string[]]]
    [PsDscRunAsCredential = [PSCredential]]
}

下面是一个例子,用来通过修改注册表,来修改用户的CMD命令行的背景颜色的。

Configuration ChangeCmdBackGroundColor    
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Node $AllNodes.NodeName
    {
        Registry CmdPath
        {
            Key                  = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor'
            ValueName            = 'DefaultColor'
            ValueData            = '1F'
            ValueType            = 'DWORD'
            Ensure               = 'Present'
            Force                = $true
            Hex                  = $true
           
PsDscRunAsCredential = Get-Credential
        }
    }                   
}
$configData = @{
    AllNodes = @(
        @{
            NodeName             = 'localhost';
            PSDscAllowPlainTextPassword = $true
        }
    )
}
ChangeCmdBackGroundColor -ConfigurationData $configData

通过上   PsDscRunAsCredential = Get-Credential的配置,需要我们在把DSC 配置文件转换成MOF文件的时候,输入用户名和密码。

我们注意到,输入用户名和密码后,其用户名和密码会保存在MOF文件中。

instance of MSFT_Credential as $MSFT_Credential1ref
{
 Password = "123456";
 UserName = "admin";

};


instance of MSFT_RegistryResource as $MSFT_RegistryResource1ref

{
ResourceID = "[Registry]CmdPath";
 ValueName = "DefaultColor";
 PsDscRunAsCredential = $MSFT_Credential1ref;
 Key = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Command Processor";
 Ensure = "Present";
 Force = True;
 SourceInfo = "C:\\DSC\\ChangeCmdBackGroundColor.ps1::7::9::Registry";
 ValueType = "Dword";
 ModuleName = "PSDesiredStateConfiguration";
 ValueData = {
    "1F"
  };
 Hex = True;
ModuleVersion = "0.0";
 ConfigurationName = "ChangeCmdBackGroundColor";
};


instance of OMI_ConfigurationDocument
{
 Version="2.0.0";
 MinimumCompatibleVersion = "2.0.0";
 CompatibleVersionAdditionalProperties= {"Omi_BaseResource:ConfigurationName"};
Author="Admin";
GenerationDate="02/21/2017 03:07:04";
GenerationHost="PULL51W2K12NSSL";
Name="ChangeCmdBackGroundColor";
};


上面的脚本会直接弹出一个输入用户名和密码的认证框,如何把用户名和密码的认证信息通过写入到文本文件中,直接传入到MOF文件里面呢? 请看下面的配置。

$password = "ThisIsAPlaintextPassword" | ConvertTo-SecureString -asPlainText -Force
$username = "User1"
[PSCredential] $credential = New-Object System.Management.Automation.PSCredential($username,$password)

Configuration ChangeCmdBackGroundColor    
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration


    Node $AllNodes.NodeName
    {
        Registry CmdPath
        {
            Key                  = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor'
            ValueName            = 'DefaultColor'
            ValueData            = '1F'
            ValueType            = 'DWORD'
            Ensure               = 'Present'
            Force                = $true
            Hex                  = $true
            PsDscRunAsCredential = $credential
        }
    }                   
}
$configData = @{
    AllNodes = @(
        @{
            NodeName             = 'localhost';
            PSDscAllowPlainTextPassword = $true
        }
    )
}


ChangeCmdBackGroundColor -ConfigurationData $configData


我们知道,把密码直接放在MOF文件里面是十分不安全的。那么如何把MOF文件的里面的密码通过证书加密,保护起来?这样的话,即使

有恶意攻击者获取到MOF文件以后,因为其不知道其密码,也不能执行其脚本,这样其安全性就会大大提高。欲知详情,敬请查看回分解。


版权声明:本文为博主原创文章,未经博主允许不得转载。

[24]Window PowerShell DSC学习系列---- 如何保护MOF文件里面存储的密码?

在上节笔者分享了[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?MOF文件里面能直接存储明文密码,这样是非常不安全的。那么有什么方式能够把MOF里面存...

[8] Window PowerShell DSC 学习系列----MOF文件和DSC Module的部署

在前面的第7节,笔者分享了如何安装Pull服务器,如何生成MOF文件。那么生成了MOF文件之后,如何在Pull服务器上部署?另外如果MOF文件中又引用了其他的DSC Module或者DSC Resou...

[7] Window PowerShell DSC 学习系列----如何被管理的设置节点注册到Pull Server?

在上一节,[6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?笔者聊到了如何安装Pull Server。那么...

[20]Window PowerShell DSC学习系列---- start-dscconfiguration 中遇到 Access Denied的解决方案

当我们执行start-DscConfiguration -computername psdsc-window201 -Path c:\DSC\TestFile -Wait -Verbose -forc...

[10] Window PowerShell DSC 学习系列----目标节点和Pull 服务器底层通信原理剖析

在本节中,笔者将会用wireshark抓包,并分析目标节点如何和Pull 服务器通信的?注意笔者本机装的Window Management Framework 5.1,如果是其他的版本,可能请求的UR...

[26]Window PowerShell DSC学习系列----如何更换Pull服务器数据库为SQL Server数据库

上节我们提到了如何把PowerShell DSC的数据库换成Access;DSC Pull服务器当前的版本对MS SQL Server是不支持的,该怎么办?另外如果我们需要对Pull服务器建立负载均衡...

[9] Window PowerShell DSC 学习系列----错误诊断和分析

PowerShell DSC就像一个汽车,内部复杂,司机作为一个普通的用户在使用它,因为知道一些汽车的基本常识,所以当汽车发生一些简单的故障时,可以通过汽车自身带的仪表仪器诊断问题出在哪方面,也可以借...

[2] Window PowerShell DSC 学习系列----DSC的资源(Resource)以及配置和格式(Configuration && Sytax )

这个章节主要来讲述DSC的资源(Resource)以及配置和格式(Configuration && Sytax )。...

[1] Window PowerShell DSC 学习系列----DSC的定义和2种架构模式

PowerShell DSC是PowerShell的一部分,是一个新的管理平台,英文全称为,PowerShell Desired Status Configuration,翻译成中文就是理想管理配置状...

[17]Windows PowerShell DSC学习系列---使用WMI Tester调用msft-dsclocalconfigurationmanager类的方法

在这边文章中,其列出了DSC中的本地配置管理引擎中的msft-dsclocalconfigurationmanager类,其列出了这个类中的很多方法。比如GetConfigurationStatus,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?
举报原因:
原因补充:

(最多只允许输入30个字)