윈도우 파워셀 스크립트의 실행 권한 확인과 권한 변경 방법

윈도우 파워셀(PowerShell) 스크립트의 실행 권한을 확인하는 Get-ExecutionPolicy Cmdlet과, 실행 권한을 변경하는 Set-ExecutionPolicy Cmdlet 의 사용 방법에 대해 설명한다.

Power Shell Core 6.0 Icon
마이크로소프트 파워셀 6.0 코어

나름대로 열심히 삽질해 가면서 파워셀 스크립트를 만들었거나, 어디에서인가 굉장한 스크립트 파일을 구했다 치자. 이제 더 이상의 반복작업과 노가다는 없다! 라 외치며, 작성한 스크립트를 실행하려고 하면 실행 되지 않고 이런 에러를 내 뱉을 때가 있다.

& : 이 시스템에서 스크립트를 실행할 수 없으므로 x:\xxxxxxx\xx xxxx.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오. 위치 줄:1 문자:3 + & '.\xx xxxx.ps1' + ~~~~~~~~~~~~~~ + CategoryInfo : 보안 오류: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

한마디로, '니가 뭔데 이걸 돌려? 택도 없는 소리 하지 마!' 되겠다. 이 버르장머리 없는 컴퓨터놈이 주인 얼굴도 못 알아보고 일 못한다고 뻐팅기고 있는 거다. 어떻게 해야 이놈의 버르장버리를 고쳐 놓을 수 있을까?

Get-ExecutionPolicy 파워셀 스크립트의 실행권한 확인

파워셀은 윈도우 시스템에 대한 직접적인 설정 변경이 가능한 도구이다. 허가받지 않은 사용자가 다른 마음을 품고 스크립트를 실행하거나, 뭐가 들어있는지 잘 모르는 스크립트 파일을 별 생각 없이 실행 했다가는, 무슨 엄한 일이 생길 지 모른다. 때문에 파워셀은 기본적으로 스크립트의 실행 권한을 제한 해 두며, 스크립트를 실행하기 위해서는 별도의 권한이 필요하다. 먼저, 현재의 권한이 어떻게 설정 되어 있는가 Get-ExecutionPolicy 명령을 이용해 확인해 본다.

PS C:\TMPDIR> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Undefined PS C:\TMPDIR>

실행 범위(Scope)에 대해 현재 설정된 실행 정책(ExecutionPolicy) 의 현황을 볼 수 있다. 이 중, Scope 항목이 의미하는 것은

ExecutionPolicy Scope
Scope범위설정값 저장 위치
MachinePolicy컴퓨터의 모든 사용자HKLM:\Software\Policies\Microsoft\Windows\Powershell
UserPolicy현재 사용자HKCU:\Software\Policies\Microsoft\Windows\Powershell
Process현재 열려있는 파워셀 세션
LocalMachine컴퓨터의 모든 사용자 HKLM​:\Software\Microsoft\Powershell\1\ShellIds
CurrentUser현재 사용자HKCU:\Software\Microsoft\Powershell\1\ShellIds
를 의미한다.

그리고 각각의 범위별로 현재 적용되고 있는 정책이 표시되고 있는데, 각 정책에 표시되는 정책명들은 다음과 같은 의미를 가진다.

ExecutionPolicy 정책 종류
정책의미
AllSigned서명이 있는 스크립트만 실행할 수 있음.
Bypass차단되지 않음.
Default기본 구성된 정책 (서버OS는 RemoteSigned, 일반OS는 Restricted)
RemoteSigned로컬 컴퓨터에서 에서 작성된 스크립트는 실행 가능, 외부에서 가져온 스크립트는 서명된 것만 가능
Restricted허용하지 않음.
Undefined정의되지 않음. (이 경우 Default를 따름)
Unrestricted모든 스크립트(서명되지 않은 스크립트 포함)를 실행 가능

즉, 위의 예에서 모든 범위에 대해 Undefined 상태인 것은, 모든 범위에 대해서 권한이 정의되지 않았다는 의미다. 권한 정의가 되어있지 않다는 것은, 사용자가 직접 작성했거나 외부에서 가지고 온 서명 없는 스크립트는 실행할 수 있는 권한이 없다는 의미이다.

Set-ExecutionPolicy : 파워셀 스크립트의 실행권한 설정

실행 권한이 없는 것을 확인 했으니, 이제는 권한을 부여해 주어야 한다. 실행 권한을 설정하는 Cmdlet은 Set-ExecutionPolicy 이다. 아래와 같이 입력해 보자.

PS C:\TMPDIR> Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

현재 사용자 (CurrentUser)에 대해서 제한 없이 스크립트 실행을 허용(Unrestricted) 하도록 하겠다는 명령이다. 상황에 따라 위의 권한과 정책을 변경해 사용해 주면 되겠다.

실행하면 아래와 같이 실제로 적용 하겠는가 물어보는 메세지가 뜬다. y를 입력해 주면 해당 정책이 적용 된다.

실행 규칙 변경 실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다. 실행 정책을 변경하시겠습니까? [Y] 예(Y) [A] 모두 예(A) [N] 아니요(N) [L] 모두 아니요(L) [S] 일시 중단(S) [?] 도움말 (기본값은 "N"): y PS C:\TMPDIR>

이렇게 하면, 현재 로그인 되어 있는 사용자에게 모든 종류의 스크립트를 실행할 수 있는 권한이 부여 되게 된다. 이제 컴퓨터의 버르장머리를 고쳐 놨으니, 스크립트를 마음껏 사용해 열심히 일하도록 시켜보자.

끝으로

파워셀 스크립트는 윈도우 시스템의 모든 설정과 정책을 조정할 수 있는 막강한 기능을 가지고 있다. 때문에 파워셀 스크립트의 허용 권한을 아무렇게나 풀어놓았다간 뭔 일을 어떻게 당할 지 모른다. 보안의 기본은 '필요한 것 만 허용'이다. 귀찮더라도 바른 정책을 수립해서 사용하고, 꼭 필요할 경우 사용을 한 후 다시 권한을 막아 두는게 정신건강에 여러모로 좋을 듯 하다.