# lock_peda_ntfs.ps1
# A lancer en tant qu'ADMIN local sur le PC
# 1. Vérifier qu'on est admin
$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
Write-Error "Merci de lancer ce script en tant qu'administrateur."
exit 1
}
Write-Host "=== Création des groupes Eleves / Profs / AdminPedago (si besoin) ==="
function Ensure-LocalGroup {
param([string]$Name)
if (-not (Get-LocalGroup -Name $Name -ErrorAction SilentlyContinue)) {
net localgroup "$Name" /add | Out-Null
Write-Host "Groupe créé : $Name"
} else {
Write-Host "Groupe déjà présent : $Name"
}
}
Ensure-LocalGroup "Eleves"
Ensure-LocalGroup "Profs"
Ensure-LocalGroup "AdminPedago"
Write-Host "`n=== Création des comptes eleve / prof (standard) ==="
function Ensure-LocalUser {
param(
[string]$UserName,
[string]$Password,
[string]$FullName,
[string]$GroupName
)
if (-not (Get-LocalUser -Name $UserName -ErrorAction SilentlyContinue)) {
Write-Host "Création du compte $UserName ..."
net user "$UserName" "$Password" /add /y /fullname:"$FullName" /passwordchg:no /passwordreq:yes | Out-Null
} else {
Write-Host "Compte déjà existant : $UserName"
}
Write-Host " - Ajout de $UserName dans $GroupName"
net localgroup "$GroupName" "$UserName" /add | Out-Null
Write-Host " - Ajout de $UserName dans Users"
net localgroup "Users" "$UserName" /add | Out-Null
}
# Si tu gères déjà les comptes toi-même, tu peux commenter ces 2 lignes
Ensure-LocalUser -UserName "eleve" -Password "eleve" -FullName "Compte eleve" -GroupName "Eleves"
Ensure-LocalUser -UserName "prof" -Password "prof" -FullName "Compte prof" -GroupName "Profs"
Write-Host "`n=== Durcissement NTFS des outils système (admins uniquement) ==="
# EXE Windows à BLOQUER pour tous les non-admins
$targets = @(
"$env:WINDIR\System32\cmd.exe",
"$env:WINDIR\System32\WindowsPowerShell\v1.0\powershell.exe",
"$env:WINDIR\System32\WindowsPowerShell\v1.0\powershell_ise.exe",
"$env:WINDIR\regedit.exe",
"$env:WINDIR\System32\mmc.exe",
"$env:WINDIR\System32\taskmgr.exe",
"$env:WINDIR\System32\control.exe",
"$env:WINDIR\ImmersiveControlPanel\SystemSettings.exe"
)
# SIDs bien connus (pour éviter les noms FR/EN)
$SID_Admins = "*S-1-5-32-544" # Administrators
$SID_Users = "*S-1-5-32-545" # Users
$SID_AuthUsers = "*S-1-5-11" # Authenticated Users
$SID_Everyone = "*S-1-1-0" # Everyone
foreach ($t in $targets) {
if (-not (Test-Path $t)) {
Write-Warning "Introuvable, je passe : $t"
continue
}
Write-Host "Traitement de : $t"
# Prendre la propriété pour pouvoir modifier les ACL si TrustedInstaller
takeown /F "$t" /A > $null 2>&1
# Donner contrôle total aux admins pour réparer les ACL
icacls "$t" /grant:r "$SID_Admins:(F)" > $null 2>&1
# Désactiver l'héritage, copier les ACE existants
icacls "$t" /inheritance:d > $null 2>&1
# Virer les droits Users / Authenticated Users / Everyone
icacls "$t" /remove "$SID_Users" "$SID_AuthUsers" "$SID_Everyone" > $null 2>&1
# Reposer une ACL propre : SYSTEM full, Admins lecture/exécution
icacls "$t" /grant:r "SYSTEM:(F)" "$SID_Admins:(RX)" > $null 2>&1
}
Write-Host "`n=== FIN ==="
Write-Host "Tous les comptes NON admin ne peuvent plus lancer : CMD, PowerShell, Regedit, MMC, Taskmgr, Panneau de config, Paramètres."
Write-Host "Les applis installées (XTool, Chrome, etc.) restent utilisables."
Write-Host "Ton compte admin (Administrators) garde l'accès complet."
Write-Host "Si tu ajoutes d'autres EXE à bloquer, rajoute-les simplement dans la liste \$targets."