source

로컬로 생성된 스크립트를 원격 서명 실행 정책에서 실행할 수 없는 이유는 무엇입니까?

nicesource 2023. 5. 4. 20:02
반응형

로컬로 생성된 스크립트를 원격 서명 실행 정책에서 실행할 수 없는 이유는 무엇입니까?

이 질문은 질문 본문에서 반박하거나 실제 문제를 해결하지 못하는 응답을 계속 끌어모으기 때문에 다음과 같은 간단한 요약을 읽어 보십시오.

  • 기본 PowerShell 설치에서 스크립트를 실행하지 않는 이유는 무엇입니까?라는 질문이 아닙니다.
  • 이것은 "PowerShell 설치에서 인터넷에서 다운로드한 스크립트를 실행하지 않는 이유"에 대한 질문이 아닙니다.
  • 문제는 왜.RemoteSigned실행 정책은 실행해서는 안 되는 스크립트 실행을 방해하고 있습니다.
  • RemoteSigned 사용할 실행 정책은 이뿐입니다.저는 다른 덜 제한적인 정책들이 사용 가능하다는 것을 알고 있습니다.만약 그 정책들이 받아들여질 수 있는 대체물이었다면 저는 그것들을 대신 사용했을 것이고 이 질문은 존재하지 않았을 것입니다.
  • 실행 정책이 이미 설정되어 있습니다. 정책을 에서RemoteSignedRemoteSigned해결책이 아닙니다.
  • 스크립트 파일이 로컬로 생성 및 저장됩니다.
  • 스크립트 파일이 차단되지 않았습니다.스크립트 파일이 차단되지 않았습니다(이전 지점 참조).
  • 차단 해제할 항목이 없으므로 스크립트 파일의 차단을 해제할 수 없습니다(이전 지점 참조).
  • 관리자가 스크립트 파일을 실행하려고 합니다.
  • Windows PowerShell 관련된 유일한 응용 프로그램입니다.것은 아니다.Windows PowerShell ISE도 아니다Command Prompt다른 도구나 편집기도 관련이 없습니다.
  • 문제의 원인은 이미 확인되었습니다(승인된 답변 참조).거의 8년이 지난 지금, 해당 여부를 떠나 다른 모든 명백한 설명들도 게시되었다고 생각합니다.달리 생각하는 경우 질문과 기존 답변모두 읽은 추가하십시오.

64비트 윈도우즈 7 Professional에서 윈도우즈 PowerShell 2.0을 사용하고 있습니다.는 제 있본습다에 이 있습니다.Desktop실행하려고 하면 다음 오류가 발생합니다.

File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system.  Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

이자 로컬이며, 를 관리자입니다.Get-ExecutionPolicy -List나는 그것을 볼 수 있습니다.Group Policy Object이 PowerShell을 .RemoteSigned시스템 수준에서 실행 정책:

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

가 직접 직대작성다니습했본을접가내에서 만들었습니다.Notepad그리고 Sysinternals의 유틸리티와 파일을 사용했습니다.Properties스크립트가 인터넷에서 온 것으로 처리되지 않는지 확인하는 대화 상자입니다.스크립트를 도메인 서버의 네트워크 공유에 복사하면 실행이 허용됩니다.가 가내뛰면을 하면,Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine그러면 로컬 스크립트는 여전히 실행이 허용되지 않습니다. 이는 실행 정책 이후에 의미가 있습니다.MachinePolicy범위가 우선합니다.

에 의해 문서화된 바와 같이about_Execution_Policies(현재; 질문 시점),RemoteSigned정책 수단:

  • 스크립트를 실행할 수 있습니다.

  • 인터넷에서 다운로드한 스크립트 및 구성 파일(전자 메일 및 인스턴트 메시징 프로그램 포함)에 대한 신뢰할 수 있는 게시자의 디지털 서명이 필요합니다.

  • 실행한 스크립트와 로컬 컴퓨터에서 작성한 스크립트(인터넷에서 다운로드하지 않음)에 디지털 서명이 필요하지 않습니다.

  • 인터넷 이외의 소스에서 서명되지 않은 스크립트와 서명되었지만 악의적인 스크립트를 실행할 위험이 있습니다.

내 스크립트는 서명되지 않았지만 로컬에서 생성 및 실행되므로 위의 세 번째 글머리 기호를 충족해야 합니다.그러므로...

  • 스크립트 실행이 허용되지 않는 이유는 무엇입니까?
  • 요구 사항이 인터넷에서 파일에만 적용되어야 하는데 PowerShell에서 스크립트가 "디지털 서명되지 않았습니다"라고 불평하는 이유는 무엇입니까?
  • 네트워크 공유에서 실행되는 스크립트가 서명되지 않는 것에 대해 PowerShell이 더 이상 신경 쓰지 않는 이유는 무엇입니까?

확인해야 할 몇 가지 사항:

무제한으로 바꿀 수 있습니까?

Set-ExecutionPolicy Unrestricted

그룹 정책이 설정되었습니까?

  • Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
  • User Configuration\Administrative Templates\Windows Components\Windows PowerShell

또한 Script.ps1을 어떻게 부르십니까?

이렇게 하면 실행할 수 있습니까?

powershell.exe -executionpolicy bypass -file .\Script.ps1

파일이 차단되고 있습니까?저도 같은 문제가 있었는데 마우스 오른쪽 버튼을 클릭하여 해결할 수 있었습니다.PS1 파일, 속성 및 차단 해제를 선택합니다.

.ps1 PowerShell 스크립트를 실행할 때 ".ps1이 디지털 서명되지 않았습니다.이 스크립트는 시스템에서 실행되지 않습니다."이 문제를 해결하려면 아래 명령을 실행하여 Set-ExecutionPolicy를 실행하고 ExecutionPolicy 설정을 변경해야 합니다.

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Dropbox에 매핑된 드라이브에 대한 PS1 파일을 실행할 때 항상 이 오류가 발생한다는 것을 알게 되었습니다.PS1 속성을 열 때 "차단 해제"가 없습니다.

내게 맞는 유일한 것은

powershell.exe - 정책 무시 - file.\Script.ps1

드디어 이 일을 추적했습니다.NET 코드 액세스 보안.네트워크 공유에 저장되고 실행되는 내부적으로 개발된 이진 모듈이 있습니다.갖기 위해.NET 2.0/PowerShell 2.0을 로드하기 위해 URL 규칙을 추가했습니다.Intranet해당 디렉터리를 신뢰할 코드 그룹:

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups
Microsoft (R) .NET Framework CasPol 2.0.50727.5420
Copyright (c) Microsoft Corporation.  All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1.  All code: Nothing
    1.1.  Zone - MyComputer: FullTrust
        1.1.1.  StrongName - ...: FullTrust
        1.1.2.  StrongName - ...: FullTrust
    1.2.  Zone - Intranet: LocalIntranet
        1.2.1.  All code: Same site Web
        1.2.2.  All code: Same directory FileIO - 'Read, PathDiscovery'
        1.2.3.  Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust
    1.3.  Zone - Internet: Internet
        1.3.1.  All code: Same site Web
    1.4.  Zone - Untrusted: Nothing
    1.5.  Zone - Trusted: Internet
        1.5.1.  All code: Same site Web

의 버전에 따라 다릅니다.NET이 설치되어 있으며 32비트 또는 64비트 Windows인지에 관계없이 다음 위치에 각각 자체 보안 구성을 사용하여 존재할 수 있습니다.security.config):

  • $Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\

그룹 삭제 후1.2.3....

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3.
Microsoft (R) .NET Framework CasPol 2.0.50727.9136
Copyright (c) Microsoft Corporation.  All rights reserved.

The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Removed code group from the Machine level.
Success

...기본 CAS 구성이 남아 있고 로컬 스크립트가 다시 작동합니다.오랜만에 CAS와 접촉했는데 왜 내 규칙이 허가하는 사람들을 방해하는 것처럼 보이는지 모르겠어요.FullTrust로.MyComputer하지만 CAS는 현재 이상 사용되지 않기 때문입니다.NET 4.0(PowerShell 3.0의 기반), 이제 중요한 시점인 것 같습니다.

네트워크 위치, 즉 다른 컴퓨터에서 파일을 복사한 경우 Windows에서 해당 파일을 차단했을 수 있습니다.파일을 마우스 오른쪽 버튼으로 클릭하고 차단 해제 버튼을 클릭하여 작동하는지 확인합니다.

제게 맞는 것은 .ps1 파일을 마우스 오른쪽 버튼으로 클릭한 다음 속성을 클릭하는 것이었습니다.차단 해제 버튼을 클릭합니다.정책을 바꾸려고 몇 시간을 소비한 후에 나는 아주 잘 작동합니다.

전원 셸 대신 터미널 명령 프롬프트를 선택합니다.그러면 되겠군요.

이것은 IDE 문제입니다.PowerShell GUI에서 설정을 변경합니다.도구 탭으로 이동하여 옵션, 디버깅 옵션을 차례로 선택합니다.그런 다음 서명할 스크립트에 대한 요구 사항 해제 확인란을 선택합니다.다 했어요.

script.bs1 파일을 백업하십시오.

script.bs1 파일을 삭제하고 실행 명령을 실행하는 것이 제게 효과적이었습니다.

저도 같은 문제를 겪고 있었는데 기본 프로그램을 PowerShell로 .ps1 파일을 여는 것으로 변경하여 수정했습니다.메모장으로 설정되었습니다.

Powershell GUI를 관리자로 실행해 보십시오.

이 문제는 PowerShell 실행 정책이 기본적으로 제한으로 설정되어 PowerShell 스크립트 실행을 방지하고 악의적인 스크립트를 실행하지 못하도록 보호하기 때문에 발생합니다.

다음 명령을 실행하여 특정 범위의 실행 범위를 변경할 수 있습니다.

Set-ExecutionPolicy -Scope Process 

PowerShell 창에서 2개 이하의 명령 실행

  1. 제한되지 않는 실행 정책 설정

  2. 파일 차단 해제 - 경로 D:\PowerShell\Script.ps1

언급URL : https://stackoverflow.com/questions/9742775/why-is-my-locally-created-script-not-allowed-to-run-under-the-remotesigned-execu

반응형