PowerShell脚本授权最佳实践

【TechTarget中国原创】 Windows PowerShell已成为微软在Windows Server上提供的首选管理界面。因为深度整合到Windows Server操作系统,PowerShell表面看上去可以不受任何限制做任何事情。然而,实际上能做得并没有那么多。 Windows Server最好用的功能之一就是可以运行脚本。PowerShell脚本允许代码重复使用,并支持运行复杂的命令序列,这是其他方式无法实现的。 PowerShell脚本的编写者必须关注的一个大问题就是授权。PowerShell是一个功能强大的脚本语言,但只有具备了适当的权限,PowerShell脚本才能正确运行。这一要求有时会带来问题,因为管理员通常被建议只使用标准、用户级权限的帐号登录进行日常操作。管理员帐号通常是保留不用的,只在运行明确需要提升PowerShell脚本权限的任务时才会启用。因此带来的问题就是在并不能保证运行脚本的人具有管理员权限的情况下,如何知道一段PowerShell脚本是否具有运行所需要的权限。 有两种方式能够处理这类PowerShell脚本权限的问题。大多数情况下,一个需要提升权限的PowerShell脚本运行时会执行脚本级的授权认证来获取所需的权限。 管理员编写脚本时采用何种方式授权,取决于该脚本运行时是否支持互动操作。如果一个脚本只是由管理员手动调用,则运行时管理员在场,可以要求管理员手动输入凭证,因此不会带来任何问题。这种方式在两种方式中更为安全,因为管理员授权凭证不会被存储。相反的,如果一个脚本是被自动进程调用的,此时并不能保证管理员在场并能够输入密码。这种情况下,脚本需要能够自动取得密码用于授权。 PowerShell互动授权方法 互动授权是两种方式中更为安全的一种,因为授权凭证不会被存储用作它用。调用互动授权使用Get-Credential命令。通常,Get-Credential的结果被映射为一个变量,因此所获得的凭证可以被映射配置到一条需要授权的命令上。 $c = Get-Credential Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c 在以上例子中,Get-Credential命令被映射为变量$c。运行这句脚本会使Windows弹出一个对话框,要求输入管理员凭证,如图1所示。 图1. 运行Get-Credential命令会弹出对话框,要求输入管理员凭证 注意代码的第二行,Get-WmiObject命令需要授权使用,该授权通过命令最后添加的–Credential转换完成,$c中记录了授权所需的凭证,即刚才输入的用户名和密码。 PowerShell自动授权方法 PowerShell自动授权工作机制与互动授权有所不同。执行自动授权时,需要事先存储凭证信息以便PowerShell在需要时能够获取得到。存储凭证的代码如下所示: Read-Host –AsSecureString | ConvertFrom-SecureString | Out-File C:\Scripts\Password.txt 输入以上命令后,用户输入密码——没有任何密码输入提示,用户仅仅需要输入密码并按下回车键。因为以安全字符串方式处理,输入的密码是掩码显示的,如图2所示。一旦输入完成,密码被写入到一个文本文件中,在该例中,即C:\Scripts\Password.txt,你也可以使用任何其他路径和文件名。密码在文件中以加密的格式存储,如图3所示。 图2. 此命令接受一个密码,然后将密码写入一个文本文件 图3. 文本文件以加密格式存储密码 这种情况下,脚本中通常会设置3个变量。第一个变量为包含在脚本代码中直接指定的用户名。第二个变量保存从文件中读取的密码。第三个变量存储将用户名和密码作为一个整体的凭证。代码如下所示: $Username = "poseydemo\Administrator" $Password = Get-Content c:\scripts\cred.txt | ConvertTo-SecureString $C = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c 如你所见,$Username存储用户名,$Password存储密码,$C存储凭证。 如果选择自动授权完成为PowerShell脚本权限配置,必须确保密码文件保存在一个安全的位置。否则其他PowerShell脚本可以简单地通过读取密码文件内容,获得管理员权限。

TechTarget中国原创内容,原文链接: http://www.searchsv.com.cn/showcontent_92944.htm
© TechTarget中国:http://www.techtarget.com.cn

时间: 2024-10-12 15:34:38

PowerShell脚本授权最佳实践的相关文章

编写Shell脚本的最佳实践

前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用.因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的main函数,不忍直视.同时,由于历史原因,shell有很多不同的版本,而且也有很多有相同功能的命令需要我们进行取舍,以至于代码的规范很难统一. 考虑到上面的这些原

编写Shell脚本的最佳实践,规范二

需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : 无 # Function: mysqldump备份mysql # Create Date: 2016-08-27 缩进有规矩 编码要统一 在写脚本的时候尽量使用UTF-8编码 太长要分行 巧用heredocs 学会查路径 script_dir=$(cd $(dirname $0) && pw

编写Shell脚本的最佳实践,规范一

随着写的SHELL程序越来越多,发现自己每次写都有不同的习惯或者定义了不同的东西,变量名定义得不一样,整个程序缩进不统一,没有注释等问题,等我回过头看这些程序的时候发现很麻烦.所以写了个shell代码规范. 1.1 目的 定义Shell脚本命名和编码规范,统一管理Shell脚本,便于自己和别人查看,提高代码书写速度和美观,暂时只对自己进行约束,其它人只供参考. 1.2 开发工具 shell脚本是个文件,没有开发环境,FC4图形环境下,可用gedit.vi.vim.joe等,推荐使用vim因为这个

脚本编写最佳实践

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05-17, 修改日期: 2014-05-18 在Django 1.6中的settings.py中可以修改130多项设置, 但大多数都继承自默认值. 设置是在web服务器启动时首次载入的, 服务器重启时重新载入, 因此, 程序员们应尽量避免修改正式服务器上使用的settings.py文件. 以下是一些我们

Jenkins最佳实践

原文:http://www.cnblogs.com/itech/archive/2011/11/14/2248460.html Jenkins最佳实践,其实大部分对于其他的CI工具同样的适用: * Jenkins的安全.对Jenkins的用户使用授权和访问控制.默认地Jenkins不执行任何的安全检查,这意味着任何人都可以访问Jenkins 来配置Jenkins,修改job,和执行build.这对于在企业内部使用也许可以接受,但是存在很高的安全风险,例如其他人错误滴删除了job,错误 地配置你的

[转]ASP.NET MVC 4 最佳实践宝典

原文:http://www.cnblogs.com/sonykings/archive/2013/05/30/3107531.html ASP.NET MVC最佳实践 本文档提供了一套旨在帮助创建最佳优化ASP.NET MVC应用程序的 开发人员编码准则. 当然,由您来选择这些优化准则. 模型的建议 Model是定义业务领域相关的对象,应该包含业务逻辑(对象如何动作和关联),验证逻辑(验证对象的有效值),数据逻辑(数据对象如何持久化),和会话逻辑(跟踪用户状态). 创建独立的Model项目,在A

基于AWS的云服务架构最佳实践

ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施.在今天的"信息时代",这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及快速响应时间的需求.本文将强调并重申其中的一些传统观念,并讨论他们如何在融合云计算的发展,还将讨论由于云计算的动态性而产生的一些前所未有的概念(如弹性). 本文的目标是面向云

API测试最佳实践 - 身份验证

适用等级:高级 1. 概况 身份验证通常被定义为是对某个资源的身份的确认的活动,这里面资源的身份指代的是API的消费者(或者说是调用者).一旦一个用户的身份验证通过了,他将被授权访问那些期待访问的资源或API. 验证(Authentication)- 指的是对API最终使用者的确认的活动. 授权(Authorization)- 指对那些验证通过的用户能所能够访问的资源进行确认的活动. 2. 身份验证的标准(Authentication Standars) 身份验证的标准和技术太多了,比如, 2.