인프런 커뮤니티 질문&답변
개발환경 구성 관련) PowerShell에서 npm 꼭 사용해야 하나요?
작성
·
18
0
해결 방법으로 관리자 권한에서 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 명령을 할 경우 문제가 없는지 AI로 확인해 보았습니다. 아래와 같이 말해주는데, 그냥 터미날 이용해서 강의 진행해도 문제 없나요?
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 명령은 개발 환경(nvm, yarn, 허가되지 않은 스크립트 실행 등)을 설정할 때 흔히 사용되지만, 관리자 권한으로 실행할 때 발생할 수 있는 보안적, 시스템적 측면의 문제점은 다음과 같습니다.
1. 로컬 악성 스크립트 실행 위험 (보안 취약점)
RemoteSigned 정책의 핵심은 "내가 직접 만든(로컬) 스크립트는 서명 없이 실행 가능"하고, "인터넷에서 다운로드한 스크립트는 신뢰된 서명이 있어야 함"입니다.
문제점: 만약 악성코드나 해커가 시스템에 침투하여 교묘하게 스크립트 파일을 생성했다면, 이 파일은 '로컬에서 생성된 것'으로 간주되어 아무런 제약 없이 실행됩니다.
관리자 권한 결합 시: 일반 사용자 권한이라면 스크립트가 실행되어도 시스템 파일을 건드리기 어렵지만, 관리자 권한으로 실행 중인 파워셸에서 이 정책이 풀려 있으면 시스템 삭제, 레지스트리 변조, 백도어 설치 등이 매우 쉬워집니다.
2. 권한 상승 공격(Privilege Escalation)의 발판
해커는 종종 시스템에 침투한 후 더 높은 권한을 얻으려고 시도합니다.
문제점: 실행 정책이 완화되어 있으면, 공격자가 시스템 내부에서 작성한 공격용 .ps1 스크립트를 관리자 권한으로 실행할 수 있는 통로를 열어주게 됩니다.
위험성: 관리자 권한의 파워셸은 윈도우의 모든 방어 체계를 무력화할 수 있는 강력한 도구입니다.
3. 'Remote' 판정의 모호성 (파일 차단 해제)
RemoteSigned는 인터넷에서 받은 파일인지 여부를 파일의 'Zone.Identifier' (Alternate Data Stream) 정보를 보고 판단합니다.
문제점: 압축을 풀거나 특정 방식으로 복사된 스크립트 파일은 '인터넷에서 다운로드했다'는 표식이 사라질 수 있습니다. 이 경우 시스템은 이를 '안전한 로컬 파일'로 오인하여 서명 확인 없이 실행해 버립니다.
4. 영구적인 설정 변경의 위험
-Scope CurrentUser는 현재 로그인한 사용자의 설정을 영구적으로 바꿉니다.
문제점: 당장 특정 도구(nvm 등)를 설치하기 위해 설정을 바꿨다가, 설치가 끝난 후에도 계속 이 상태로 방치되는 경우가 많습니다. 이는 시간이 지나면서 시스템 전체의 보안 수준을 지속적으로 낮게 유지하는 결과를 초래합니다.
5. 전사 보안 정책(GPO)과의 충돌
회사나 조직 내에서 관리되는 PC의 경우:
문제점: 그룹 정책(GPO)으로 금지된 설정을 강제로 변경하려고 시도할 경우, 설정이 적용되지 않거나 IT 관리 시스템에서 보안 위반 경고(Alert)가 발생하여 보안 팀의 조사를 받을 수 있습니다.
안전하게 사용하는 권장 방법
위의 위험을 최소화하면서 필요한 작업을 하려면 다음과 같은 방법을 권장합니다.
일시적으로만 적용하기 (Bypass 사용)
전체 시스템 설정을 바꾸지 않고, 해당 파워셸 창을 닫으면 원래대로 돌아가게 합니다.codePowershell
# 특정 스크립트를 실행할 때만 정책 우회 powershell.exe -ExecutionPolicy Bypass -File .\myscript.ps1작업 완료 후 원복하기
작업이 끝났다면 다시 가장 안전한 상태인 Restricted 또는 AllSigned로 돌려놓는 것이 좋습니다.codePowershell
Set-ExecutionPolicy Restricted -Scope CurrentUser신뢰할 수 있는 파일만 차단 해제하기
인터넷에서 받은 스크립트가 실행되지 않을 때는 전체 정책을 풀지 말고, 해당 파일만 신뢰한다고 표시하세요.codePowershell
Unblock-File -Path "C:\path\to\script.ps1"
결론적으로, 개발 편의를 위해 RemoteSigned를 쓰는 것이 일반적이긴 하지만, 관리자 권한으로 이 설정을 열어두는 것은 "서명되지 않은 외부 공격 도구에게 내 시스템의 마스터키를 넘겨줄 수 있는 통로"를 열어두는 것과 같습니다. 꼭 필요한 경우에만 잠시 사용하고 다시 잠그는 습관이 중요합니다.
답변




