HALP! 리디렉션 된 폴더 / 홈 디렉토리에 대한 권한 악몽을 상속했습니다.


22

저의 새로운 고용주는 수백 명의 사용자를위한 폴더 리디렉션 설정을 가지고 있으며이를 설정 한 사람은 자신이하는 일을 실제로 알지 못했습니다. 결과적 으로 리디렉션 된 폴더 / 홈 디렉토리에 대한 권한에 대한 모범 사례를 따르지 않았습니다.

사람들이 리디렉션 된 폴더 위치에 액세스 할 수 있도록하는 솔루션은 대신 루트 디렉토리 ( "홈")에 Full Control권한 (물론 "공유"권한이 아닌 NTFS 권한)을 적용 Everyone하고 루트 아래의 모든 하위 폴더 및 파일에 전파하는 것입니다. .

무엇이 잘못 될 수 있습니까? CEO가 자신의 My Documents폴더에 기밀 정보를 가지고 있거나 누군가가 CryptoWall에 감염되어 다른 사람의 파일을 암호화하는 것은 아닙니다. 권리?

어쨌든 CryptoWall 감염이 제거되고 백업이 복원되었으므로 많은 사람들이 현재 권한을 덜 끔찍한 것으로 바꾸고 싶습니다. 여러 가지 권한 대화 상자를 클릭하지 않아도됩니다. 백 폴더.

PowerShell이이 문제를 어떻게 해결하고 다시 살 가치가있는 삶을 만들 수 있습니까?

답변:


18

System.Security.Principal... class 나 메소드 또는 그 무엇이든 나를 언급 한 JScott 덕분에 일부 PowerShell은 여러 하위 폴더의 ACL을 사용자 홈 디렉토리에 적합한 ACL로 대체합니다.

$Root = "Path to the root folder that holds all the user home directories"

$Paths = Get-ChildItem $Root | Select-Object -Property Name,FullName

$DAAR = New-Object system.security.accesscontrol.filesystemaccessrule("MyDomain\Domain Admins","FullControl","ContainerInherit, ObjectInherit","None","Allow")
#Domain Admin Access Rule.

$SysAR = New-Object system.security.accesscontrol.filesystemaccessrule("SYSTEM","FullControl","ContainerInherit, ObjectInherit","None","Allow")
#SYSTEM Access Rule.

foreach ($Folder in $Paths)
{

    Write-Host "Generating ACL for $($folder.FullName) ... "
    #For error handling purposes - not all folders will map to a user of the exact same name, this makes them easier to handle when viewing the output.

    $ACL = New-Object System.Security.AccessControl.DirectorySecurity
    #Creates a blank ACL object to add access rules into, also blanks out the ACL for each iteration of the loop.

    $objUser = New-Object System.Security.Principal.NTAccount("MyDomain\​"+$folder.name)
    #Creating the right type of User Object to feed into our ACL, and populating it with the user whose folder we're currently on.

    $UserAR = New-Object system.security.accesscontrol.filesystemaccessrule( $objuser ,"FullControl","ContainerInherit, ObjectInherit","None","Allow")
    #Access Rule for the user whose folder we're dealing with during this iteration.

    $acl.SetOwner($objUser)
    $acl.SetAccessRuleProtection($true, $false)
    #Change the inheritance/propagation settings of the folder we're dealing with

    $acl.SetAccessRule($UserAR)
    $acl.SetAccessRule($DAAR)
    $acl.SetAccessRule($SysAR)

    Write-Host "Changing ACL on $($folder.FullName) to:"
    $acl | fl
    #For error handling purposes - not all folders will map to a user of the exact same name, this makes them easier to handle when viewing the output.

    Set-Acl -Path $Folder.Fullname -ACLObject $acl

}

1
멋지다, \"따옴표를 이스케이프 한다고 가정 하고 CSS가 엉망입니다!
Canadian Luke REINSTATE MONICA

3
@CanadianLuke 감사합니다! 나는 WTH 궁금했다. CSS를 수정하기 위해 너비가 0 인 공간을 줄입니다. 따라서 누군가 복사 파스타에 대한 충동을 얻으면 슬래시와 $ objuser를 선언하는 인용 부호 사이에 인쇄 할 수없는 문자가 있습니다.
HopelessN00b

2

이전의 대답은하지 작업 할 경우 홈 폴더 / 리디렉션 폴더는 "사용자 독점권을 부여"로 설정되었다. 권장하지 않는 이 옵션을 선택 하면 SYSTEM 및 USER만이 폴더에 대한 권한을 갖기 때문입니다. 그러면 폴더의 소유권을 가지지 않고 권한 (관리자도)을 변경할 수 없습니다.

소유권을 가지지 않고이 문제를 해결할 수있는 방법입니다. 2 단계 프로세스입니다.

ICACLS를 실행하여 폴더 및 하위 폴더의 권한을 수정하는 powershell 스크립트를 작성하십시오.

PSexec를 실행하여 Powershell 스크립트를 시작하십시오.

https://mypkb.wordpress.com/2008/12/29/how-to-restore-administrators-access-to-redirected-my-documents-folder/ 에서 가져와 수정

1 Powershell 스크립트 작성 / 복사 / 훔치기 (PS 3.0 이상 필요)

#ChangePermissions.ps1
# CACLS rights are usually
# F = FullControl
# C = Change
# R = Readonly
# W = Write

$StartingDir= "c:\shares\users"   ##Path to root of users home dirs
$Principal="domain\username"    #or "administrators"
$Permission="F"

$Verify=Read-Host `n "You are about to change permissions on all" `
"files starting at"$StartingDir.ToUpper() `n "for security"`
"principal"$Principal.ToUpper() `
"with new right of"$Permission.ToUpper()"."`n `
"Do you want to continue? [Y,N]"

if ($Verify -eq "Y") {

foreach ($FOLDER in $(Get-ChildItem -path $StartingDir -directory -recurse)) {

$temp = $Folder.fullname
CACLS `"$temp`" /E /P `"${Principal}`":${Permission} >$NULL
#write-host $Folder.FullName 
}
}
  1. PSEXEC를 실행하면 SYSTEM 계정으로 작동하므로 SYSTEM 및 사용자 만 액세스 할 수있는 폴더의 권한을 변경할 수 있습니다. PSexec를 설치하고 실행하십시오. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

명령 행에서 :

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.