ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows PowerShell - about_Execution_Policies
    Search: Os Os 2022. 11. 29. 11:36

    파워쉘 실행 오류 권한

     

    스크립트 실행 오류 about_Execution_Policies

     

    설명

    PowerShell 실행 정책을 설명하고 이를 관리하는 방법을 설명.

    PowerShell의 실행 정책은 PowerShell이 구성 파일을 로드하고 스크립트를 실행하는 조건을 제어하는 안전 기능이다. 이 기능으로 인하여 악성 스크립트의 실행을 방지하는 데 도움이 된다.

    실행 정책

    로컬 컴퓨터, 현재 사용자 또는 특정 세션에 대한 실행 정책을 설정할 수 있다. 그룹 정책 설정을 사용하여 컴퓨터 및 사용자의 실행 정책을 설정할 수도 있다.

    로컬 컴퓨터 및 현재 사용자에 대한 실행 정책은 레지스트리에 저장된다. PowerShell 프로필에서 실행 정책을 설정할 필요가 없다. 특정 세션에 대한 실행 정책은 메모리에만 저장되며 세션이 닫혀 있으면 손실된다.

    실행 정책은 사용자 작업을 제한하는 보안 시스템이 아니다. 예를 들어 사용자는 스크립트를 실행할 수 없는 경우 명령줄에 스크립트 내용을 입력하여 정책을 쉽게 무시할 수 있다. 대신 실행 정책은 사용자가 기본 규칙을 설정하는 데 도움이 되며 의도치 않게 위반하지 않도록 방지한다.

    비Windows 컴퓨터에서는 기본 실행 정책이 무제한('Unrestricted')이며 변경할 수 없다. 'Set-ExecutionPolicy' cmdlet을 사용할 수 있지만 PowerShell은 지원되지 않는다는 콘솔 메시지를 표시한다. 'Get-ExecutionPolicy'는 비 Windows 플랫폼에서는 'Unrestricted'을 반환 하지만 이런 플랫폼은 Windows 보안 영역을 구현하지 않기 때문에 동작은 실제로 'Bypass'와 일치 한다.

     

    PowerShell 실행 정책

    실행 정책의 적용은 Windows 플랫폼에서만 발생한다. PowerShell 실행 정책은 다음과 같다.

    - AllSigned

    스크립트를 실행할 수 있다.
    로컬 컴퓨터에서 작성하는 스크립트를 포함하여 모든 스크립트와 구성 파일에 신뢰할 수 있는 판매자의 서명이 있어야 한다.
    아직 신뢰할 수 있거나 신뢰할 수 없는 것으로 분류되지 않은 게시자의 스크립트를 실행하기 전에 메시지를 표시한다.
    서명되었지만 악의적인 스크립트가 실행될 위험이 있다.

    - Bypass

    아무것도 차단되지 않으며 경고 또는 프롬프트가 없다.
    이 실행 정책은 PowerShell 스크립트가 더 큰 애플리케이션에 기본 제공되는 구성 또는 PowerShell이 자체 보안 모델이 있는 프로그램의 기초가 되는 구성을 위해 설계되다.

    - Default

    기본 실행 정책을 설정한다.
    Restricted Windows 클라이언트용이다.
    Windows 서버용 RemoteSigned.

    - RemoteSigned

    Windows 서버 컴퓨터에 대한 기본 실행 정책이다.
    스크립트를 실행할 수 있다.
    전자 메일 및 인스턴트 메시징 프로그램을 포함하는 인터넷에서 다운로드한 스크립트 및 구성 파일에 대해 신뢰할 수 있는 게시자의 디지털 서명이 필요하다.
    로컬 컴퓨터에 기록되고 인터넷에서 다운로드되지 않은 스크립트에는 디지털 서명이 필요하지 않는다.
    'Unblock-File' cmdlet을 사용하는 것과 같이 스크립트가 차단 해제된 경우, 인터넷에서 다운로드되고 서명되지 않은 스크립트를 실행 할 수 있다.
    악의적일 수 있는 인터넷 및 서명된 스크립트 이외의 원본에서 서명되지 않은 스크립트를 실행할 위험이 있다.

    - Restricted

    Windows 클라이언트 컴퓨터에 대한 기본 실행 정책이다.
    개별 명령을 허용하지만 스크립트는 허용하지 않는다.
    including formatting and configuration files (.ps1xml), module script files (.psm1) 및 PowerShell profiles (.ps1)을 비롯한 모든 스크립트 파일의 실행을 방지한다'

    - Undefined

    현재 범위에 실행 정책이 설정되어 있지 않다.
    모든 범위의 실행 정책이 정의되지 않은(Undefined)경우 유효한 실행정책은 Windows 클라이언트에 대해 Restricted로 적용되고, Windows Server는 RemoteSigned로 적용된다..

    - Unrestricted

    비 Windows 컴퓨터에 대한 기본 실행 정책이며 변경할 수 없다.
    서명되지 않은 스크립트를 실행할 수 있습니다. 악성 스크립트를 실행할 위험이 있다.
    로컬 인트라넷 영역이 아닌 스크립트 및 구성 파일을 실행하기 전에 사용자에게 경고한다.

    참고: 
    UNC(유니버설 명명 규칙) 경로를 인터넷 경로와 구분하지 않는 시스템에서 UNC 경로로 식별되는 스크립트는 RemoteSigned 실행 정책을 사용하여 실행할 수 없다.

    실행 정책 범위

    특정 범위에서만 적용되는 실행 정책을 설정할 수 있다.

    유효한 값 Scope 은 MachinePolicyUserPolicy, ProcessCurrentUser 및 LocalMachine입니다. LocalMachine 은 실행 정책을 설정할 때 기본값이다.

    값은 Scope 우선 순위로 나열된다. 더 제한적인 정책이 더 낮은 우선 순위 수준으로 설정된 경우에도 우선 순위가 적용되는 정책은 현재 세션에서 유효하다.

    자세한 내용은 Set-ExecutionPolicy를 참조할 것.

    MachinePolicy

    컴퓨터의 모든 사용자에 대해 그룹 정책 의해 설정된다.

    UserPolicy

    컴퓨터의 현재 사용자에 대한 그룹 정책 의해 설정된다.

    Process

    범위는 Process 현재 PowerShell 세션에만 영향을 준다. 실행 정책은 레지스트리가 아닌 환경 변수 '$env:PSExecutionPolicyPreference'에 저장돈다. PowerShell 세션이 닫혀 있으면 변수와 값이 삭제된다.

    CurrentUser

    실행 정책이 현재 사용자에게만 영향을 준다. HKEY_CURRENT_USER 레지스트리 하위 키에 저장된다.

    LocalMachine

    실행 정책은 현재 컴퓨터의 모든 사용자에게 영향을 준다. HKEY_LOCAL_MACHINE 레지스트리 하위 키에 저장된다.

     

    PowerShell을 사용하여 실행 정책 관리

    현재 PowerShell 세션에 대한 유효 실행 정책을 얻으려면 'Get-ExecutionPolicy' cmdlet을 사용한다.

    다음 명령은 유효 실행 정책을 가져온다.

    'Get-ExecutionPolicy'

    현재 세션에 영향을 주는 모든 실행 정책을 가져와서 우선 순위로 표시하려면 다음을 수행한다.

    'Get-ExecutionPolicy -List'
    결과는 다음 샘플 출력과 유사하다.

            Scope ExecutionPolicy
            ----- ---------------
    MachinePolicy       Undefined
       UserPolicy       Undefined
          Process       Undefined
      CurrentUser    RemoteSigned
     LocalMachine       AllSigned

    이 경우 현재 사용자의 실행 정책이 로컬 컴퓨터에 대해 설정된 실행 정책보다 우선하기 때문에 유효한 실행 정책이 RemoteSigned 가 된다.

    특정 범위에 대해 설정된 실행 정책을 가져오려면 'Get-ExecutionPolicy'을 사용한다.

    예를 들어 다음 명령은 CurrentUser 범위에 대한 실행 정책을 가져온다.
    'Get-ExecutionPolicy -Scope CurrentUser'

     

    실행 정책 변경

    Windows 컴퓨터에서 PowerShell 실행 정책을 변경하려면 cmdlet을 Set-ExecutionPolicy 사용한다.

    LocalMachine 또는 CurrentUser 범위에 대한 실행 정책을 설정하는 경우 변경 내용은 레지스트리에 저장되며 다시 변경할 때까지 유효하다.

    범위에 대한 Process 실행 정책을 설정하면 레지스트리에 저장되지 않는다. 실행 정책은 현재 프로세스와 모든 자식 프로세스가 닫을 때까지 유지된다.

     참고
    Windows Vista 이상 버전의 Windows에서 로컬 컴퓨터 LocalMachine 범위에 대한 실행 정책을 변경하는 명령을 실행하려면 관리자 권한으로 실행 옵션을 사용하여 PowerShell을 시작한다.

    실행 정책을 변경하려면 다음을 수행합니다.

    'Set-ExecutionPolicy -ExecutionPolicy <PolicyName>'

    다음은 그 예다다.

    'Set-ExecutionPolicy -ExecutionPolicy RemoteSigned'

    특정 범위에서 실행 정책을 설정하려면 다음을 수행한다.

    'Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>'

    다음은 그 예다.
    'Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser'

    실행 정책을 변경하는 명령은 성공할 수 있지만 여전히 유효 실행 정책을 변경하지는 않는다.
    예를 들어 로컬 컴퓨터에 대한 실행 정책을 설정하는 명령은 성공할 수 있지만 현재 사용자에 대한 실행 정책에 의해 재정의될 수 있다.

     

    실행 정책 제거

    특정 범위에 대한 실행 정책을 제거하려면 실행 정책을 로 Undefined설정한다.

    예를 들어 로컬 컴퓨터의 모든 사용자에 대한 실행 정책을 제거하려면 다음을 수행한다.
    'Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine'

    범위에 대한 실행 정책을 제거하려면 다음을 실행:
    'Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser'

    어떤 범위에서도 실행 정책이 설정되지 않은 경우 유효한 실행 정책은 RestrictedWindows 클라이언트의 기본값이다.

    한 세션에 대해 다른 정책 설정

    ExecutionPolicy 매개 변수 pwsh.exe 를 사용하여 새 PowerShell 세션에 대한 실행 정책을 설정할 수 있다. 정책은 현재 세션 및 자식 세션에만 영향을 준다.

    새 세션에 대한 실행 정책을 설정하려면 PowerShell과 같은 cmd.exe 명령줄에서 PowerShell을 시작한 다음 ExecutionPolicy 매개 변수 pwsh.exe 를 사용하여 실행 정책을 설정한다.
    'pwsh.exe -ExecutionPolicy AllSigned'
    설정한 실행 정책은 레지스트리에 저장되지 않는다. 대신 환경 변수에 $env:PSExecutionPolicyPreference 저장된다. 정책이 설정된 세션을 닫으면 변수가 삭제된다. 변수 값을 편집하여 정책을 변경할 수 없다.

    세션 중에 세션에 대해 설정된 실행 정책이 로컬 컴퓨터 또는 현재 사용자의 레지스트리에 설정된 실행 정책보다 우선적으로 적용된다. 그러나 그룹 정책 사용하여 설정한 실행 정책보다 우선하지 않는다.

     

    그룹 정책 사용하여 실행 정책 관리

    스크립트 실행 켜기 그룹 정책 설정을 사용하여 엔터프라이즈 컴퓨터의 실행 정책을 관리할 수 있다. 그룹 정책 설정은 모든 범위에서 PowerShell에 설정된 실행 정책을 재정의한다.

    스크립트 실행 정책 설정은 다음과 같다.
    스크립트 실행 켜기를 사용하지 않도록 설정하면 스크립트가 실행되지 않는다. 이는 'Restricted'실행 정책과 동일하다.
    스크립트 실행 켜기를 사용하도록 설정하면 실행 정책을 선택할 수 있다. 그룹 정책 설정은 다음 실행 정책 설정과 동일하다.
    '실행 정책':          '그룹 정책'
    'Unrestricted': 모든 스크립트 허용
    'RemoteSigned': 로컬 스크립트 및 원격 서명된 스크립트 허용
    'AllSigned': 서명된 스크립트만 허용
    스크립트 실행 설정이 구성되지 않은 경우 아무런 효과가 없다.

    PowerShellExecutionPolicy.adm 및 PowerShellExecutionPolicy.admx 파일은 다음 경로의 그룹 정책 편집기에서 컴퓨터 구성 및 사용자 구성 노드에 스크립트 실행 켜기 정책을 추가한다.

    Windows XP 및 Windows Server 2003의 경우:
    'Administrative Templates\Windows Components\Windows PowerShell'

    Windows Vista 이상 버전의 경우:
    'Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell'

    컴퓨터 구성 노드에 설정된 정책이 사용자 구성 노드에 설정된 정책보다 우선한다.
    자세한 내용은 about_Group_Policy_Settings를 참조할 것.

     

    실행 정책 우선 순위


    세션에 대한 유효 실행 정책을 결정할 때 PowerShell은 다음 우선 순위로 실행 정책을 평가한다.

    Group Policy: MachinePolicy
    Group Policy: UserPolicy
    Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
    Execution Policy: CurrentUser
    Execution Policy: LocalMachine

     

    서명된 스크립트 및 서명되지 않은 스크립트 관리


    Windows에서 Internet Explorer 및 Microsoft Edge와 같은 프로그램은 다운로드된 파일에 대체 데이터 스트림을 추가한다. 그러면 파일이 "인터넷에서 오는 것"으로 표시된다. PowerShell 실행 정책이 RemoteSigned인 경우 PowerShell은 전자 메일 및 인스턴트 메시징 프로그램을 포함하는 인터넷에서 다운로드된 서명되지 않은 스크립트를 실행하지 않는다.

    실행 정책을 변경하지 않고 스크립트에 서명하거나 서명되지 않은 스크립트를 실행하도록 선택할 수 있다.

    PowerShell 3.0부터 'Get-ItemStream' cmdlet의 'Stream' 매개 변수를 사용하여 인터넷에서 다운로드되었기 때문에 차단된 파일을 검색할 수 있다. PowerShell에서 스크립트를 실행할 수 있도록 'Unblock-File' cmdlet을 사용하여 스크립트의 차단을 해제한다.

    자세한 내용은 about_Signing, Get-Item 및 Unblock-File을 참조.

     참고
    파일을 다운로드하는 다른 방법은 파일을 인터넷 영역에서 오는 것으로 표시하지 않을 수 있다.
    일부 사례:
    curl.exe
    Invoke-RestMethod
    Invoke-WebRequest

     

    Windows Server Core 및 Window Nano Server의 실행 정책

    특정 조건에서 Windows Server Core 또는 Windows Nano Server에서 PowerShell 6을 실행하는 경우 다음 오류와 함께 실행 정책이 실패할 수 있다.

    AuthorizationManager check failed.
    At line:1 char:1
    + C:\scriptpath\scriptname.ps1
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : SecurityError: (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess

    PowerShell은 Windows 데스크톱 셸(explorer.exe)의 API를 사용하여 스크립트 파일의 영역 유효성을 검사한다. Windows Server Core 및 Windows Nano Server에서는 Windows Shell을 사용할 수 없다.

    Windows 데스크톱 셸을 사용할 수 없거나 응답하지 않는 경우 Windows 시스템에서도 이 오류가 발생할 수 있다. 예를 들어 로그온하는 동안 Windows 데스크톱이 준비되기 전에 PowerShell 로그온 스크립트가 실행을 시작하여 오류가 발생할 수 있다.

    ByPass 또는 AllSigned의 실행 정책을 사용하면 문제를 방지하는 영역 검사가 필요하지 않다.

    참고 항목
    about_Environment_Variables
    about_Group_Policy_Settings
    about_Pwsh
    about_Signing
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    Get-Item
    Unblock-File

     

    댓글