Windows에서 명령 행을 사용하여 디렉토리에 대한 권한을 사용자에게 부여하는 방법은 무엇입니까?


답변:


419

Vista에서는 cacls더 이상 사용되지 않습니다. 첫 번째 도움말 라인은 다음과 같습니다.

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

icacls대신 사용해야 합니다. John에게 D:\test폴더 및 모든 하위 폴더에 대한 모든 권한을 부여하는 방법은 다음 과 같습니다.

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

MS 문서에 따르면 :

  • F = 모든 권한
  • CI = Container Inherit-이 플래그는 하위 컨테이너가이 ACE를 상속 함을 나타냅니다.
  • OI = Object Inherit-이 플래그는 하위 파일이 ACE를 상속 함을 나타냅니다.
  • /T= 기존 파일 및 하위 폴더에 재귀 적으로 적용합니다. ( OICI새 파일 및 하위 폴더에만 적용). 크레딧 : @AlexSpence의 코멘트.

완전한 설명서를 icacls보려면 인수없이 " "를 실행 하거나 여기여기에 있는 Microsoft 설명서를 참조 하십시오.


4
Felipe : (OI) 및 (CI) 매개 변수는이 재귀를 만듭니다
Chris Miller

22
Windows 탐색기 UI에서 권한을 변경하려는 액세스 거부 문제가 발생했습니다. / T 플래그를 끝에 추가하면 기존 객체가 교체되어 문제를 해결할 수있었습니다. C :> icacls "D : \ test"/ grant John : (OI) (CI) F / T
Alex Spence

9
@AlexSpence 좋은 지적입니다! / T는 의 권한을 업데이트 할 필요가 기존의 파일과 폴더를 . (OI) 및 (CI)는 나중에 생성 된 파일 및 폴더에만 적용됩니다.
Jesse

5
* nix 세계에서 왔으며 CLI를 통해 액세스 권한을 부여하고 권한을 설정하기 위해 'chown / chmod'에 사용되는이 스레드는 매우 유용했습니다.
bgarlock

5
Windows 10의 Powershell에서이를 실행하면 "OI 인식되지 않음"에 대한 오류가 발생합니다. 솔루션 : user + perms 인수를 따옴표로 묶으십시오. 예를 들면 :C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

ICACLS를 사용할 수도 있습니다.

폴더에 사용자 그룹에게 모든 권한을 부여하려면 다음 을 수행하십시오.

>icacls "C:\MyFolder" /grant Users:F

IIS 사용자 에게 수정 권한 을 부여하려면 C:\MyFolder(IIS에 파일을 특정 폴더로 R / W 할 수있는 기능이있는 경우) :

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

ICACLS를 하면 /? 사용 가능한 모든 옵션을 볼 수 있습니다.


그리고 cacls그것이 사라지면 icacls 를 사용하는 것이 더 많은 이유 입니다.
Ian Boyd

2
/grant Users:(OI)(CI)F사용 하기 전까지는 모든 권한을 추가하지 못했습니다.
Jan Zahradník

Users다른 것 또는 NO 로 교체해야 합니까? icacls "C:\MyFolder" /grant Users:F
iori

현재 사용자가 "Users"라는 사용자 그룹의 구성원 인 경우 (Windows 7에서는 일반적으로 해당됨) 해당 그룹에 권한을 부여하면 현재 사용자의 액세스 권한에 영향을줍니다. 다른 경우에는 Users라는 이름을 현재 사용자의 실제 이름 (예 : John)으로 바꾸십시오. / grant John : (OI) (CI) F
Ed999

24

명령 프롬프트를 열고 다음 명령을 실행하십시오.

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F 모든 권한을 부여합니다.

/q /c /t 하위 폴더에 권한을 적용합니다.

참고 : 때때로 "관리자 권한으로 실행"이 도움이됩니다.


"관리자 권한으로 실행"이 필요합니다. 최고의 대답입니다.
Jeb50

20

cacls명령을 사용하십시오 . 여기에서 정보를 참조 하십시오 .

CACLS 파일 / e / p {USERNAME} : {PERMISSION}

어디,

/ p : 새로운 권한 설정

/ e : ACL을 바꾸지 않고 편집하는 것과 같이 권한을 편집하고 기존 권한을 유지합니다.

{USERNAME} : 사용자 이름

{PERMISSION} : 권한은 다음과 같습니다.

R-읽기

W-쓰기

C-변경 (쓰기)

F-모든 권한

예를 들어 다음 명령을 사용하여 Rocky Full (F) 제어 권한을 부여하십시오 (Windows 명령 프롬프트에서 입력).

C :> CACLS 파일 / e / p rocky : f

다음 명령을 입력하여 전체 도움말을 읽으십시오.

C :> cacls /?


좋은 답변입니다! 주목할 것은 파일은 권한을 변경하려는 실제 파일이라는 것입니다. 아마도 [files] 또는 {files}가 더 나은 설명 일 것입니다.
코너 로스

14
Cacls는 더 이상 사용되지 않습니다!
Hardik Thaker

cacls관련이있다; 여전히 사용할 수 있습니다 Windows 10; Microsoft는 cmd.exePowershell을 선호하여 더 이상 사용하지 않을 것 입니다.

1
@ Chinggis6 "여전히 사용 가능하다"는 것이 무언가를 사용하거나 다른 사람들이 사용하도록 권장하는 것이 좋은 생각은 아닙니다. 또한 cmd.exe더 이상 사용되지 않으며 가능성이 높지 않으므로 전혀 반대되는 점이 아닙니다 icacls.
underscore_d

1
알아. 사용하거나 추천하는 것이 좋은지 말하지 않았습니다 cacls.exe. 나는 그것이 cmd.exe이미 더 이상 사용되지 않는다고 언급하지 않았다 . 나는 사람들이 최소한 이전 버전과의 호환성이나 다른 이유로 만 더 높은 버전의 가용성을 알고 있어야한다고 생각합니다.

12

나는 아래 방법으로 시도하고 나를 위해 일한다 :
1. 열린 cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

파일이 내 액세스 권한이되어 "삭제"에 할당 된 다음 파일과 폴더를 삭제할 수 있습니다.


7

손상된 권한 : 폴더 및 해당 하위 개체에 대한 액세스 권한 얻기

질문에 대한 답변으로 게시 된 대부분의 답변에는 장점이 있지만 IMHO는 완벽한 솔루션을 제공하지 않습니다. 다음 은 권한 설정이 손상되어 폴더가 잠겨있는 경우 Windows 7을 위한 완벽한 솔루션입니다 .

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

들어 윈도우 10 사용자 / SID는 이후에 지정해야합니다 /remove:d옵션 :

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
참고 사항 :

  1. 명령이 지정된 디렉토리에 적용됩니다.

  2. 사용자 "모두"를 지정하면 가능한 모든 사용자가 포함되므로 가장 넓은 권한을 설정합니다 .

  3. "/ remove : d"옵션은 명시 적 ALLOW 설정을 덮어 쓰기 때문에 존재할 수있는 명시 적 DENY 설정을 삭제합니다. 새 ALLOW 설정을 작성하는 데 필요한 예비입니다. DENY 설정이없는 경우가 많지만, 미안보다 안전하기 때문에 이것은 예방책 일뿐입니다.

  4. "/ grant"옵션은 존재할 수있는 모든 명시 적 ALLOW 설정을 대체하는 명시 적 권한 인 새 ALLOW 설정을 작성합니다.

  5. "F"매개 변수 (즉, 작성된 권한)는이를 FULL 제어 권한을 부여합니다.

  6. "/ T"매개 변수는 폴더 자체뿐만 아니라 지정된 디렉토리 (예 : 파일 및 하위 폴더)의 모든 현재 하위 오브젝트에 이러한 변경 사항을 적용하여 재귀를 추가 합니다.

  7. "(OI)"및 "(CI)"매개 변수는 재귀를 추가하여이 변경 사항을 이후에 작성된 하위 오브젝트에 적용합니다.
    .

부록 (2019/02/10) -

윈도우 10 명령 행 위의 친절 오늘 나에게 제안했다, 그래서 여기있다. 나는 그것을 테스트 할 Windows 10을 가지고 있지 않지만, 가지고 있다면 그것을 사용해보십시오 (그리고 아래 에 의견을 게시 하십시오 ).

첫 단계로 거부 설정을 제거하는 것만 변경됩니다. DENY 설정이 없을 수 있으므로 옵션에 차이가 없을 수 있습니다. Windows 7에서는 / remove : d 다음에 사용자를 지정할 필요가 없지만 이해가 잘못되었습니다.

.

부록 (2019/11/21) -

사용자 astark 는 명령이 언어 독립적이되도록 Everyone 을 * S-1-1-0이라는 용어로 바꾸는 것이 좋습니다 . 영어로만 Windows를 설치 했으므로이 제안을 테스트 할 수 없지만 합리적으로 보입니다.


EXPLICIT 권한이 권한을 무시하기 때문에 INHERITED 권한에 대한 프로비저닝이 필요하지 않습니다. 따라서 새 명시 적 설정을 만들면 존재하는 상속 된 설정이 모두 무효화됩니다 (새 명시 적 설정에는 재귀가 포함되므로).
Ed999

Invalid parameter "/remove:d"
DFSFOT

Windows 7에서 icacls.exe를 실행하고 있습니다 (실행 만 가능). Windows 8 또는 10에있을 수있는 변경 사항에 대해서는 언급하거나 테스트 할 수 없습니다. Windows 7 64 비트에서 테스트 한대로 제거 옵션은 거부 설정을 제거하는 데 효과적입니다. 거부 설정이 없으면 오류 메시지가 표시 될 수 있지만 해당 설정이 없으면 제거 할 수 없습니다.
Ed999

원래 답변에서 명령 줄을 정확하게 재현하지 못하면 (디렉토리 경로 저장) 명령이 실패합니다. 특히, 내 답변에 나타나지 않는 인용 부호를 추가하지 마십시오. 예를 들어 / remove : d 옵션을 따옴표로 묶으면 명령이 실패합니다.
Ed999

1
@DFSFOT 글쎄, 나는 동정한다. 그러나 저는 Windows 7을 사용합니다. 하나님의 은혜로 Windows 10을 사용 하지 않을 것입니다. 오히려 우분투로 마이그레이션하고 싶습니다! 나는 / remove : g가 ALLOW와 DENY 엔트리 모두의 모든 권한을 제거 할 것이라고 생각 한다 (이 문맥에서 'granted'는 ALLOW만을 의미하므로 DENY 엔트리를 처리하지 않을 것이다). 반면 / remove : d는 DENY 항목 제거하고 ALLOW 항목은 변경하지 않습니다. 그러나 물론 나는 확신 할 수 없다.
Ed999

5

나는 잠시 동안 고생 만이 글의 답변을 결합하는 것은 (윈도우 10에서) 나를 위해 일한 :
열기 cmd를 또는 PowerShell 및 파일 폴더로 이동 1.
2. takeown / R / F .
3. icacls * / T / grant dan : F

행운을 빕니다!


3

이 페이지에 다른 사람이있는 경우를 대비하여 하나의 명령으로 다양한 권한을 함께 묶으려면 다음을 사용하십시오.

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

다양한 권한에 대한 csv 문자열을 참고하십시오.


고마워 RX 및 RD에 대한 권한을 설정하는 데 도움이되었습니다. 인터넷에 제공된 대부분의 예에서 / F 전체 권한으로 설명되었는데,이 경우는 아니어야합니다.
Mani

2

Excel vba 스크립트를 사용하여 계정을 프로비저닝하고 작성하십시오. 새 사용자에게 관리자 'x'계정을 사용하여 도구로 만든 폴더 및 하위 폴더에 대한 모든 권한을 부여해야했습니다.

cacls는 다음과 같습니다 : cacls \ FileServer \ Users \ Username / e / g Domain \ Username : C

이 코드를 Windows 7 이상으로 마이그레이션해야했습니다. 내 솔루션은 다음과 같습니다.

icacls \ FileServer \ Users \ Username / grant : r 도메인 \ 사용자 이름 : (OI) (CI) F / t

/ grant : r-지정된 사용자 액세스 권한을 부여합니다. 권한은 이전에 부여 된 명시 적 권한을 대체합니다. : r없이 권한은 이전에 부여 된 명시 적 권한에 추가됩니다.

(OI) (CI)-이 폴더, 하위 폴더 및 파일.

F-모든 권한

/ t-모든 하위 폴더를 탐색하여 파일 / 디렉토리와 일치시킵니다.

이것이 나에게 준 것은 서버에서 폴더를 볼 수 있고 하위 폴더를 만들어서 파일을 읽고 쓸 수있는 폴더였습니다. 새 폴더를 만들 수 있습니다.


1

XCACLS.VBS는 ACL 정보를 변경 / 편집하는 매우 강력한 스크립트입니다. c : \ windows \ system32 \ cscript.exe xcacls.vbs 도움말은 모든 스위치와 옵션을 반환합니다.

Microsoft 지원 페이지 에서 공식 배포를받을 수 있습니다.


3
어디에서 XCACLS.VBS찾을 수 있는지 참조 할 수 있습니까?
Jeremy J Starcher

1

대량 폴더 생성 및 권한 부여 권한은 아래 powershell 스크립트를 사용하여 작동합니다.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

참고 : CSV 파일에서 동일한 도메인 사용자 이름을 만들어야합니다. 그렇지 않으면 권한 문제가 발생합니다.


0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide

2
그것들은 권한이 아닌 파일의 속성 (읽기 전용, 아카이브, 시스템, 숨김)이며 사용자 계정에 연결됩니다.
Robin Bennett

0

우수 포인트 Călin Darie

cacls를 사용하는 스크립트가 많았습니다. 루트 마운트 볼륨 예를 변경하는 스크립트를 찾을 수없는 방법으로 icacls로 옮겼습니다. d : \ datafolder. 마지막으로 아래 스크립트를 작성하여 볼륨을 임시 드라이브로 마운트 한 다음 sec를 적용합니다. 그런 다음 마운트를 해제합니다. 루트 마운트 보안을 업데이트 할 수있는 유일한 방법입니다.

1은 폴더 마운트 GUID를 임시 파일로 가져온 다음 GUID를 읽고 볼륨을 임시 드라이브 X로 마운트합니다. sec를 적용하고 변경 사항을 기록한 다음 X에서만 드라이브의 볼륨을 마운트 해제합니다. 마운트 된 폴더가 변경되거나 중단되지 않습니다. 적용된 초.

여기 내 스크립트 샘플이 있습니다.

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**

0

저는 관리자이며 일부 스크립트는 디렉토리의 모든 파일과 하위 폴더에서 내 이름에 "거부"권한을 부여했습니다. icacls "D:\test" /grant John:(OI)(CI)F /T이 목록의 내 이름에서 "거부"권한을 제거하지 않은 것으로 보이므로 명령 실행이 작동하지 않았습니다.

나를 위해 일한 유일한 것은 icacls "D:\test" /reset /T명령으로 모든 권한을 재설정하는 것입니다 .


''/ remove : d ''를 지정하여 존재할 수있는 명시 적 DENY 설정을 삭제하여 reset 명령을 사용하지 않고 문제를 극복 할 수 있습니다 (위의 완벽한 솔루션 참조).
Ed999

-1

"c :>"및 ">"없이 작동하는 Windows 10

예를 들면 다음과 같습니다.

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "파일 또는 폴더 경로"/ e / p UserName : F

(또한이 오류 2502 및 2503 수정)

cacls "C : \ Windows \ Temp"/ e / p 사용자 이름 : F


-5

이것이 나를 위해 일한 것입니다.

  1. 액세스가 거부 된 폴더를 수동으로 엽니 다.

  2. 해당 폴더에서 실행 파일 / 응용 프로그램 파일을 선택하십시오.

  3. 마우스 오른쪽 버튼으로 클릭하고 Properties-> 로 이동하십시오.Compatibility

  4. 이제 확인 Privilege Level하고 확인하십시오.Run As Administrator

  5. 를 클릭하십시오 Change Settings for all users.

이제 문제가 해결되었습니다.


문제는 명령 줄을 통해 위의 작업을 수행하는 것입니다. 당신의 제안은 잘 작동 할 수 있지만, 설정이 필요한 서버에 대한 터미널 액세스 (ssh) 만있는 경우에는 적용 할 수 없으므로 cmd 스크립트를 사용해야합니다
Ivaylo Slavov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.