Skip to content
시스템

Etckeeper : /etc 변경 전에 다시 읽기

Avatar illustré de Julien Macé 2 min read
Dossiers de configuration Linux comparés avant et après une modification avec Etckeeper
Historique de configuration Linux avec Etckeeper

당신은 /etc/ssh/sshd_config, sudo 규칙 또는 네트워크 구성을 수정했습니다. 서비스가 이후에 시작을 거부한다면 변경된 줄을 찾는 것이 수정 자체보다 더 많은 시간을 소요할 수 있습니다. Etckeeper는 /etc의 역사 기록을 로컬 Git 저장소에 보관하여, 되돌리기 전에 diff를 재검토할 수 있도록 합니다.

변경 전후의 Linux 설정 파일들
Etckeeper는 개입을 진행하기 전에 /etc에서 차이를 검토할 수 있게 해줍니다.

원칙은 간단합니다: 저장소의 상태를 읽고, 정리된 버전을 기록하고, 제한된 수정을 한 후 비교합니다. 이 방법은 Debian과 Ubuntu에 적합하며, /etc를 민감한 영역으로 다루는 것이 전제조건입니다.

첫 번째 백업 전에 저장소 검토하기

배포판의 저장소에서 Etckeeper를 설치합니다. Debian이나 Ubuntu에서는 Git에 의존하며 /etc에 로컬 저장소를 생성합니다.

sudo apt update
sudo apt install etckeeper git
sudo etckeeper init
sudo git -C /etc status

마지막 명령은 Git 저장소가 있어야 하며 수정된 파일이나 추적되지 않은 파일을 표시해야 합니다. 비밀번호 파일, 개인 키 또는 Git에 보관되어서는 안 되는 애플리케이션 비밀이 발견되면 여기에서 중지하세요.

  • 오직 root만이 저장소 및 그 파일을 읽을 수 있도록 확인하세요.
  • 첫 번째 커밋 전에는 추적되지 않은 파일을 검토하세요.
  • 비밀 정책과 감사가 원격 저장소를 허용할 때까지 로컬 저장소를 유지하세요.

나는 이 로컬 저장소를 평범한 서버에 두도록 하겠습니다. 유용한 기록이 외부 포지션으로 구성 파일을 자동으로 전송하는 것을 정당화하지 않습니다.

수정 이전에 비교 지점 만들기

서비스에 손을 대기 전에 상태를 확인하고 읽기 쉬운 커밋을 생성하세요. Etckeeper는 패키지 관리 작업 주위에서 자동 커밋을 수행할 수 있지만, 특정 개입 이전에 수동 커밋이 더 바람직합니다.

sudo git -C /etc status
sudo etckeeper commit "SSH 수정 전 상태"
sudo git -C /etc log --oneline -5

저널에는 귀하의 출발점이 포함되어야 합니다. 이 단계는 변경 사항을 설명하거나 단일 파일을 복원해야 할 경우 정확한 기준을 제공합니다.

서비스를 재시작하기 전에 차이점 검토하기

먼저 실험용 수정 작업을 진행하세요. 예를 들어 /etc에 있는 테스트 파일에서 수정을 수행합니다. 프로덕션에서는 네트워크 구성이나 OpenSSH를 수정하기 전에 다른 SSH 세션을 하나 더 열어두세요.

sudo editor /etc/exemple-etckeeper.conf
sudo git -C /etc diff -- exemple-etckeeper.conf
sudo etckeeper commit "테스트 파일 추가"
sudo git -C /etc show --stat HEAD

git diff는 커밋 이전의 수정된 줄들을 보여줍니다. 커밋 후 git show는 기록된 버전을 표시합니다. 데몬을 제어하는 구성을 위해서는 재시작 전에 서비스 관련 명령어로 구문 확인도 수행해야 합니다.

식별된 커밋으로 파일 복원하기

잘못된 변경이 /etc 전체를 복원해야 한다는 것은 아닙니다. 커밋을 나열하고 오류가 발생하기 이전의 커밋을 선택한 후, 영향을 받은 파일만 임시 디렉토리에 복사하여 재검토합니다.

sudo git -C /etc log --oneline -- ssh/sshd_config
sudo git -C /etc show HEAD~1:ssh/sshd_config > /tmp/sshd_config.old
sudo diff -u /etc/ssh/sshd_config /tmp/sshd_config.old

그런 다음 재검토 및 구문 검사를 완료한 후 /etc/ssh/sshd_config로 검증된 버전을 복사합니다. 신속한 복원은 간섭된 다른 수정 사항을 덮어쓸 경우 위험할 수 있습니다.

Etckeeper는 시스템 백업을 대체하지 않습니다

Etckeeper는 텍스트 파일과 그 Git 메타데이터를 추적하며, 애플리케이션 데이터, 볼륨 또는 머신을 재부팅하는 능력을 추적하지 않습니다. 시스템과 데이터를 위해 복원 가능한 별도의 백업을 유지하세요.

서비스가 파일에 기록하는 동안 수정 사항을 제어하려면, inotifywait를 사용하여 실제 기록을 관찰하세요. 문제가 재시작 후 발생하면 journalctl을 사용한 마지막 재시작 로그가 해당 서비스 식별에 도움이 될 것입니다.

한계는 분명합니다: Etckeeper는 /etc의 차이를 입증하는 데 도움을 줍니다. 그러나 수정이 안전하다고 보장하지 않으며, 감사 없이 원격 저장소에 비밀을 전송해서는 안 됩니다.

Share Facebook X WhatsApp LinkedIn Pinterest Reddit Email