1개의 서버에서 Let's Encrypt 인증서 공유하기

김의석 ·2025년 1월 1일

Hello! Poko Ver.2

목록 보기
20/28

권한과 소유권에 대한 이해

1. 파일 소유권 (chown)

  • 소유자와 그룹: 파일과 디렉토리에는 소유자(user)와 그룹(group)이 지정됩니다.

  • chown : 파일의 소유자와 그룹을 변경하는 데 사용됩니다.

  • sudo chown <소유자>:<그룹> <파일 또는 디렉토리 경로>

# 예시
sudo chown ubuntu:ubuntu ~/poko_ver2/data/certbot/

2. 파일 권한 (chmod)

권한 레벨

  • 읽기(Read): 파일 내용을 읽을 수 있음 (r).
  • 쓰기(Write): 파일 내용을 수정할 수 있음 (w).
  • 실행(Execute): 파일을 실행할 수 있음 (x).

권한 코드

  • 숫자로 표현: 각 권한을 숫자로 표현 (4=읽기, 2=쓰기, 1=실행).
  • 755: 소유자는 모든 권한(rwx), 그룹 및 기타는 읽기와 실행(r-x).
  • 600: 소유자만 읽기와 쓰기(rw-), 그룹 및 기타는 접근 불가(---).
  • chmod: 파일 권한을 변경하는 데 사용됩니다.
  • sudo chmod <권한 코드> <파일 또는 디렉토리 경로>

권한 숫자 구조

  • 3자리 숫자로 표현한 것.
  • 첫 번째 자리: 소유자(owner)의 권한.
  • 두 번째 자리: 그룹(group)의 권한.
  • 세 번째 자리: 기타 사용자(others)의 권한.
# 예시
sudo chmod 600 ~/poko_ver2/data/certbot/conf/archive/hellopoko.com/privkey*.pem

1차 개발 디렉토리 내 SSL 인증서 가져오기

문제

  • 문제 요약:
    운영서버에서 새 디렉토리를 생성하여 2차 개발코드clone하여 배포 함.
    2차 개발코드가 위치하는 디렉토리에서 init-letsencrypt.sh로 ssl 인증서 요청 함
    1차 개발코드에서 이미 운영서버 도메인에 대한 ssl 인증서가 발급되었기 때문에 발급 거부 함.

  • 오류 메시지: 없음

문제 해결 과정

1. 인증서 파일 복사

  • 기존 1차 개발 디렉토리(~/github/Hello_Poko)에서 인증서 파일을 2차 개발 디렉토리(~/poko_ver2)로 복사.
sudo cp -r ~/github/Hello_Poko/data/certbot/conf/archive/hellopoko.com/ ~/poko_ver2/data/certbot/conf/archive/
sudo cp -r ~/github/Hello_Poko/data/certbot/conf/live/hellopoko.com/ ~/poko_ver2/data/certbot/conf/live/
  • -r 옵션은 재귀적 복사를 의미, 디렉토리그 안에 포함된 모든 파일하위 디렉토리를 복사한다.

2. 파일 소유권 및 권한 설정

  • 인증서 파일에 적절한 소유권(ubuntu:ubuntu)과 권한 설정.
sudo chown -R ubuntu:ubuntu ~/poko_ver2/data/certbot/
sudo chmod -R 755 ~/poko_ver2/data/certbot/
sudo chmod 600 ~/poko_ver2/data/certbot/conf/archive/hellopoko.com/privkey*.pem
  • chown -R : 디렉토리와 모든 하위 파일의 소유권을 특정 사용자(ubuntu)로 변경.
  • chmod -R 755 : 디렉토리와 하위 파일에 기본 읽기/쓰기/실행 권한을 부여.
  • chmod 600 : 민감한 개인 키 파일의 보안을 위해 소유자만 읽기/쓰기 가능하도록 제한.

왜 소유권과 권한이 이렇게 설정하였는가?

  • chown -R ubuntu:ubuntu ~/poko_ver2/data/certbot/
    인증서 디렉토리와 파일이 root로 소유로 설정 되었던 것을 해결하기 위해서이다.
    ubuntu 사용자로 컨테이너를 관리하고 있었으므로, ubuntu 사용자에게 소유권을 부여해 인증서에 접근이 가능하게 한다.
  • sudo chmod -R 755 ~/poko_ver2/data/certbot/
    디렉토리 및 하위파일의 권한을 설정
    7 : 소유자에게 읽기(r), 쓰기(w), 실행(x) 권한을 부여.
    5 : 그룹 및 기타 사용자에게 읽기(r), 실행(x) 권한만 부여.
  • sudo chmod 600 ~/poko_ver2/data/certbot/conf/archive/hellopoko.com/privkey*.pem
    privkey에 대해 읽기, 쓰기 권한을 소유자에게만 부여
    6 : 소유자에게 읽기(r), 쓰기(w) 부여
    0 : 그룹, 기타, 사용자에 부여
    privkey.pem 파일은 단순한 데이터 파일이므로 실행 권한이 필요하지 않다.

-R 옵션

재귀적으로 디렉토리와 하위 파일/디렉토리에 적용.

  • chown -R: 대상 디렉토리와 그 내부의 모든 파일과 하위 디렉토리의 소유자 및 그룹을 변경.
  • chmod -R: 대상 디렉토리와 내부의 모든 파일/디렉토리의 권한을 일괄적으로 변경.
chmod -R 755 /path/to/dir

3. 파일 확인

  • 복사된 파일이 제대로 존재하고 권한이 설정되었는지 확인.
ls -l ~/poko_ver2/data/certbot/conf/live/hellopoko.com/
ls -l ~/poko_ver2/data/certbot/conf/archive/hellopoko.com/

4. Nginx 컨테이너 재시작

  • nginx 컨테이너를 다시 실행.
sudo docker-compose -f docker-compose.prod.yml up -d nginx
  • 로그 확인, nginx 로그를 확인하여 오류가 해결되었는지 확인.
sudo docker logs poko_ver2_nginx_1

5. 결과

  • 복사된 인증서 파일이 올바르게 설정되었고, nginx 컨테이너가 SSL 인증서를 정상적으로 로드.
  • https://hellopoko.com과 같은 HTTPS 연결이 정상 작동.
추가 팁
  • 권한 설정의 중요성:
    • privkey.pem과 같은 민감한 파일은 600 권한으로 설정해야 보안이 유지됩니다.
    • 잘못된 권한 설정은 보안 문제를 야기할 수 있습니다.
  • 디버깅 도구:
    • s -l: 파일의 권한과 소유권 확인.
    • docker logs: 컨테이너 로그 확인.

certbot 관련 디렉토리 구조

/home/ubuntu/
├── github/
│   └── Hello_Poko/
│       └── data/
│           └── certbot/
│               ├── conf/
│               │   ├── live/
│               │   │   └── hellopoko.com/
│               │   │       ├── README
│               │   │       ├── cert.pem       # 현재 도메인의 SSL 인증서
│               │   │       ├── chain.pem      # 인증서 체인 (중간 인증 기관)
│               │   │       ├── fullchain.pem  # 인증서 + 체인 (완전한 체인)
│               │   │       ├── privkey.pem    # 인증서의 개인 키 (비밀 유지 필요)
│               │   ├── archive/
│               │   │   └── hellopoko.com/
│               │   │       ├── cert1.pem, cert2.pem, ... # 이전 인증서 백업
│               │   │       ├── chain1.pem, chain2.pem, ...
│               │   │       ├── fullchain1.pem, fullchain2.pem, ...
│               │   │       ├── privkey1.pem, privkey2.pem, ...
│               │   └── options-ssl-nginx.conf  # SSL 기본 설정
│               └── www/                        # Certbot의 웹 인증을 위한 파일 저장
│
└── poko_ver2/
    └── data/
        └── certbot/
            ├── conf/
            │   ├── live/
            │   │   └── hellopoko.com/
            │   │       ├── README
            │   │       ├── cert.pem
            │   │       ├── chain.pem
            │   │       ├── fullchain.pem
            │   │       ├── privkey.pem
            │   ├── archive/
            │   │   └── hellopoko.com/
            │   │       ├── cert1.pem, cert2.pem, ...
            │   │       ├── chain1.pem, chain2.pem, ...
            │   │       ├── fullchain1.pem, fullchain2.pem, ...
            │   │       ├── privkey1.pem, privkey2.pem, ...
            │   └── options-ssl-nginx.conf
            └── www/
profile
널리 이롭게

0개의 댓글