Logo Pastebin.fr
Pastebin

Retrouvez, créez et partagez vos snippets en temps réel.

Jekej

# 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."

Créé il y a 2 mois.

Rechercher un Pastebin

Aucun paste trouvé.