[PS] Verwijder Usergroup van meerdere subfolders.

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • FastFred
  • Registratie: Maart 2009
  • Laatst online: 26-09 18:03
I know, een Powershell cursus zou niet misstaan, maar ik heb nu met spoed ff hulp nodig.

Ik heb een issue met de rechten van Homedir's van onze gebruikers.

In de map Homedirs, staan 228 subfolders, de homedirs van de gebruikers. Die 228 subfolders hebben in het tabje Security de groep Authenticated Users staan, die heeft ie geërfd van de bovenliggende map. Alle gebruikers kunnen dus bij elkaar in hun persoonlijke folder kijken (via een flinke omweg, daarom is ie ons ook niet eerder opgevallen), en dat is niet de bedoeling.

Ik wil die Authenticated User groep eruit hebben, maar dat is nogal een gedoe om dat met het handje te doen voor alle 220 subfolders (ik heb er een paar handmatig gedaan om te testen).

Is daar een Powershell scriptje voor te brouwen? Ik kan er maar weinig voor vinden voor dit specifieke geval en dat wat ik vind werkt niet, en ik heb geen flauw idee waarom :P

Via Google was ik al hier op uit gekomen, dit zou specifiek voor subfolders van een bepaalde map zijn, maar dat doet niks, zelfs geen foutmelding. Daar zal vast ergens iets niet goed zijn, maar ik weet dus niet wat

In dit voorbeeld $user en $folders verwijzen naar een testmapje dat ik aangemaakt heb om het script te testen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$user = 'Geverifieerde gebruikers'
$folders = "E:\Documents\Mijn Documenten\testmap"
Foreach($folder in $folders) { 
Get-ChildItem -Path $folder -Recurse | Foreach {$object = $_.FullName; 
 $acls = Get-Acl -Path $_.FullName; 
 foreach ($acl in $acls) {
  foreach ($access in $acl.Access) {
   foreach ($value in $access.IdentityReference.Value) {
    if ($value -eq $user) {
     $acl.RemoveAccessRule($access)
} } } }
Set-Acl -path $object -aclObject $acl
} }

[ Voor 3% gewijzigd door FastFred op 01-08-2018 09:48 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Xanthian
  • Registratie: Juli 2012
  • Laatst online: 22-09 10:11
Even simpel gedacht....

Je kan toch gewoon de groep verwijderen uit de bovenliggende map? Dan moet alle onderliggende mappen ook aangepast worden.

Dit gaat alleen fout als de onderliggende mappen geen inheritance hebben.

Acties:
  • 0 Henk 'm!

  • FastFred
  • Registratie: Maart 2009
  • Laatst online: 26-09 18:03
Hahaha, waarom moeilijk denken als het ook makkelijk kan natuurlijk. Daar had ik zelf nog niet aan gedacht.

Kunnen de gebruikers dan nog wel bij hun eigen homedir omdat die wel in de map staat waar men dan geen toegang meer toe heeft? Als ik Authenticated Users in de hoofdmap weghaal dan zijn de enigen die nog toegang tot die map hebben, de administrators.

Ik moet er even bij vermelden dat de homedirs recent verhuisd zijn naar een 2012R2 server. Op de oude 2008R2 server, waar de oude homedirs nog staan, heeft de Homedir folder wel Authenticated Users. Inheritance op de subfolders staat aan, maar Authenticated Users staat daar niet bij.

[ Voor 10% gewijzigd door FastFred op 01-08-2018 16:25 ]


Acties:
  • 0 Henk 'm!

  • tweakict
  • Registratie: Februari 2010
  • Laatst online: 19-09 13:35
Sec gezien zou je alle gebruikers "full control" rechten moeten geven op zijn / haar eigen homdir folder. Hierdoor garandeer je dat enkel de gebruiker in kwestie rechten heeft tot deze map.

De "administrator" en of "domain admins" leden zouden sowieso al geen (directe) toegang moeten hebben tot deze folders. Iets met privacy en zo.

Acties:
  • 0 Henk 'm!

  • FastFred
  • Registratie: Maart 2009
  • Laatst online: 26-09 18:03
@tweakict de gebruikers zelf hebben uiteraard gewoon Full Control in hun eigen homedir, maar Authenticated Users dus ook, dat is nou net het probleem.

Het komt overigens te vaak voor dat mensen iets wegdonderen dat wij weer uit de backup mogen vissen, dus toegang tot de Homedirs is niet anders. Hebben we een apart admin account voor.

Acties:
  • 0 Henk 'm!

  • Xanthian
  • Registratie: Juli 2012
  • Laatst online: 22-09 10:11
FastFred schreef op woensdag 1 augustus 2018 @ 16:24:
Hahaha, waarom moeilijk denken als het ook makkelijk kan natuurlijk. Daar had ik zelf nog niet aan gedacht.

Kunnen de gebruikers dan nog wel bij hun eigen homedir omdat die wel in de map staat waar men dan geen toegang meer toe heeft? Als ik Authenticated Users in de hoofdmap weghaal dan zijn de enigen die nog toegang tot die map hebben, de administrators.

Ik moet er even bij vermelden dat de homedirs recent verhuisd zijn naar een 2012R2 server. Op de oude 2008R2 server, waar de oude homedirs nog staan, heeft de Homedir folder wel Authenticated Users. Inheritance op de subfolders staat aan, maar Authenticated Users staat daar niet bij.
Ja, normaliter zou je Authenticated Users alleen rechten moeten heb op die map. Via je Advanced Settings kan je er dan voor zorgen dat het alleen op die map geldt en niet op alle onderliggende mappen. Als je die groep verwijderd moet je het op deze manier, via Advanced weer goed zetten.

Normaal moeten die rechten ook via AD geregeld worden. In de AD vul je de homefolder locatie in, AD regelt de rest, incl. rechten. Maar omdat de boel verhuist is, is de situatie anders.

Acties:
  • 0 Henk 'm!

  • FastFred
  • Registratie: Maart 2009
  • Laatst online: 26-09 18:03
Dan hebben we denk ik nog een ander probleem. Want 4 gebruikers die ik maandag aangemaakt hebt, hebben ook de Authenticated Users staan in de permissies van hun homedirs.

En ja inderdaad, we maken de gebruiker aan in AD, meestal kopiëren we een al bestaande gebruiker de meeste gegevens zijn toch vaak hetzelfde. En bij de eerste keer inloggen wordt de homedir gegenereerd en rechten gezet. Op de oude server kwam Authenticated Users er niet bij te staan, op de nieuwe server wel (zowel bij nieuwe users als bij users van voor de verhuizing).

[ Voor 6% gewijzigd door FastFred op 01-08-2018 17:01 ]


Acties:
  • 0 Henk 'm!

  • Appel
  • Registratie: November 2007
  • Laatst online: 21-08 16:07
FastFred schreef op woensdag 1 augustus 2018 @ 16:57:
Dan hebben we denk ik nog een ander probleem. Want 4 gebruikers die ik maandag aangemaakt hebt, hebben ook de Authenticated Users staan in de permissies van hun homedirs.

En ja inderdaad, we maken de gebruiker aan in AD, meestal kopiëren we een al bestaande gebruiker de meeste gegevens zijn toch vaak hetzelfde. En bij de eerste keer inloggen wordt de homedir gegenereerd en rechten gezet. Op de oude server kwam Authenticated Users er niet bij te staan, op de nieuwe server wel (zowel bij nieuwe users als bij users van voor de verhuizing).
Nou ja, 4 gebruikers zijn nog wel handmatig te overzien :-)

Ik had toevallig al een beginnetje liggen voor een script wat hetzelfde deed, maar ik ben er uiteindelijk ook uitgekomen met op een hoger niveau de permissions corrigeren. Je zou namelijk voldoende moeten kunnen met inheritance en creator-owner.

Mocht iemand anders in de toekomst nog wel met deze vraag zitten, misschien dat mijn beginnetje je verder op weg kan helpen. Let wel op, dit script zet inheriance uit...

code:
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
## Script to disable inheritance of permissions and to remove a security object.
## When editing these permissions I had to run the Get-Acl and Set-Acl multiple times.
## This was because new permissions kept popping up after each Set-Acl

## Manual Variables
$folders = "D:\testdir"
$badpermission = "NT AUTHORITY\Authenticated Users"

## Script-wide variables
$userdir = Get-ChildItem $folders -Directory
#$userdir = Get-ChildItem $folders -Directory -Recurse

Set-Location $folders

Function Func-DisableInheritance () {
    ## Store the ACL of the Folder in a Var
    $acl = Get-Acl $dir.Fullname
    
    ## Disable Inheritance, but save the ACE's
    $acl.SetAccessRuleProtection($True, $True)
    
    ## Writing the ACL to Folder.
    Set-Acl -Path $dir.FullName -AclObject $acl -WhatIf
    
    ## Cleaning the $acl Var
    $acl = ""
    Write-Host -ForegroundColor Green "Disabled Inheritance for $dir"
    }

Function Func-CleanACL () {
    ## Reading the ACL again.
    $acl = Get-Acl $dir.Fullname

    ## Now to edit the permissions in the variable.
        $rules = $acl.Access | Where-Object {$_.IdentityReference -like $badpermission}
    ForEach ($rule in $rules) {$acl.RemoveAccessRule($rule) | Out-Null}
    
    ## Writing the ACL to the folder
    Set-Acl -Path $dir.FullName -AclObject $acl -WhatIf

    ## Cleaning the $acl Var
    $acl = ""
    Write-Host -ForegroundColor Blue "Cleaned Permissions for $dir"
    }

ForEach ($dir in $userdir) {

    ## First we need to disable Inheritance. Otherwise, we can't remove the permission.
    Func-DisableInheritance
    ## To Remove all 'evidence' of our NTFS oopsie, we need to run the removal of the ACL rules multiple times.
    Func-CleanACL
    Func-CleanACL
    }

Write-Host "The script has finished running. If you have any errors, good luck."

Acties:
  • 0 Henk 'm!

  • jeroenvdnberg
  • Registratie: Juni 2005
  • Laatst online: 25-09 08:57
FastFred schreef op woensdag 1 augustus 2018 @ 09:46:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$user = 'Geverifieerde gebruikers'
$folders = "E:\Documents\Mijn Documenten\testmap"
Foreach($folder in $folders) { 
Get-ChildItem -Path $folder -Recurse | Foreach {$object = $_.FullName; 
 $acls = Get-Acl -Path $_.FullName; 
 foreach ($acl in $acls) {
  foreach ($access in $acl.Access) {
   foreach ($value in $access.IdentityReference.Value) {
    if ($value -eq $user) {
     $acl.RemoveAccessRule($access)
} } } }
Set-Acl -path $object -aclObject $acl
} }
Je eerste foreach lijkt niet te kloppen. Als ik het volgende stukje code gebruik doet hij het wel:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$user = 'NT AUTHORITY\Geverifieerde gebruikers'
$rootfolder = "C:\temp\test"
$folders = Get-ChildItem -Path $rootfolder

Foreach($folder in $folders) { 
    $acls = Get-Acl -Path $folder.FullName 
    foreach ($acl in $acls) {
        foreach ($access in $acl.Access) {
            foreach ($value in $access.IdentityReference.Value) {
                if ($value -eq $user) {
                    $acl.RemoveAccessRule($access) | Out-Null
                }
            }
        }
    }
    Set-Acl -path $folder.FullName -aclObject $acl
}


Je moet wel eerst de inheritance onderbreken, anders gaat het niet werken. Op het object moeten dus explicite rechten staan.

Acties:
  • 0 Henk 'm!

  • tweakict
  • Registratie: Februari 2010
  • Laatst online: 19-09 13:35
FastFred schreef op woensdag 1 augustus 2018 @ 16:57:
Dan hebben we denk ik nog een ander probleem. Want 4 gebruikers die ik maandag aangemaakt hebt, hebben ook de Authenticated Users staan in de permissies van hun homedirs.

En ja inderdaad, we maken de gebruiker aan in AD, meestal kopiëren we een al bestaande gebruiker de meeste gegevens zijn toch vaak hetzelfde. En bij de eerste keer inloggen wordt de homedir gegenereerd en rechten gezet. Op de oude server kwam Authenticated Users er niet bij te staan, op de nieuwe server wel (zowel bij nieuwe users als bij users van voor de verhuizing).
1) Niet doen. Hiermee creëer je mogelijk per ongeluk een security incident (user X heeft mogelijk te veel rechten dan de nieuwe user nodig heeft). Maak een default template user met minimale rechten en breid dit uit waar nodig. Dit scheelt je achteraf een hoop uitleg.

2) Dit is inheritance vanaf een hoger niveau. Dit goed controleren.

Acties:
  • 0 Henk 'm!

  • FastFred
  • Registratie: Maart 2009
  • Laatst online: 26-09 18:03
Ik ga hier niet eeuwig discussies voeren over hoe wij bepaalde dingen doen en hoe iemand vind dat we dat anders moeten doen.

Ik heb inmiddels handmatig een 10-tal homedirs aangepast met de nieuwe permissies en dit gaat voor alsnog zonder problemen.
Pagina: 1