linux – 在非Windows平台上签署PowerShell脚本?

linux – 在非Windows平台上签署PowerShell脚本?,第1张

概述我正在开发一个项目,我们使用配置管理远程部署软件,其中一部分将Power Shell脚本提供给 Windows服务器,然后执行这些脚本以执行部分​​设置和/或配置. 当前部署方法将脚本写入磁盘,但不关闭文件句柄.这样做是为了通过防止任何其他进程在执行之前篡改文件来使脚本更“安全”.为了运行脚本,PowerShell必须从stdin读取它,因为如果它无法获得独占访问权限,它就不会运行脚本.调用看起来 我正在开发一个项目,我们使用配置管理远程部署软件,其中一部分将Power Shell脚本提供给 Windows服务器,然后执行这些脚本以执行部分​​设置和/或配置.

当前部署方法将脚本写入磁盘,但不关闭文件句柄.这样做是为了通过防止任何其他进程在执行之前篡改文件来使脚本更“安全”.为了运行脚本,PowerShell必须从stdin读取它,因为如果它无法获得独占访问权限,它就不会运行脚本.调用看起来像这样:

powershell.exe -Command - < C:\temp\some_name.ps1

这有许多缺点,主要是我无法将参数传递给脚本.另外,从stdin读取大型脚本会因为坏字符,换行符等而变得时髦.

我想用更传统的方法调用脚本,例如

powershell.exe -file C:\temp\some_name.ps1 -Param value ...

但也要保持在执行之前确保没有任何东西可以篡改脚本的精神.为此,我想签署powershell脚本并使用“AllSigned”执行策略运行powershell.

问题在于我无法在目标服务器上真正签署脚本,因为它与运行脚本的PowerShell具有相同的问题…我必须释放独占锁以让PowerShell签署该文件,但它可能会得到篡改.

然后,我决定,如果我可以在服务器上签署脚本,将其提供给目标机器,那将更好.但是,我们的配置管理软件服务器都是linux,我一直难以找到在linux上签署PowerShell脚本的方法. Mono支持Authenticode,但开箱即用它只适用于exes和dll.我试过深入了解PowerShell .Net函数,但发现它们使用的是Cryptui.dll,这是特定于windows的.

在这一点上,我正在抓住,无论如何我可以将签名添加到脚本中,否则我将不得不回退到运行非原生脚本的其他方式.如果可能的话,我希望能够在脚本的字符串表示中计算内存中的签名,但是如果我能得到的话,我将采用基于文件的方法.

解决方法 如何将脚本编译为.exe?

ps2exe,甚至一些内置的.net调用可以为你做到这一点.

总结

以上是内存溢出为你收集整理的linux – 在非Windows平台上签署PowerShell脚本?全部内容,希望文章能够帮你解决linux – 在非Windows平台上签署PowerShell脚本?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1047719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存