ICACLS를 사용하여 사용자 디렉토리에 대한 권한 설정


16

사용자 디렉토리에 대한 권한을 재설정하려고하는데 스크립트의 마지막 단계에 약간의 문제가 있습니다. 내 스크립트는 기본적으로 전체 사용자 디렉토리의 소유권을 가져와 디렉토리의 모든 파일 및 폴더에 대한 권한을 재설정하고 필요한 권한을 명시 적으로 부여하고 상위 폴더의 모든 권한 상속을 중지하며 모든 파일에 대한 올바른 소유자 (지정된 사용자)를 설정합니다 파일을 조작 할 수 있도록 자신에게 부여한 권한을 제거합니다. 모든 파일과 하위 폴더에서 자신을 제거하려면이 마지막 단계가 필요하지만 현재는 % userDir %에서 나를 제거하고 상속 된 모든 권한을 아래에 남겨 둡니다. 이것은 ICACLS의 명백한 단점입니다. 누구든지 이것을 달성하는 다른 방법을 알고 있습니까?

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"

Microsoft에서 만든 지원되지 않는 XCACLS.vbs 스크립트를 가지고 놀고 있으며 스크립트의 마지막 줄에 그것을 사용하여 운이 좋았습니다. 이 ICACLS 대신 "E : \ Home Directories \ % userDir %"/ "MYDOMAIN \ % username %"제거 cscript.exe xcacls.vbs "e : \ Test"/ E / R "MYDOMAIN \ % username % "이것은 작동하지만 XCACLS.vbs의 사용에는 심각한 성능 문제가 있으므로 사용하지 않는 것이 좋습니다. 다른 아이디어가 있습니까?
pk.

답변:


18

먼저 관찰 : 상속을 차단할 때마다 미래의 유연성에서 벗어나게됩니다. 모든 비용으로 상속을 차단하지 않습니다.

예를 들어 사용자가 최상위 "E : \ Home Directories"폴더의 내용을 나열 할 수 있도록하려면 다음 권한을 고려하십시오.

  • SYSTEM-모든 권한-이 폴더, 하위 폴더 및 파일에 적용
  • BUILTIN \ Administrators-모든 권한-이 폴더, 하위 폴더 및 파일에 적용
  • BUILTIN \ Authenticated Users-읽기 및 실행-이 폴더에만 적용

마지막 권한은 하위 폴더로 상속되지 않습니다. 각 하위 폴더에서 상속은 활성화 된 상태로 유지되며 사용자는 홈 디렉토리 내에서 권한을 설정할 수있는 사용자에 대한 느낌에 따라 "수정"또는 "모든 권한"권한을 가진 사용자를 지정하기 만하면됩니다. 일반적으로 비 고급 보안 속성 시트에 "인증 된 사용자"를 추가하고 "읽기"및 "읽기 및 실행"확인란의 선택을 취소하여 마지막 권한을 설정 한 다음 "고급"대화 상자로 이동하여 해당 ACE의 "적용 대상"설정을 "이 폴더 만"으로 설정합니다. 클릭 횟수를 기준으로 설정하는 가장 쉬운 방법입니다.)

그러면 스크립트가 다음과 같이됩니다.

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T

상속을 "이 폴더 만"으로 설정 한 상태에서 위에서 설명한 "인증 된 사용자"권한을 추가하면 원하는 기능을 찾고 기능을 찾게되면 향후 유연성을 얻게 될 것입니다. 나중에 모든 사용자 홈 디렉토리로 상속해야하는 권한을 설정해야합니다.

사용자 홈 디렉토리, 리디렉션 된 "내 문서", "데스크톱"등의 폴더 및 로밍 사용자 프로필 디렉토리에 대한 SOP입니다. 잘 작동합니다.

편집하다

re : BUILTIN \ Administrators 액세스에 대한 귀하의 의견

몇 년 동안 BUILTIN \ Administrators 액세스 권한을 부여하는 것에 대해 사람들과 다양한 논쟁을 벌였습니다.

  • 파일에 접근 할 수 있으면 특정 클래스의 사용자 문제를 해결하는 것이 더 쉽습니다. "소유권을 얻는"것은 고통스럽고 많은 파일이 있으면 상당히 느려질 수 있습니다.

  • ICACLS에서 보았 듯이 BUILTIN \ Administrators는 소유권을 "할당"할 수 있으므로 "BUILTIN \ Administrators에 액세스 할 수있는 파일이 없어서"보안 "이 추가되지 않습니다.

  • 감사 (및 잠재적으로 많은 수의 오 탐지 항목을 선별)를 사용하지 않는 한 BUILTIN \ Administrators 사용자가 액세스해서는 안되는 파일의 소유권을 가져 와서 복사 한 후 감사 추적이 수행되지 않습니다. 파일을 "적절한"소유자 및 권한으로 되돌립니다.

  • Microsoft 세계에서 파일 시스템 암호화 (EFS)는 권한이없는 BUILTIN \ Administrators 액세스가 발생하지 않도록하는 문제를 해결하기위한 것입니다. NTFS ACL은이 문제를 해결하지 못합니다. (분명히 EFS는 도시에서 유일한 전시회는 아닙니다. 암호화는 슬라이스 방식에 관계없이 "네트워크 관리자의 액세스 제한"문제를 해결하는 진정한 해답입니다.)

내 생각에, BUILTIN \ Administrators를 사용자 홈 디렉토리 (및 실제로는 모든 폴더)에 대한 액세스 권한으로 지정하지 않으면 실제 보안 수준을 유지하면서도 문제를 해결하는 데 필요한 복잡성과 시간이 늘어나고 있음을 의미합니다 "이없는 보안에 대한 잘못된 인식을 부여하기 때문입니다.)

나는 논리를 통해 사람들과 논쟁을이기려고 노력을 포기했습니다. 일부 사람들에게는 감정적 인 문제인 것 같습니다. 특정 권한있는 그룹이 사용자 사서함을 열지 못하도록 Exchange 조직의 루트에 배치되는 바보 같은 "거부 / 수신 형식"ACE와 같습니다. 실제 보안 (감사없이 ACE를 제거 / 적용 할 수 있기 때문에), 잘못된 보안 감각을 제공하지 않으며 실제 문제를 해결할 때 방해가됩니다.

액세스 권한이있는 BUILTIN \ Administrators에 대한 내 주장이 마음에 들지 않더라도 적절한 경우 "This folder only"상속을 사용하여 상속 계층 구조를 그대로 유지 하려고 합니다. 권한 계층 구조에서 상속을 차단하면 디자인에 대한 내용이 "파손 된"것 (반전 됨)이라는 확실한 신호입니다.


1
BUILTIN \ Administrators에게 전체 디렉토리 구조에 대한 전체 액세스 권한을 부여 하시겠습니까? 나는 우리 (관리자)가 소유권을 가지지 않고 모든 사용자의 디렉토리 / 프로필에 완전히 액세스 할 수 없어야한다고 생각합니다.
pk.

+1, 잘못된 보안 감각에 대한 요점을 사랑합니다 ...
DCookie

1

먼저 스크립트 발췌에 감사드립니다. 나는 똑같은 일을하고 있었지만 다른 곳에 붙어있었습니다. 내 SBS 2008 상자에서 아래 코드는 나를 위해 작동합니다 (물론 상승한다고 가정). OS에서 생성 한 완전히 새로운 (기본) 사용자 폴더의 icacls % userdir % / t를 수행하고이 스크립트를 실행 한 후 폴더의 icacls % userdir % / t와 비교하여 모든 "O 's 및 나는 맞다 " 잘하면 그것은 당신을 위해 작동합니다.

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(oi)(ci)f
ICACLS "E:\Home Directories\%userDir%\*.*" /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%\*.*" /inheritance:r
ICACLS "E:\Home Directories\%userDir%\*.*" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%" /t

친애하는,

 -d

스크립트의 마지막 줄을 확인하십시오. ICACLS가 상속 된 권한을 성공적으로 제거하지 못하는 것은 내 경험이었습니다. "MYDOMAIN \ % username %"폴더의 항목을 제거하지만 하위 폴더의 권한은 변경되지 않습니다. 따라서 "MYDOMAIN \ % username %"은 직접 액세스 한 경우에도 여전히 하위 폴더에 액세스 할 수 있으며 해당 폴더를 찾아 볼 수 없습니다. XCACLS.vbs가이 문제를 해결했습니다. cscript.exe xcacls.vbs "e : \ Test"/ E / R "MYDOMAIN \ % username %"
pk.

그 곳이 . 부분이 내 편집에 들어 왔습니다. 부모 폴더에서 / inheritance : r을 수행해도 동일한 문제가 발생했습니다. 그러나 그것을하고 있습니다. 부모 폴더에서 트릭을 수행하는 것처럼 보였습니다. 위의 내용을 실행 한 후 % userdir %에는 % username %, 시스템 및 관리자가 있지만 그 아래의 모든 항목은 % username % 및 시스템이므로 서버가 처음에 설정 한 방식입니다.

-1

기술적으로 가능한 경우 내 요구 사항에 따라이 명령을 수정하는 데 도움이 필요합니다.

여기 구조가 있습니다

\ 서버 \ 부모 \ 사용자 A \ 유닉스

\ 서버 \ 부모 \ 사용자 B \ 유닉스

\ Server \ Parent \ UserC \ unix .... 등

각 User $ 폴더에는 "unix"라는 이름의 폴더가 있습니다.

"부모"폴더 아래에 나열된 모든 User $ 폴더 (위 구조에서 사용 된 이름)에 대한 모든 권한을 가진 사용자 또는 그룹을 추가하고 싶지만 "unix"폴더에 대한 권한 만 제외하고 싶습니다.

필요한 권한의 적용 가능성 관점에서이 명령이 제대로 작동하지만 제외 기능을 추가 할 수는 없습니다.

icacls "\\ Server \ Parent \ UserA"/ grant Domain \ Group : (OI) (CI) F / T

이 시나리오에서 안내 할 수 있습니까?


1
안녕하세요, 서버 결함에 오신 것을 환영합니다! 답변을 통해 질문하지 마십시오. 질문하기 버튼을 사용하여 요청 을 게시하십시오.
Mr Shunz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.