No intrincado mundo da TI, o gerenciamento do acesso do usuário a determinados recursos do sistema é de extrema importância. Um desses recursos é a caixa de diálogo Executar do Windows. Mas por que os profissionais de TI querem restringir seu acesso? Este guia se aprofunda no script do PowerShell criado para controlar a acessibilidade da caixa de diálogo Executar e as implicações de tais ações.
Visão geral da caixa de diálogo Executar do Windows
-
O que é a caixa de diálogo Executar do Windows?
- A caixa de diálogo Executar do Windows é um recurso que oferece aos usuários uma maneira rápida de iniciar programas, abrir pastas e executar comandos do sistema. Ao pressionar Windows + R, uma pequena caixa de diálogo é exibida, permitindo que os usuários digitem os comandos diretamente.
-
Como é usada a caixa de diálogo Executar do Windows?
- Ele é usado principalmente para acesso rápido. Em vez de navegar por vários menus ou pastas, os usuários podem simplesmente digitar um comando ou caminho na caixa de diálogo Executar para iniciar instantaneamente um programa ou abrir um diretório.
A caixa de diálogo Run é um dos principais locais que as pessoas acessam quando desejam obter acesso ou executar comandos no sistema mais amplo. Como um ponto principal para a execução de comandos e programas, o bloqueio apresenta um ambiente mais controlado e reduz significativamente o risco.
Embora esse não seja o único ponto de execução de comandos e programas, é o mais usado por pessoas que não têm necessariamente experiência em administração de sistemas. O bloqueio deve ser usado em conjunto com outras restrições de segurança (como impedir o acesso ao registro ou ao prompt de comando).
Implicações de segurança da desativação da caixa de diálogo Executar do Windows
Quais são os riscos?
Ao desativar a caixa de diálogo Executar, você pode, inadvertidamente, prejudicar a produtividade. Alguns usuários avançados confiam no Run Dialog para tarefas rápidas e gerenciamento do sistema. Além disso, se não for feita corretamente, a adulteração das configurações do sistema pode levar a outros problemas não intencionais.
Quais são os benefícios?
O principal benefício é o aumento da segurança. Desativar a caixa de diálogo Executar pode evitar ações não autorizadas ou mal-intencionadas, especialmente de usuários que podem não ser bem versados em operações do sistema. Isso reduz o risco de alterações acidentais ou a execução de comandos prejudiciais.
Como você pode reduzir os riscos?
Antes de implementar qualquer mudança, é essencial:
- Comunique-se com os usuários, especialmente aqueles que podem ser afetados pela mudança.
- Fornecer métodos ou ferramentas alternativas para tarefas que antes eram realizadas usando a caixa de diálogo Executar.
- Certifique-se de que haja uma maneira de reverter rapidamente as alterações, se necessário.
Histórico
O script do PowerShell fornecido é uma ferramenta robusta para que os profissionais de TI e os provedores de serviços gerenciados (MSPs) controlem a acessibilidade da caixa de diálogo Executar. Em ambientes em que a segurança é uma prioridade máxima, essas ferramentas se tornam indispensáveis. A capacidade do script de excluir usuários específicos dessas restrições acrescenta uma camada de flexibilidade, garantindo que o acesso necessário não seja completamente revogado.
O roteiro
#Requires -Version 2.0
<#
.SYNOPSIS
Disables or enables the Run Dialog for all users and new users.
.DESCRIPTION
Disables or enables the Run Dialog for all users and new users, and there is an option to exclude users.
Reboot is required to apply changes.
.EXAMPLE
-Disable
Disables the Run Dialog for all users and new users.
.EXAMPLE
-Disable -ExcludeUsers "Test1", "Test2"
Disables the Run Dialog for all users and new users, but excludes Test1 and Test2 users.
.EXAMPLE
-Enable
Enables the Run Dialog for all users and new users.
.EXAMPLE
-Enable -ExcludeUsers "Test1", "Test2"
Enables the Run Dialog for all users and new users, but excludes Test1 and Test2 users.
.OUTPUTS
None
.NOTES
General notes
Release Notes:
Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms.
Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party.
Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider.
Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations.
Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks.
Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script.
EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>
[CmdletBinding()]
param (
[Parameter(Mandatory = $true, ParameterSetName = "Disable")]
[Switch]
$Disable,
[Parameter(Mandatory = $true, ParameterSetName = "Enable")]
[Switch]
$Enable,
[Parameter(Mandatory = $false, ParameterSetName = "Disable")]
[Parameter(Mandatory = $false, ParameterSetName = "Enable")]
[String[]]
$ExcludeUsers
)
begin {
function Set-ItemProp {
param (
$Path,
$Name,
$Value,
[ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
$PropertyType = "DWord"
)
# Do not output errors and continue
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
if (-not $(Test-Path -Path $Path)) {
# Check if path does not exist and create the path
New-Item -Path $Path -Force | Out-Null
}
if ((Get-ItemProperty -Path $Path -Name $Name)) {
# Update property and print out what it was changed from and changed to
$CurrentValue = Get-ItemProperty -Path $Path -Name $Name
try {
Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null
}
catch {
Write-Error $_
}
Write-Host "$Path$Name changed from $CurrentValue to $(Get-ItemProperty -Path $Path -Name $Name)"
}
else {
# Create property with value
try {
New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null
}
catch {
Write-Error $_
}
Write-Host "Set $Path$Name to $(Get-ItemProperty -Path $Path -Name $Name)"
}
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
}
}
process {
$Path = "SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer"
$Name = "NoRun"
$Value = if ($Disable) { 1 }elseif ($Enable) { 0 }else {
Write-Host "Either -Enable or -Disable is required to function."
exit 0
}
# Get each user profile SID and Path to the profile
$UserProfiles = Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionProfileList*" |
Where-Object { $_.PSChildName -match "S-1-5-21-(d+-?){4}$" } |
Select-Object @{Name = "SID"; Expression = { $_.PSChildName } }, @{Name = "UserHive"; Expression = { "$($_.ProfileImagePath)NTuser.dat" } }, @{Name = "UserName"; Expression = { "$($_.ProfileImagePath | Split-Path -Leaf)" } } |
Where-Object { $ExcludeUsers -notcontains $_.UserName }
# Add in the .DEFAULT User Profile
$DefaultProfile = "" | Select-Object SID, UserHive, UserName
$DefaultProfile.SID = ".DEFAULT"
$DefaultProfile.UserHive = "C:UsersPublicNTuser.dat"
try {
# Fix for edge case where PSObject is missing the add operator
$UserProfiles = {
$UserProfiles | ForEach-Object { $_ }
$DefaultProfile
}.Invoke()
}
catch {
Write-Host "Failed to update default profile, skipping."
}
# Loop through each profile on the machine
Foreach ($UserProfile in $UserProfiles) {
# Load User ntuser.dat if it's not already loaded
If (($ProfileWasLoaded = Test-Path -Path "Registry::HKEY_USERS$($UserProfile.SID)") -eq $false) {
Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe LOAD HKU$($UserProfile.SID) $($UserProfile.UserHive)" -Wait -WindowStyle Hidden
}
# Manipulate the registry
$key = "Registry::HKEY_USERS$($UserProfile.SID)$($Path)"
Set-ItemProp -Path $key -Name $Name -Value $Value
# Unload NTuser.dat
If ($ProfileWasLoaded -eq $false) {
[gc]::Collect()
Start-Sleep 1
Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe UNLOAD HKU$($UserProfile.SID)" -Wait -WindowStyle Hidden | Out-Null
}
}
}
end {}
Acesse mais de 300 scripts no NinjaOne Dojo
Detalhamento
O script começa definindo parâmetros, permitindo que os usuários desativem ou ativem o Run Dialog e até mesmo excluam usuários específicos. Uma função, Set-ItemProp, é então definida para gerenciar a criação ou modificação de chaves de registro. O processo principal envolve a definição do caminho do registro relacionado à caixa de diálogo Executar, a recuperação de todos os perfis de usuário e o looping de cada perfil para modificar o registro adequadamente.
Casos de uso em potencial
Considere uma profissional de TI, Sarah, em uma universidade. Para garantir que os computadores do laboratório sejam usados estritamente para fins acadêmicos, Sarah decide desativar o Run Dialog, excluindo os perfis dos assistentes de laboratório. Esse script permite que Alex alcance esse equilíbrio entre segurança e acessibilidade.
Comparações
Embora a Política de Grupo ofereça uma maneira de desativar a caixa de diálogo Executar, ela pode não fornecer a granularidade que esse script oferece. A abordagem direta desse script oferece mais agilidade, especialmente em organizações maiores.
Recomendações
- Faça backup do estado atual do registro antes de fazer modificações.
- Teste o script em um ambiente controlado primeiro.
- Mantenha a lista de usuários excluídos atualizada.
Considerações finais
No mundo dinâmico da TI, ferramentas como o NinjaOne oferecem uma plataforma centralizada para o gerenciamento de TI. A integração de scripts como o discutido garante que os profissionais de TI permaneçam equipados para lidar com qualquer desafio, especialmente quando se trata de gerenciar recursos como a caixa de diálogo Executar do Windows.