设为首页 收藏本站
查看: 1577|回复: 0

PowerShell签名和执行策略

[复制链接]

尚未签到

发表于 2018-9-3 06:33:41 | 显示全部楼层 |阅读模式
  转载自:  http://www.cnblogs.com/herbert/archive/2010/06/12/1756923.html
  主题
  签名和执行策略
  简短说明
  描述 Windows PowerShell 执行策略,以及如何使用和更改它们。
  详细说明
  PowerShell 执行策略通过确定 PowerShell 加载配置文件和运行脚本的条件,为脚本环境提供安全性。
  默认设置为最安全的策略“Restricted”。该设置允许运行单个命令,但不允许运行脚本。
  如果执行策略不允许 PowerShell 加载文件或运行脚本,则将显示警告以解释该 限制的原因。
  “加载扩展类型数据文件时出错:”
  “加载格式数据文件时出错:”
  若要加载文件或运行脚本,请更改执行策略。
  更改执行策略
  ------------------------------
  您可以更改计算机上的 PowerShell 执行策略。该更改将立即生效,且一直保持到再次更改时。只有管理员才可更改该策略。
  若要更改执行策略,请键入:

  •   Set-ExecutionPolicy
  例如,

  •   Set-ExecutionPolicy RemoteSigned
  如果该命令执行成功,则 PowerShell 将显示命令提示符。没有表示执行成功的消息。如果该命令失败,则 PowerShell 将显示一条错误消息,并还原到先前的执行策略。
  若要查看 PowerShell 执行策略,请键入:

  •   Get-ExecutionPolicy
  如果该命令执行失败,则可能是由于拼错了策略名称。请检查该名称,然后重试。如果您无权运行此命令,请与系统管理员联系。
  POWERSHELL 执行策略
  ------------------------------
  PowerShell 执行策略包括:
  Restricted
  - 默认的执行策略。
  - 允许单个命令运行,但无法运行脚本。
  AllSigned
  - 可以运行脚本。
  - 要求可信发布者对所有脚本和配置文件(包括本地计算机上编写的脚本)的
  数字签名。
  - 在运行来自可信发布者的脚本之前对您进行提示。
  - 运行已签名但有恶意的脚本带来的风险。
  RemoteSigned
  - 可以运行脚本。
  - 要求可信发布者对从 Internet(包括电子邮件和即时消息程序)下载的脚本和配置文件的数字签名。
  - 无需从本地计算机上运行的脚本的数字签名。
  - 在运行来自可信发布者的脚本之前不向您提示。
  - 运行已签名但有恶意的脚本带来的风险。
  Unrestricted
  - 可以运行未签名脚本。
  - 在警告您文件来源于 Internet 后,运行从 Internet(包括 Microsoft Outlook、Outlook Express 和 Windows Messenger)下载的脚本和配置文件。
  - 运行恶意脚本带来的风险。
  运行未签名脚本(REMOTESIGNED 执行策略)
  --------------------------------------------------------
  如果 PowerShell 执行策略为 RemoteSigned,则 PowerShell 将不会运行从Internet(包括电子邮件和即时消息程序)下载的未签名脚本。
  如果您试图运行所下载的脚本,则 PowerShell 将显示以下错误消息:
  无法加载文件 C:\remote.ps1。文件 C:\remote.ps1 未经数字签名。无法在系
  统中执行该脚本。有关详细信息,请参阅“Get-Help about_signing”。
  在运行该脚本前,请检查其代码以确保该脚本可信。脚本与任何可执行程序具有同样的效用。
  若要运行未签名脚本,请执行以下操作:
  1. 将脚本文件保存在计算机中。
  2. 依次单击“开始”、“我的电脑”,然后导航到保存的脚本文件。
  3. 右键单击该脚本文件,然后单击“属性”。
  4. 单击“取消阻止”。
  如果从 Internet 下载的脚本具有数字签名,而您尚未选择信任其发布者,则
  PowerShell 将显示以下消息:
  是否要运行来自此不可信发布者的软件? 文件 C:\remote_file.ps1 是由 CN= 发布的。此发布者在您的系统上不受信任。请只运行来自可信发布者的脚本。
  [V] 从不运行  [D] 不运行  [R] 运行一次  [A] 始终运行
  [?] 帮助(默认选择是“D”):
  如果您信任发布者,请选择“运行一次”或“始终运行”。如果您不信任发布者,则请选择“从不运行”或“不运行”。如果选择“从不运行”或“始终运行”,则 PowerShell 将不再针对此发布者提醒您。
  对脚本进行签名的方法
  ------------------------------------------
  可以对编写的脚本以及来自其他源的脚本进行签名。在对任何脚本进行签名前,请检查每条命令并验证运行此脚本是安全的。
  有关如何在 PowerShell 命令行中对脚本文件进行签名的详细信息,请键入:

  •   Get-Help Set-AuthenticodeSignature
  若要为脚本添加数字签名,则必须使用代码签名证书对其进行签名。对脚本文件进行签名可使用以下两种类型的证书:
  -- 由证书颁发机构创建的证书:
  公共证书颁发机构可验证您的身份并向您颁发代码签名证书,但要收取费用。
  在从可信的证书颁发机构购买证书之后,您将可以与运行 Windows 的其他计
  算机上的用户共享该脚本,因为其他计算机信任该证书颁发机构。
  -- 您创建的证书:
  您可以创建“自签名证书”,而您的计算机就是创建该证书的颁发机构。这类证
  书是免费的,它允许您在您的计算机上编写、签名和运行脚本,但是其他计算
  机不信任您的计算机,可能不会运行该脚本。
  如果您创建了自签名证书,请确保为您的证书启用强私钥保护。从而防止恶意
  程序以您的名义对脚本进行签名。本主题的最后部分将提供这些说明。
  创建自签名证书
  -------------------------------------------------------------
  若要创建自签名证书,请使用 MakeCert.exe(一种工具,包含在 Microsoft .NETFramework SDK(1.1 及更高版本)和 Microsoft Platform SDK 中)。
  若要使用 MakeCert 来创建证书,请执行以下操作:
  在 SDK 命令提示符窗口中,运行以下命令:
  第一条命令将为计算机创建本地证书颁发机构。第二条命令从该证书颁发机构生
  成个人证书:

  •   makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `
  •   -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
  •   -ss Root -sr localMachine
  •   makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `
  •   -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
  MakeCert 将提示您输入私钥密码。
  若要验证生成的证书是否正确,请执行以下操作:
  在 PowerShell 提示符下键入:

  •   get-childitem cert:\CurrentUser\My -codesigning
  此命令使用 PowerShell 证书提供程序来查看该证书的相关信息。
  如果该证书已创建完成,则输出将显示该证书的指纹,其中包含 PowerShell 用户的身份验证数据,如下所示:
  目录: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
  指纹                                      使用者
  ----------                                -------
  4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]
  对脚本进行签名
  -------------
  如果您具有自签名证书,则可对脚本进行签名。如果使用 AllSigned 执行策略,则对脚本进行签名允许您在您的计算机上运行该脚本。
  以下示例脚本 sign-file.ps1 可对脚本进行签名。但如果使用 AllSigned 执行策略,则必须在运行 sign-file.ps1 之前对其进行签名。
  若要使用此脚本,请将以下文本复制到文本文件中并将该文本文件命名为
  sign-file.ps1。
  (请确保该脚本文件没有 .txt 文件扩展名。如果文本编辑器向其追加 .txt,则请将
  文件名括在引号中,例如“sign-file.ps1”。)

  •   ## sign-file.ps1
  •   ## 对文件进行签名
  •   param([string] $file=$(throw"请指定文件名。"))
  •   $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
  •   Set-AuthenticodeSignature $file $cert
  若要对 sign-file.ps1 进行签名,请在 PowerShell 命令提示符下键入以下命令:

  •   $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
  •   Set-AuthenticodeSignature sign-file.ps1 $cert
  在对脚本进行签名之后,即可在本地计算机上运行该脚本。但是,如果计算机上的PowerShell 执行策略要求来自可信证书颁发机构的数字签名,则此脚本将无法在该计算机上运行。如果您试图这样做,则 PowerShell 将报告以下错误:
  无法加载文件 C:\remote_file.ps1。无法验证该证书的签名。
  所在行:1 字符:15
  + .\ remote_file.ps1

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561734-1-1.html 上篇帖子: nagios & powershell 分享几个简单实用的监控脚本 下篇帖子: Powershell进阶学习(1) 浅谈Powershell学习方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表