2017-01-13 1 views
0

저는 Windows 2012 R2에서 운영 중이며 배치 파일을 사용하여 icacls를 사용하여 NTFS perm을 관리하려고합니다. 배치 파일이 거의 완성 된 후 관리 할 경험이 적은 사람에게 파일을 넘겨 줄 것이므로 가능한 한 그를 쉽게 만들려고합니다.icacls는 드라이브 루트를 대체합니다.

수정 된 경우 드라이브 루트 (E :)의 모든 perm을 자동으로 바꾸려고합니다. 전체 드라이브가 알려진 구성으로 복원됩니다. 그런 다음 모든 하위 디렉토리에 상속을 통해 전파 할 루트 (관리자, 백업 등)에서 몇 가지 perm을 설정합니다. (아마도이 ​​두 가지 작업은 동일한 icacls 호출입니다.) 많은 하위 디렉토리가 있으며 각 하위 디렉토리에 다른 권한이 적용됩니다. 배치 파일의 하위 디렉토리 부분을 완료하고 성공적으로 처리했습니다.

icacls를 사용하여 드라이브 루트의 모든 사용 권한을 바꿀 수 없었습니다. 나는 시도했다 :

ICACLS.EXE "E:" /inheritance:r /grant:r "Administrators":(OI)(CI)F /T /Q 

ICACLS.EXE "E:" /grant:r "Administrators":(OI)(CI)F /T /Q 

모두 성공하지. 테스트를 위해 E :에 액세스 할 수있는 다른 그룹을 추가했습니다. 배치 파일이 성공적으로 완료된 후 다른 그룹은 계속 액세스 할 수 있습니다. E :의 ACL에서 제거되지 않았습니다.

아이디어가 있으십니까?

+0

? "dir/q"는 루트 소유자를 직접 표시하지 않지만 "dir"C : \ Program Files "/ q/ad"는 루트 폴더 인 ".."에 대해 표시합니다. 저에게 그것은 "신뢰할 수있는 설치 관리자"이며 관리자 인 경우에도 icacls를 사용할 수없는 그 소유자와 다른 폴더를 발견했습니다. 그러나 필자는 소유자를 buildin \ admisitrators로 변경하기 위해 takeown을 사용할 수 있습니다. – joeking

+0

기본적으로 사용자가 지정한대로 우리 도메인의 관리자 그룹에 소유권을 부여했습니다 (또는 할당 했습니까?). 흥미롭게도, 그렇게 할 때 속성 >> 보안 >> 고급을 보면 "SYSTEM"이 소유자임을 나타냅니다. 나는 이것이 * 동등하다고 가정한다.어쨌든, 나는 편리한 계정으로 소유권을 가져갈 수 있습니다. 내 문제는 ICACLS가 내 목표를 달성하기 위해 무엇을 요구하는지 모른다. – Derek

+0

어떤 문제가 남아 있습니까? 일반적으로 드라이브의 루트는 TrustedInstaller가 소유합니다. 이것은 UAC 용 Vista에서 생성 된 가상 사용자입니다. 특히 관리자도 시스템 파일을 수정하지 못하도록합니다. CMD 라인에서 "takeown/f C : \/A"는 소유자를 Builtin \ Administrators로 변경해야합니다. 관리자가 소유하고 나면 ICACLS를 사용하여 권한을 변경할 수 있습니다. TAKEOWN이 성공한 후에도 ICACLS는 여전히 실패합니까? – joeking

답변

0

하하, 재미 있습니다 ... ICACLS는 모든 권한을 간단히 대체하는 것처럼 보입니다.

첫 번째 단계는 TAKEOWN을 사용하여 TrustedInstaller에서 소유자를 변경하고 UAC 보증을 무효화하는 것입니다. 관리자 \ \/g 내장 :

그런 CACLS C

f를 당신은 또한 ICACLS/복원이 작업을 수행 할 수 있습니다,하지만 당신은 ACL 파일을 준비해야합니다. ACL 파일에는 파일 이름이 있으므로 작성하는 것이 더 성가시다.

이렇게하려면 간단한 BAT 파일을 사용하십시오.

참고 : ICACLS 정말 까다로운 경우 : ACLFile 보인다

  • 가 UTF-16
  • ACLFile이 파일을 임명했다로 neeed하고, 이름이 상대 주어진 경로에 있습니다 icacls 명령 줄에서.
  • icacls 명령 줄의 foldername은 "\" 중 하나 일 수 없습니다.
  • 루트 디렉토리의 소유자

@echo off 
setlocal 

:: Change the ACL to "BUILTIN\Administrators:(OI)(CI)(F)"  
if exist aclfile.txt del aclfile.txt 

if "%1"=="" echo Requires a filename && exit /b 1 

:: The ACL file is required to be UTF-16 encoded. 
:: Use "icacls FILE /save ACLFILE.txt on a sample 
:: file to get the exact SDDL you want to use 
cmd /u /c echo %~n1 > aclfile.txt 
cmd /u /c echo D:P(A;OICI;FA;;;BA)>>aclfile.txt 

:: Ick, trim the trailing \ 
:: ICACLS is really dumb. 
set pathname=%~dp1 
set pathname=%pathname:~,-1% 
icacls "%pathname%" /restore aclfile.txt 
+0

내가 가진 문제는 "/ C"플래그가 CACLS와 ICACLS의 차이입니다. CACLS에서는 NTFS 액세스 거부 오류 만 무시합니다. (ICACLS는 모든 오류를 무시합니다.) 다른 모든 오류 (파일 경로 길이가 너무 길어서 여러 장소에서 가지고있는 것을 포함하여) 그 자리에서 CACLS 명령을 죽입니다. 이제 CACLS는 내 드라이브를 알 수없는 상태로 남겨 둡니다. 일부 perms 만 설정되었습니다. 나는 도움을 줄 수는 없지만 뭔가를 놓치고 있다고 생각한다. ICACLS를 사용하여 드라이브의 루트에 perm을 설정하는 것이 그렇게 어렵지 않아야한다. – Derek

+0

드라이브의 상태를 알 수 없지만 드라이브의 모든 사용 권한을 바꾸려면 먼저 takeown/f C : \/a/r/skipsl/dy를 먼저 가져와야합니다. 루트 사용 권한을 대체하고, 마지막으로 "icacls/reset/t"를 루트 아래에 각각 추가합니다. 나는 당신이 무엇을 놓치고 있다고 생각하지 않는다. Windows의 ACL은 정말 고통 스럽다. 위의 bat 파일에 대한 수정 사항을 참조하십시오. – joeking

+0

나는 당신이 그것에 대해 더 선택적 일 수 있다고 생각한다. 모든 것에 대한 소유권을 가지지 않고 대신 ICACLS/reset/t를 사용하여 오류를 기록한다. 그런 다음 실패한 항목 만 가져옵니다. 파일의 원래 소유권을 유지하는 데 관심이있는 경우에만 중요합니다. – joeking

관련 문제