Spring Boot 프로젝트를 빌드한 JAR 파일을 EC2 서버로 전송하려고 아래와 같이 scp
명령어를 실행했다.
scp -i "키페어" build/libs/giftrecommender-0.0.1-SNAPSHOT.jar ec2-user@3.39.239.7:~/
하지만 다음과 같은 오류가 발생하며 전송이 실패했다.
Permissions for 'coupang_clone.pem' are too open
이는 .pem
파일의 권한 설정이 너무 느슨해서 발생하는 보안 오류이다. UNIX 계열에서는 chmod 400
명령으로 쉽게 해결할 수 있지만 Windows에서는 수동으로 권한을 조정해야 한다.
리눅스나 maxOS와 같은 UNIX 계열 운영체제에서는 chmod라는 명령어를 통해 파일과 디렉터리의 권한(퍼미션)을 설정할 수 있다.
chmod
는 "change mode"의 줄임말로 각 파일에 대해 누가 읽고 쓸 수 있는지 실행할 수 있는지를 설정하는 명령어다. 이 권한은 소유자(owner), 그룹(group), 그 외 사용자(other) 3단계로 나뉘며 각 권한은 숫자 또는 기호로 표현된다.
기호 | 의미 | 숫자 |
---|---|---|
r | 읽기(read) | 4 |
w | 쓰기(write) | 2 |
x | 실행(execute) | 1 |
chmod 777
: 모든 사용자에게 읽기/쓰기/실행 허용chmod 755
: 소유자 - 모든 권한 / 나머지 - 읽기 + 실행chmod 400
: 소유자 - 읽기 권한 / 나머지 - 접근 불가.pem
파일은 매우 민감한 보안 파일이기 때문에 AWS에서는 소유자만 읽기(chmod 400
) 권한을 가지도록 요구한다.
Windows에서는 chmod가 안통하는 이유
Windows는 UNIX 파일 권한 모델이 아닌 NTFS 기반의 ACL(Access Control List)을 사용하기 때문에
chmod 400
과 같은 명령어가 적용되지 않는다. 따라서.pem
파일에 대한 권한도 수동으로 GUI를 통해 설정해야 한다.💡 NTFS 기반의 ACL(Access Control List)은 Windows에서 파일이나 폴더마다 사용자별로 읽기, 쓰기, 실행 권한을 세밀하게 설정할 수 있는 보안 시스템이다. UNIX의
chmod
와 달리 각 사용자 또는 그룹에 대해 개별 권한을 지정할 수 있는 것이 특징이다.
cmd 창을 열어서 아래와 같은 명령어를 입력하면 사용자 이름을 알 수 있다.
whoami
결과 예시 : laptop-xxxxxx\송현진
.pem
파일이 위치한 경로로 이동.pem
파일 우클릭해서 속성으로 이동송현진
사용자로 변경송현진
사용자에게 읽기(Read) 권한만 부여하고 나머지 권한은 모두 제거이 과정을 통해 Windows에서도 .pem
파일이 UNIX의 chmod 400
과 유사한 읽기 전용 상태가 된다.
이후 다시 scp
명령어 실행 시 더 이상 권한 오류 없이 정상적으로 JAR 파일을 EC2로 전송할 수 있었다.
scp -i "키페어" build/libs/giftrecommender-0.0.1-SNAPSHOT.jar ec2-user@3.39.239.7:~/
giftrecommender-0.0.1-SNAPSHOT.jar 100% 63MB 9.7MB/s 00:06
Windows 환경에서는 UNIX에서 사용하던 chmod
명령이 바로 적용되지 않아 파일 권한 오류를 해결하는 데 다소 시간이 걸렸다. 노트북 초기 설정 시 계정을 한글인 송현진
으로 만들었는데 개발 도구에서 경로 인식 문제가 종종 발생해서 사용자 폴더명을 song
으로 바꿨었다. 하지만 사용자 이름이 여전히 송현진
으로 남아있어서 꽤나 골치아팠다. 결국 .pem
파일의 소유자와 권한을 GUI에서 일일이 수정하면서 SSH 보안 정책에 맞는 최소 권한(read only)을 갖도록 설정했고 이를 통해 문제를 해결할 수 있었다. 앞으로는 Windows에서 SSH 키를 사용할 때 권한 경고가 나올 경우 가장 먼저 .pem
파일의 속성부터 확인하고 조정해야겠다는 걸 확실히 깨달았다.