서버 보안강화 - 접근

topics 800-프로젝트 400-인프라 & 아키텍처 805 미니서버 구축기
types 실습 도구
contexts 프로젝트
tags

서버 보안강화 - 접근

GitHub Actions로 배포 시 사용할 배포 계정 생성 및 접근 권한 설정


1. 배포 사용자 생성

GitHub Actions로 특정 트리거 발생 시 서버로 배포할 수 있도록 배포 그룹과 배포 사용자를 생성했다.

참고:

확인 명령어

# <span id="사용자-확인"></span>사용자 확인
cat /etc/passwd

# <span id="그룹-확인"></span>그룹 확인
cat /etc/group

생성한 구조

항목
그룹 deployers
그룹 관리자 deploy
사용자 deploy1, deploy2

2. 공개키 설정

공개키는 기본적으로 /home/사용자명/.ssh/authorized_keys에 있다. sshd_config에서 변경 가능하다.

AuthorizedKeysFile 경로

: 경로에 %u를 쓰면 동적으로 유저 이름 값을 넣을 수 있다.

유의점

소유권/허가권 참고

해당 공개키는:

  • 해당 사용자가 소유권을 가지고 있어야 함
  • 해당 사용자만 읽고(4) 쓸 수(2) 있는 권한이 있어야 함
sudo chown -R 사용자명:그룹명 파일경로
sudo chmod 755 경로

sshd_config 보안 설정

PermitRootLogin no          # root 비활성화
PasswordAuthentication no   # password 비활성화
PubkeyAuthentication yes    # Key authentication 활성화

3. 접근 권한 설정

배포 계정이 접근할 수 있는 파일을 제한하고 싶었다. /release 안에 home 폴더를 만들어 deployers 그룹만 접근 가능하게 하고 싶었다.

방법 1: ChrootDirectory

ChrootDirectory는 일종의 감옥으로 루트 디렉토리를 특정 경로로 변경한다. 해당 디렉토리가 루트로 새로운 환경을 구성하는 것이다.

sshd_config에서 지정할 수 있으며 그룹별로도 가능하다.

단점: 분리된 환경이므로 로그인에 필요한 장치들이 중복 필요하다. 예를 들어 /release를 ChrootDirectory로 한다면, /bin/bash, 공개키 등이 /release 안에 있어야 쉘로 접속 가능하다.

왜 안 썼냐면: 시스템 모니터링 등을 할 수 있는 사이트도 배포하고 싶어서 시스템 정보 인터페이스를 읽을 수 있어야 했다.

방법 2: 리눅스 ACL 설정 (선택)

ACL은 접근 제어 리스트이다

sudo apt-get install acl

기본적으로 허가권을 이용해서 파일 접근을 허가하면 3가지 분류밖에 없다:

  • 소유자 / 그룹 / other

하지만 other에서 더 세세한 분류를 하고 싶었다.

원하는 구조:

  • 개인 파일이 들어간 폴더: admin 그룹만 접근 가능
  • /release: deployers 그룹뿐만 아니라 admin 그룹도 접근 가능

setfacl 명령어

setfacl {옵션} {누구,권한} {경로}
옵션 설명
-m modify
-x remove
누구/권한 설명
d default값으로 추가 (하위 폴더 생성 시 이 접근 권한 추가)
u 사용자
g 그룹
rwx read write execute

예시:

sudo setfacl -m d:g:admin:rwx ./release

이렇게 /release 폴더에 admin 그룹도 접근/수정/실행이 가능하도록 변경했다.