当前位置: 首页 > news >正文

Windows AD 组策略 通过脚本修改管理员密码:以安全方式

因为本文主要讲的是通过脚本如何以安全方式设置密码,所以关于组策略如何设置请参考这里:

WinServer 2019 AD 组策略 启用本地管理员账号,重置密码_ad域命令启用administrator账户-CSDN博客

我们首先要讲一下,以一般方法创建的脚本文件,如下面 

一、明文方法:

1、创建 ModifyPassword.ps1

Set-LocalUser -Name "administrator" -Password (ConvertTo-SecureString "Sbi@1234" -AsPlainText -Force)

SecureString 是 .net 中的一个类型,它是为了解决安全性而设计出来的一种特殊的字符串类型。比如你使用一个密码字符串创建 SecureString 对象,你无法通过这个对象还原出原来的密码字符串,但是却可以把 SecureString 对象当做密码使用。但这是不安全的,因为任何能够查看脚本的人都能从中找出密码。 

总结:大家都知道通过下面路径就能找到这个脚本,所以密码也会明文暴露出来。 

\\域名\SysVol\域名\Policies\组策略ID\Machine\Scripts\Startup

二、安全方法

把 SecureString 转为加密字符串:通过 ConvertFrom-SecureString 命令,我们可以把一个 SecureString 对象转换成一个 Encrypted Standard String(加密后的一个字符串),然后保存到文件中。在创建 Credential 时直接使用前面保存的文件,从而避免明文密码在系统中出现。

 1、生成Key

# 生成 key
$keyFile = "c:\aes.key"
$key = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($key)
$key | Out-File $keyFile

2、把明文字符串密码转为SecureString对象

$SecurePwd = ConvertTo-SecureString "Admin@123" -AsPlainText -Force

3、把SecureString对象转为加密字符串后,保存到文件

ConvertFrom-SecureString $SecurePwd -Key $key | Out-File "c:\pwd.txt"

4、把 aes.key 跟 pwd.txt 拷贝到脚本位置

5、再创建一个脚本文件 ModifyPassword.ps1

# 读取文件
$PasswdFile = "路径\pwd.txt"
$keyFile = "路径\aes.key"
$key = Get-Content $keyFile# 重新转换成SecureString对象
$SecurePwd = Get-Content $PasswdFile | ConvertTo-SecureString -Key $key# 修改密码
Set-LocalUser -Name Administrator -Password $SecurePwd

总结:虽然域用户还是能通过 sysvol 文件夹找到这个脚本,但是因为看到的是加密后的 pwd.txt 跟aes.key文件,所以不会造成密码泄露。 

相关文章:

  • nc转tif
  • 全栈工程师
  • 【C++入门到精通】智能指针 shared_ptr循环引用 | weak_ptr 简介及C++模拟实现 [ C++入门 ]
  • 【笔记】Helm-4 最佳实践-2 values
  • 01.领域驱动设计:微服务设计为什么要选择DDD学习总结
  • 2024年【G2电站锅炉司炉】新版试题及G2电站锅炉司炉作业考试题库
  • Layui技术积累
  • Qt Quick程序的发布|Qt5中QML和Qt Quick 的更改
  • 【GitHub项目推荐--不错的 Go 学习项目】【转载】
  • ZYNQ程序固化
  • AIGC:让生成式AI成为自己的外脑(文末送书)
  • 操作无法完成,因为文件已在Windows资源管理器中打开,如何解决?以及如何将哔哩哔哩下载好的视频导出到电脑中播放?— 以vivo手机为例
  • 8.多折线图(MuliLineChart)
  • Win10 中 通过脚本弹出TF卡
  • Linux 下查看端口以及释放端口
  • Android开源项目规范总结
  • Fabric架构演变之路
  • If…else
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript类型识别
  • JS 面试题总结
  • LeetCode算法系列_0891_子序列宽度之和
  • PHP变量
  • TypeScript实现数据结构(一)栈,队列,链表
  • Web Storage相关
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对象引论
  • 关于for循环的简单归纳
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 开源SQL-on-Hadoop系统一览
  • 前端路由实现-history
  • 如何用vue打造一个移动端音乐播放器
  • 阿里云移动端播放器高级功能介绍
  • ​configparser --- 配置文件解析器​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #162 (Div. 2)
  • #pragma 指令
  • $.each()与$(selector).each()
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (独孤九剑)--文件系统
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 回调、接口回调、 委托
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net打印*三角形
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @property括号内属性讲解
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...