Beveiliging / maptoegang aanpassen voor meerdere mappen

Pagina: 1
Acties:

Vraag


  • _Teq_
  • Registratie: Februari 2007
  • Laatst online: 08-11 08:53
Ik heb een PC aan een netwerk, één van de schijven is toegankelijk als netwerkdrive in dit netwerk. Ik heb een aparte user ('gast') aangemaakt om wat folders te kunnen afschermen, met deze user-credentials maak ik verbinding met de netwerkdrive. Op individueel mapniveau werkt dit mooi: via het tabblad 'Beveiliging' kan ik de user 'gast' toevoegen en alle rechten / toegang ontzeggen. Deze map is dan vervolgens niet beschikbaar voor 'gast', wat de bedoeling is.

Nu wil ik eigenlijk alle mappen beveiligen / de toegang ontzeggen, behalve een aantal. Het gaat om honderden mappen, incl. submappen en bestanden. Dit is is natuurlijk niet per map / per keer te regelen en als ik meerdere mappen tegelijk selecteer is het tabblad 'Beveiliging' niet beschikbaar.

Na wat zoekwerk blijkt dat ik niet de enige n00b-beveiliger ben die hier tegenaan loopt. Ik heb geen enkele ervaring met powershell o.i.d. Ik had kort mijn hoop gevestigd op een programma als Set ACL Studio, maar tevergeefs: ook hierin kan ik niet meerdere folders tegelijk selecteren.

Bestaat er een manier om dit op te pakken zonder scripting, of is mijn invalshoek helemaal verkeerd?

Windows 11 Pro btw.

Alle reacties


  • _Teq_
  • Registratie: Februari 2007
  • Laatst online: 08-11 08:53
Niemand? / bump :|

  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 20:23
Als een andere user eigenaar is mag gast er toch standaard niet bij, tenzij je deze expliciet toevoegt?

En eventueel kun je dit wel knutselen met powershell en chatgpt, maar dan moet je wel eerst zeker weten dat je geen xy probleem aan het oplossen bent.

  • _Teq_
  • Registratie: Februari 2007
  • Laatst online: 08-11 08:53
Nee, ik heb een lokaal account 'gast' aangemaakt op de PC die ik toegankelijk wil maken. Dit account is een normale gebruiker (geen administrator). Als ik met deze credentials vanaf een andere PC in het netwerk verbinding maak zie ik dus gewoon alle mappen, behalve degene die ik heb afgeschermd (die zijn wel zichtbaar, maar niet toegankelijk).

Verbinding maken met een ander account (bijvoorbeeld het account van de PC die de verbinding wil maken) gaat natuurlijk niet, dan zou iedereen verbinding kunnen maken en dat is ook weer niet gewenst.

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 07-11 21:07

ElCondor

Geluk is Onmisbaar

Rechten uitdelen is een wetenschap. Veel mensen die daar de tanden op stuk bijten.
Ik los dit zelf meestal op door te scripten. En dan zul je je moeten verdiepen in PowerShell, daarmee kun je dit het best automatiseren zonder dit in een grafische omgeving te hoeven doen.
De meeste admins zullen dit op deze manier doen en daarom vindt je weinig grafische tools, omdat daar eenvoudigweg geen markt voor is.
Daarnaast is het, denk ik, handig om te realiseren dat je alleen de topmappen hoeft af te schermen. Je gast account kan dan niet bij de onderliggende mappen. Dat zou het probleem al aanzienlijk vereenvoudigen.

Maak bijvoorbeeld een folder aan C:\Test.
Stel hier de rechten in zoals je die zou willen toepassen op de folders waar je rechten toe wilt zetten.
Open PowerShell.
Als je PowerShell open hebt in de folder waar de folders zich bevinden waar je toegang toe wilt ontzeggen voer je het volgende in:
PowerShell:
1
2
$AclOmInTeStellen = Get-Acl "C:\Test" #hiermee pak je de rechten op zoals die op C:\Test ingesteld zijn
Get-ChildItem -Directory | Set-Acl $AclOmInTeStellen #hiermee pak je alle folders in de hoofdfolder op en pas je de rechten toe zoals die op C:\Temp waren ingesteld


Ik hoop dat dit een beetje duidelijk uitgelegd is. Als je er mee werkt, zou je uiteraard nog AI kunnen proberen om een betere manier te vinden.

Let op: Als ik jou was, zou ik eerst even een testfoldertje met subfolders maken om een en ander uit te testen.

Succes! d:)b

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


  • _Teq_
  • Registratie: Februari 2007
  • Laatst online: 08-11 08:53
Bedankt, je hebt me op weg geholpen :-)
Na een sessie met Copilot ben ik tot het volgende script gekomen:

- Dit script geeft een GUI / popup waarin ik de map kan kiezen waaronder ik de rechten wil wijzigen;
- Vervolgens kan ik een user aangeven in de GUI;
- Er is een werkende rollback functie aanwezig;
- Met een snelkoppeling heb ik dit eenvoudig werkend gemaakt voor mezelf;

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Add-Type -AssemblyName System.Windows.Forms

# === GUI: map kiezen ===
$folderDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$folderDialog.Description = "Selecteer de map voor toegangswijziging of herstel"
$folderDialog.ShowNewFolderButton = $false

if ($folderDialog.ShowDialog() -ne "OK") {
    [System.Windows.Forms.MessageBox]::Show("Geen map geselecteerd. Script wordt afgebroken.","Actie geannuleerd",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Warning)
    exit
}
$targetPath = $folderDialog.SelectedPath

# === GUI: modus kiezen ===
$modeForm = New-Object System.Windows.Forms.Form
$modeForm.Text = "Kies modus"
$modeForm.Width = 300
$modeForm.Height = 150
$modeForm.StartPosition = "CenterScreen"

$denyButton = New-Object System.Windows.Forms.Button
$denyButton.Text = "Toegang weigeren"
$denyButton.Width = 120
$denyButton.Top = 30
$denyButton.Left = 30
$denyButton.Add_Click({ $modeForm.Tag = "deny"; $modeForm.Close() })
$modeForm.Controls.Add($denyButton)

$rollbackButton = New-Object System.Windows.Forms.Button
$rollbackButton.Text = "Rollback uitvoeren"
$rollbackButton.Width = 120
$rollbackButton.Top = 30
$rollbackButton.Left = 150
$rollbackButton.Add_Click({ $modeForm.Tag = "rollback"; $modeForm.Close() })
$modeForm.Controls.Add($rollbackButton)

$modeForm.ShowDialog()
$mode = $modeForm.Tag

# === Rollback uitvoeren ===
if ($mode -eq "rollback") {
    $backupFile = "$PSScriptRoot\ACL_Backup.json"
    if (-Not (Test-Path $backupFile)) {
        [System.Windows.Forms.MessageBox]::Show("Geen ACL-backup gevonden. Rollback afgebroken.","Fout",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error)
        exit
    }

    $backup = Get-Content $backupFile | ConvertFrom-Json
    foreach ($entry in $backup.PSObject.Properties) {
        $path = $entry.Name
        $sddl = $entry.Value
        try {
            $acl = New-Object System.Security.AccessControl.FileSecurity
            $acl.SetSecurityDescriptorSddlForm($sddl)
            Set-Acl -Path $path -AclObject $acl
        } catch {
            Write-Warning "Fout bij herstel van ${path}: $($_.Exception.Message)"
        }
    }

    [System.Windows.Forms.MessageBox]::Show("Rollback voltooid. ACL's zijn hersteld.","Klaar",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)
    exit
}

# === GUI: gebruiker invoeren ===
$form = New-Object System.Windows.Forms.Form
$form.Text = "Gebruiker invoeren"
$form.Width = 400
$form.Height = 150
$form.StartPosition = "CenterScreen"

$label = New-Object System.Windows.Forms.Label
$label.Text = "Voer de gebruikersnaam in (bijv. DOMAIN\\Gebruiker):"
$label.AutoSize = $true
$label.Top = 20
$label.Left = 10
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Width = 360
$textBox.Top = 50
$textBox.Left = 10
$form.Controls.Add($textBox)

$okButton = New-Object System.Windows.Forms.Button
$okButton.Text = "OK"
$okButton.Top = 80
$okButton.Left = 300
$okButton.Add_Click({ $form.Close() })
$form.Controls.Add($okButton)

$form.ShowDialog()
$user = $textBox.Text

if ([string]::IsNullOrWhiteSpace($user)) {
    [System.Windows.Forms.MessageBox]::Show("Geen gebruiker opgegeven. Script wordt afgebroken.","Fout",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}

# === ACL-backup maken ===
$backup = @{}
Get-ChildItem -Path $targetPath -Recurse -Force | Where-Object { $_.PSIsContainer } | ForEach-Object {
    try {
        $acl = Get-Acl $_.FullName
        $backup[$_.FullName] = $acl.Sddl
    } catch {
        Write-Warning "Fout bij backup van ${_.FullName}: $($_.Exception.Message)"
    }
}
$backup | ConvertTo-Json | Set-Content -Path "$PSScriptRoot\ACL_Backup.json"

# === ACL-regel toepassen ===
$denyRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    $user,
    "FullControl",
    [System.Security.AccessControl.InheritanceFlags]::ContainerInherit,
    [System.Security.AccessControl.PropagationFlags]::None,
    [System.Security.AccessControl.AccessControlType]::Deny
)

Get-ChildItem -Path $targetPath -Recurse -Force | Where-Object { $_.PSIsContainer } | ForEach-Object {
    $itemPath = $_.FullName
    try {
        $acl = Get-Acl $itemPath
        $acl.AddAccessRule($denyRule)
        Set-Acl -Path $itemPath -AclObject $acl
    } catch {
        Write-Warning "Fout bij ${itemPath}: $($_.Exception.Message)"
    }
}

[System.Windows.Forms.MessageBox]::Show("Toegang geweigerd voor $user op alle mappen onder:`n$targetPath","Klaar",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Information)


Het doet wat het moet doen op mijn testmap, dus dat is fijn :-)

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 07-11 21:07

ElCondor

Geluk is Onmisbaar

Chique hoor! Maarrrrrr, SNAP je nu ook een beetje wat er gebeurt? Er zit best een hoop fluff omheen om dat form te maken, bijvoorbeeld. Niet om negatief te doen hoor, fijn script, zeker, maar het wel zo fijn dat als het, om wat voor reden dan ook, niet meer functioneert, je weet te analyseren waar het mis gaat d:)b

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


  • _Teq_
  • Registratie: Februari 2007
  • Laatst online: 08-11 08:53
ElCondor schreef op dinsdag 21 oktober 2025 @ 10:13:
Chique hoor! Maarrrrrr, SNAP je nu ook een beetje wat er gebeurt? Er zit best een hoop fluff omheen om dat form te maken, bijvoorbeeld. Niet om negatief te doen hoor, fijn script, zeker, maar het wel zo fijn dat als het, om wat voor reden dan ook, niet meer functioneert, je weet te analyseren waar het mis gaat d:)b
Absoluut niet: ik kan / ken geen Powerscript :9 Het werkt, na tig iteraties en opnieuw proberen van / met Copilot. Het doet wat het belooft, de rollback werkt ook. Meer vraag ik voor nu niet.

Ik ben begonnen met een veel korter script op basis van jouw input, daarin zitten dus ook veel minder commando's. Dat script doet hetzelfde, maar zonder GUI. Ik zou daarop altijd terug kunnen vallen, omdat dat script minder complex is zou ik dat wel kunnen opbreken in kleinere delen en troubleshooten, indien nodig.

Voor nu ben ik een happy camper, het deert mij niet dat er teveel code in het script zit, want ik begrijp het toch niet :+
Pagina: 1