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

我们知道,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文件以后,因为其不知道其密码,也不能执行其脚本,这样其安全性就会大大提高。欲知详情,敬请查看回分解。


你可能感兴趣的:(PowerShellDSC)