Files
KArtSell.Aegis/docs/CURRENT/DEPLOY_KARTSELL_SUDO_DELEGATION.md
T
kjh2064 1c685e2285
ci / static (push) Successful in 11s
ci / publish (push) Has been cancelled
ci / backend (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / static (pull_request) Successful in 9s
Build & Test with Secrets / build (pull_request) Failing after 2s
Build & Test with Secrets / security-scan (pull_request) Has been cancelled
Build & Test with Secrets / notification (pull_request) Has been cancelled
Build & Test with Secrets / frontend (pull_request) Has been cancelled
ci / backend (pull_request) Has been cancelled
ci / frontend (pull_request) Has been cancelled
ci / publish (pull_request) Has been cancelled
DEPLOY: delegate kartsell restart without interactive sudo
2026-08-06 15:59:16 +09:00

1.4 KiB

KArtSell 배포 재기동 권한 계약

Source

  • 운영 호스트 hz-prod-01의 실제 sudo 정책 조회 결과
  • 기존 quantenginetaxbaik 서비스의 특정 systemctl restart NOPASSWD 위임 패턴
  • .gitea/workflows/deploy.yml

Assumption

  • 배포 SSH 계정은 kjh2064로 유지한다.
  • 운영 서비스는 /etc/systemd/system/kartsell.service로 유지한다.
  • DbMigrator와 artifact 복사는 현재처럼 kjh2064 권한으로 수행한다.

Decision

kjh2064에 전체 sudo 권한을 부여하지 않고, 운영자가 한 번만 다음 단일 명령을 /etc/sudoers.d/kartsell-deploy에 등록한다.

kjh2064 ALL=(root) NOPASSWD: /usr/bin/systemctl restart kartsell

파일 권한은 0440이어야 하며 visudo -cf /etc/sudoers.d/kartsell-deploy 검증 후 적용한다. 이후 CI는 비대화형 sudo -n systemctl restart kartsell만 사용하므로 배포마다 비밀번호 입력이나 sudo 등록이 필요 없다.

Deployment guard

워크플로우는 artifact 복사와 DbMigrator 실행 전에 sudo -n -l로 위임 존재 여부를 검사한다. 위임이 없으면 운영 DB를 변경하지 않고 exit 77로 종료한다.

Unknown / Decision Required

  • 이 파일을 운영 호스트에 설치할 권한은 root 운영자에게만 있다.
  • 설치 후 필요한 증거: visudo -cf 결과, sudo -n -l 결과, 다음 deploy run의 성공 로그, 서비스 active 상태.