서버 운영
Ubuntu 서버에 최소 권한 배포 사용자를 만든 설정 노트
root SSH 키로만 배포하던 VPS에 별도 사용자와 제한된 sudo 권한을 구성한 설정 노트입니다.
root로 배포하던 습관을 바꾼 계기
경로 오타로 오래된 릴리스 디렉터리를 지울 뻔한 뒤, 배포 명령 하나가 시스템 전체를 건드릴 수 있음을 실감했다. 애플리케이션 실행 계정과 시스템 권한을 나누되 실제 필요한 작업만 열기로 했다.
계정과 키를 먼저 검증했다
adduser deploy
usermod -aG www-data deploy
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
ssh [email protected] id
기존 관리자 세션을 유지한 채 새 터미널에서 로그인을 시험했다. 잠금 사고를 피하려면 이 순서가 안전하다.
명령 단위로 권한을 제한했다
배포 계정에는 서비스 제어와 로그 확인만 허용했다. 서버에서 command -v systemctl, command -v journalctl로 실제 경로를 확인한 뒤 sudoers 문법을 검사했다.
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload myapp.service, /usr/bin/journalctl -u myapp.service
visudo -cf /etc/sudoers.d/deploy-app
sudo -l -U deploy
처음에 추측한 바이너리 경로가 달라 명령이 거부됐던 경험 때문에 경로를 하드코딩하기 전에 항상 확인한다.
적용 체크리스트
- 새 계정 SSH 접속과 파일 쓰기를 확인한다.
- 허용하지 않은 패키지 관리 명령이 거부되는지 본다.
- 다른 관리 경로를 확보한 뒤 관리자 원격 접속을 줄인다.
- 배포 로그에 환경 변수가 나오지 않는지 확인한다.
권한 분리는 설정 파일보다 검증 순서가 중요했다. 지금은 기존 세션을 남겨 둔 채 새 계정부터 단계별로 확인한다.