Hide password changes for managed SGU users
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
# SGU Credential Provider 0.6.9
|
||||||
|
|
||||||
|
Esta versión completa la autoridad de contraseñas del Auth Broker en la
|
||||||
|
interfaz de Windows.
|
||||||
|
|
||||||
|
- La GPO `SGU - User session restrictions` habilita la directiva **Remove
|
||||||
|
Change Password** para todas las cuentas bajo `OU=Usuarios-SGU`.
|
||||||
|
- La opción **Cambiar una contraseña** deja de aparecer en la pantalla de
|
||||||
|
seguridad de Ctrl+Alt+Supr.
|
||||||
|
- La protección real continúa en Active Directory mediante las denegaciones
|
||||||
|
del derecho extendido `Change Password`; la GPO únicamente evita mostrar una
|
||||||
|
acción que esas cuentas no pueden completar.
|
||||||
|
|
||||||
|
El Auth Broker conserva el derecho administrativo separado `Reset Password`
|
||||||
|
para sincronizar la contraseña institucional después de una autenticación SGU
|
||||||
|
válida.
|
||||||
@@ -21,6 +21,10 @@ the same source list. RDP uses a separate allowlist. See
|
|||||||
- Managed `Usuarios-SGU` accounts deny the SELF and Everyone `Change Password`
|
- Managed `Usuarios-SGU` accounts deny the SELF and Everyone `Change Password`
|
||||||
extended right. Only an administrator or the broker through the separate
|
extended right. Only an administrator or the broker through the separate
|
||||||
`Reset Password` right can replace the AD password.
|
`Reset Password` right can replace the AD password.
|
||||||
|
- The `SGU - User session restrictions` GPO also hides the **Change a
|
||||||
|
password** command from the Windows Ctrl+Alt+Delete security screen for
|
||||||
|
managed users. This is a user-interface complement to the directory ACL,
|
||||||
|
not a substitute for it.
|
||||||
- There is no HMAC password, pepper, local password cache, Supabase password, or
|
- There is no HMAC password, pepper, local password cache, Supabase password, or
|
||||||
other derived credential in this Windows path.
|
other derived credential in this Windows path.
|
||||||
- Neither application logs request bodies or passwords. Deployment configuration
|
- Neither application logs request bodies or passwords. Deployment configuration
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ param(
|
|||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
$policyKey = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System'
|
$policyKey = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System'
|
||||||
$policyValueName = 'DisableLockWorkstation'
|
$policyValueName = 'DisableLockWorkstation'
|
||||||
|
$disableChangePasswordValueName = 'DisableChangePassword'
|
||||||
$desktopPolicyKey = 'HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop'
|
$desktopPolicyKey = 'HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop'
|
||||||
$themeKey = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize'
|
$themeKey = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize'
|
||||||
|
|
||||||
@@ -76,6 +77,17 @@ if ($PSCmdlet.ShouldProcess($GpoName, 'Prevent SGU users from manually locking w
|
|||||||
-Type DWord `
|
-Type DWord `
|
||||||
-Value 1 | Out-Null
|
-Value 1 | Out-Null
|
||||||
|
|
||||||
|
# The directory ACL remains the security boundary. This user policy also
|
||||||
|
# removes the unusable Change a password action from Ctrl+Alt+Delete.
|
||||||
|
Set-GPRegistryValue `
|
||||||
|
-Name $GpoName `
|
||||||
|
-Domain $domainName `
|
||||||
|
-Server $DomainController `
|
||||||
|
-Key $policyKey `
|
||||||
|
-ValueName $disableChangePasswordValueName `
|
||||||
|
-Type DWord `
|
||||||
|
-Value 1 | Out-Null
|
||||||
|
|
||||||
Set-GPRegistryValue `
|
Set-GPRegistryValue `
|
||||||
-Name $GpoName `
|
-Name $GpoName `
|
||||||
-Domain $domainName `
|
-Domain $domainName `
|
||||||
@@ -135,6 +147,12 @@ $configuredValue = Get-GPRegistryValue `
|
|||||||
-Server $DomainController `
|
-Server $DomainController `
|
||||||
-Key $policyKey `
|
-Key $policyKey `
|
||||||
-ValueName $policyValueName
|
-ValueName $policyValueName
|
||||||
|
$disableChangePasswordValue = Get-GPRegistryValue `
|
||||||
|
-Name $GpoName `
|
||||||
|
-Domain $domainName `
|
||||||
|
-Server $DomainController `
|
||||||
|
-Key $policyKey `
|
||||||
|
-ValueName $disableChangePasswordValueName
|
||||||
$screenSaverValue = Get-GPRegistryValue `
|
$screenSaverValue = Get-GPRegistryValue `
|
||||||
-Name $GpoName `
|
-Name $GpoName `
|
||||||
-Domain $domainName `
|
-Domain $domainName `
|
||||||
@@ -175,6 +193,7 @@ if ($WallpaperPath) {
|
|||||||
TargetOu = $TargetOuDn
|
TargetOu = $TargetOuDn
|
||||||
LinkEnabled = [bool]$linkEnabled
|
LinkEnabled = [bool]$linkEnabled
|
||||||
DisableLockWorkstation = [int]$configuredValue.Value
|
DisableLockWorkstation = [int]$configuredValue.Value
|
||||||
|
DisableChangePassword = [int]$disableChangePasswordValue.Value
|
||||||
ScreenSaverDisabled = [string]$screenSaverValue.Value -eq '0'
|
ScreenSaverDisabled = [string]$screenSaverValue.Value -eq '0'
|
||||||
DarkMode = ([int]$appsThemeValue.Value -eq 0) -and ([int]$systemThemeValue.Value -eq 0)
|
DarkMode = ([int]$appsThemeValue.Value -eq 0) -and ([int]$systemThemeValue.Value -eq 0)
|
||||||
Wallpaper = $configuredWallpaper
|
Wallpaper = $configuredWallpaper
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
$repositoryRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
|
$repositoryRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
|
||||||
$synchronizerPath = Join-Path $repositoryRoot 'src\SGU.AuthBroker\Services\ActiveDirectorySynchronizer.cs'
|
$synchronizerPath = Join-Path $repositoryRoot 'src\SGU.AuthBroker\Services\ActiveDirectorySynchronizer.cs'
|
||||||
$deployPath = Join-Path $repositoryRoot 'scripts\Deploy-AuthBroker.ps1'
|
$deployPath = Join-Path $repositoryRoot 'scripts\Deploy-AuthBroker.ps1'
|
||||||
|
$userPolicyPath = Join-Path $repositoryRoot 'scripts\Set-SguDomainUserPolicies.ps1'
|
||||||
$synchronizer = Get-Content -LiteralPath $synchronizerPath -Raw
|
$synchronizer = Get-Content -LiteralPath $synchronizerPath -Raw
|
||||||
$deploy = Get-Content -LiteralPath $deployPath -Raw
|
$deploy = Get-Content -LiteralPath $deployPath -Raw
|
||||||
|
$userPolicy = Get-Content -LiteralPath $userPolicyPath -Raw
|
||||||
|
|
||||||
Describe 'SGU Auth Broker password authority' {
|
Describe 'SGU Auth Broker password authority' {
|
||||||
It 'denies the Change Password extended right to SELF and Everyone before SetPassword' {
|
It 'denies the Change Password extended right to SELF and Everyone before SetPassword' {
|
||||||
@@ -18,4 +20,9 @@ Describe 'SGU Auth Broker password authority' {
|
|||||||
$deploy | Should Match 'Get-ADUser.*-SearchBase \$usersOuDn.*-SearchScope Subtree'
|
$deploy | Should Match 'Get-ADUser.*-SearchBase \$usersOuDn.*-SearchScope Subtree'
|
||||||
$deploy | Should Match '(?s)Set-ADAccountControl.*-CannotChangePassword \$true'
|
$deploy | Should Match '(?s)Set-ADAccountControl.*-CannotChangePassword \$true'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
It 'removes Change Password from the Windows security screen for managed users' {
|
||||||
|
$userPolicy | Should Match "disableChangePasswordValueName = 'DisableChangePassword'"
|
||||||
|
$userPolicy | Should Match '(?s)-ValueName \$disableChangePasswordValueName.*-Type DWord.*-Value 1'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user