GitHub Actions에서 사용할 배포용 Linux 유저 생성
GitHub Actions로 ARM64 플랫폼 빌드 및 배포 용도의 Linux 유저를 만들자. GitHub Actions로 빌드한 결과물을 Linux 인스턴스로 복사한다. 빌드 결과물 저장할 디렉터리의 쓰기 권한이 필요하다. 딱 필요한 권한만 세팅한 Linux 유저를 만들자. 비밀키를 GitHub이 제공하는 저장소 환경 secrets에 저장해서 내가 관리하는 것보다 훨씬 더 안전하다고 해서 필요 이상의 막대한 권한을 가진 유저 비밀키를 동네방네 뿌리는 잘못된 습관을 만들지 말자.
배포용 유저 생성 - deployuser
deployuser
로 직관적인 이름의 유저를 만든다.
sudo useradd -m -s /bin/bash deployuser
-m
옵션으로 홈 디렉터리를 만들고 bash
를 기본 셸로 지정했다.
보조 그룹(supplementary groups) 멤버로 추가
deployuser
는 배포할때만 사용한다. 나는 평소에 ubuntu
유저를 사용한다. 평소에 사용하는 유저로 deployuser
가 배포한 바이너리를 똑같은 권한으로 접근하고 싶다. 이럴 때 사용하라고 group이 있다. 특정 디렉터리 접근을 위해서는 유저당 여러 개를 가질 수 있는 보조 그룹(supplementary groups)을 추가한다.
appgroup
그룹을 추가하고 ubuntu
와 deployuser
유저를 그룹에 추가한다.
sudo groupadd appgroup
sudo usermod -aG appgroup ubuntu
sudo usermod -aG appgroup deployuser
그룹에 멤버로 추가가 잘 됐는지 확인해본다.
grep ^appgroup /etc/group
appgroup:x:1003:ubuntu,deployuser
appgroup
그룹이 권한을 가진 디렉터리 생성
/app
디렉터리를 만들고 소유자는 deployuser
, 그룹은 appgroup
으로 설정한다.
sudo mkdir /app
sudo chown deployuser:appgroup /app
drwxr-xr-x 2 deployuser appgroup 4096 Jun 15 07:07 app
유저 뿐만 아니라 그룹에게도 똑같은 권한을 세팅한다.
sudo chmod 775 /app
drwxrwxr-x 2 deployuser appgroup 4096 Jun 15 07:07 app
GitHub Actions로 /app
디렉터리로 파일을 복사한다. group이 appgroup
으로 세팅되게 한다.
sudo chmod g+s /app
drwxrwsr-x 2 deployuser appgroup 4096 Jun 15 07:07 app
x
가 s
로 바뀌었다.
ssh 키 생성 및 GitHub에 등록
반대라서 헷갈릴 수 있다. GitHub에서 Linux 인스턴스로 접속한다. 즉 비밀키가 GitHub에 저장되어야 한다.
ssh 키를 생성한다.
sudo su deployuser
ssh-keygen -t ed25519 -C "github-actions-deploy"
authorized_keys
파일을 만들고 방금 만든 ssh 키의 공개키를 추가한다.
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
이제 비밀키를 클립보드에 복사한다. pbcopy는 클립보드에 저장하는 MacOS 명령어다.
ssh my-app 'sudo su - deployuser -c "cat ~/.ssh/id_ed25519"' | pbcopy
복사한 비밀키를 GitHub이 제공하는 저장소 환경 secrets에 저장하고 쓴다.