전체 리눅스 서버를 소스 제어하에두기 (git)


17

git을 사용하여 전체 Linux 서버를 버전 제어하에 둘 생각입니다. 그 이유는 악의적 인 수정 / 루트킷을 탐지하는 가장 쉬운 방법 일 수 있기 때문입니다. 시스템의 무결성을 확인하려면 순진하게 필요하다고 생각하는 모든 것 : 매주 리눅스 파티션을 마운트하거나 구조 시스템을 사용하여 git 저장소가 여전히 뜨겁지 않은지 확인한 다음 git 상태를 발행하여 시스템의 변경 사항을 감지하십시오. .

디스크 공간의 명백한 낭비 외에도 다른 부작용이 있습니까?

완전히 미친 생각입니까?

적어도 / dev 및 / proc를 제외해야 할 가능성이 있기 때문에 루트킷을 검사하는 안전한 방법일까요?


5
나는 "완전히 미친 아이디어"에 너무 많은 영향을 미쳤습니다. 파일 변경은 항상 발생하며 업그레이드 절차를 악몽으로 만듭니다.
forcefsck

@forcefsck-왜 파일 변경이 항상 발생합니까? 시스템 업그레이드 중에 발생해서는 안됩니까?
Tobias Hertkorn

1
그냥 생각, 왜 --link -dest와 dirvish 또는 rsync와 같은 것을 사용하지 않습니까? dirvish를 사용하여 백업을 수행하면 변경된 내용을 보여주는 각 백업에 대한 멋진 보고서를 제공합니다. --dry-run 모드에서 rsync를 사용하여 현재 상태를 백업과 비교할 수 있습니다. dirvish를 사용하는 경우 백업 시스템으로 잘 테스트 된 도구를 사용하게됩니다.
Zoredache

답변:


16

그것은 "나쁜 생각"(tm)입니다. 다른 모든 것 외에도 저장소는 모두 느리게 실행되며 모든 개정이 유지 될수록 악화됩니다.

꼭두각시 / cfengine / 요리사와 같은 중앙 집중식 관리를 시도하십시오. 그러면 예상대로 일을 유지하고 예기치 않은 변경 사항을 되돌릴 수 있습니다.

이를 iwatch와 결합하여 무단 파일 변경에 대한 이메일을 받으십시오.

사용자 지정 응용 프로그램을 롤아웃하는 데 필요한 경우 rpm / deb 파일과 더 결합하십시오.

rkhunter 또는 chkrootkit과 같은 것을 던져서 차기 위해 가십시오.

작업이 완료되었습니다.


나쁜 생각에 +1-중앙 집중식 관리 (인형 / cfengine / chef / radmind / 등)는 시스템이 정의 된 요구 사항에 따라 구성되도록하며 대부분 "스트립 와이어"로도 사용될 수 있습니다. 물건 변경이 없어야 할 때 알려주는 시스템을 입력하십시오.
voretaq7

나는 그것이 정말로 나쁜 생각이라고 생각합니다. 좋아, 어떤 파일이 새롭고 변경되었는지 볼 수 있습니다. 그러나 git을 실행하면 파일의 압축을 풀고 계산하기 위해 많은 CPU가 필요합니다. 당신이 전체 mashine에 이것을하면 많은 시간이 걸립니다.
René Höhle

1
나는 그 목록에 다른 것을 던질 것이다; etckeeper 는 / etc만을 제외하고 git repo를 수행합니다.
Shane Madden

git과 같은 저장소는 엄청나게 빠릅니다. 그리고 내가 생각하는 서버가 다운 타임을 계획했기 때문에 CPU 또는 IO에 대해 걱정하지 않습니다 (따라서 구조 시스템을 사용하여 마운트 할 수 있음)
Tobias Hertkorn

내가 이해하지 못하는 것 : 중앙 집중식 관리 시스템이 어떻게 오탐 (false positive)이 없음을 보장 하는가-시스템이 손상
되었거나

5

또 다른 대안은 tripwire 를 설정하는 것입니다. tripwire 는 시스템의 모든 중요한 파일을 스파이더 링하여 허용 할 수없는 것으로 정의한 방식으로 변경된 것을 결정하는 GPL 소프트웨어입니다. 암호로 강력한 체크섬에 이르기까지 inode 번호를 통해 mtime처럼 간단하게 변경을 정의 할 수 있습니다.

에서 변경된 파일 /var/run,에서 DHCP 클라이언트 파일의 변경 등에 대해 매일 밤 많은 보고서를받지 않으려면 설정 및 조정이 필요 /etc하지만 문제가 발생하면 문제가 발생할 수 있습니다. 정말 도움이되었습니다.

파일 속성 데이터베이스는 시스템에 알려지지 않은 키로 서명 되므로 데이터베이스 나 트립 와이어 바이너리를 악의적으로 변경 한 도구가 없다는 것을 확신 할 수 있습니다. 완전한 확실성을 위해 트립 와이어 도구 및 데이터베이스의 사본을 읽기 전용 매체에 구울 수 있습니다. 읽기 전용 매체는 서버에 마운트 할 수 있으며 완전한 포렌식 분석이 필요한 경우 디스크를 구운 후 모든 변경 사항을 확인하는 데 사용할 수 있습니다.

이 작업을 수행하려면 시스템을 프로덕션 환경에 배포하기 전에 트립 와이어를 설정하고 실행하는 것이 중요합니다. 그렇지 않으면 일부 악의적 인 사용자가 시스템을 감염시킬 기회가 없었 음을 완전히 확신 할 수 없습니다 트립 와이어되었습니다.


3

나는 이것이 효과가 있다고 생각하지 않지만 실험적으로 / etc 폴더 로이 작업을 수행하면 어떻게되는지보고 싶습니다. 그것은 대부분의 구성 정보가 유지되는 곳입니다.


4
/ etc 만 수행 중입니다. 확인 kitenet.net/~joey/code/etckeeper (etckeeper)
토비아스 Hertkorn

1
etckeeper는 정말 훌륭하게 작동합니다. 매우 유용합니다.
Zoredache

2

@Sirex는 이미 매우 좋은 답변을 제공했지만 보안을 한 단계 더 발전 시키려면이를 예방하는 가장 좋은 방법은 먼저 예방과 탐지입니다.

/ filesystem이 읽기 전용으로 마운트 된 시스템을 설정하십시오. / tmp를 noexec, nodev 옵션으로 마운트 된 별도의 ramfs로 만드십시오. 시스템이 작동하려면 / var 만 읽기 / 쓰기로 마운트하면됩니다. 따라서 / var 아래에서 rw, noexec, nodev를 사용하여 fs를 마운트하고 / var / tmp에 대한 쓰기 권한을 제거하십시오 (afaik, 데몬에서는 거의 필요하지 않으며 구성 가능해야 함). 또한 커널의 보안 패치를 사용하여 사용자의 리소스 액세스를 추가로 제한하십시오 (예 : grsec). 가장 제한적인 규칙이있는 방화벽을 사용하십시오.

일부 배포판은 시스템 강화에 대한 광범위한 문서를 제공합니다. 예를 들면 다음과 같습니다.


0

도구가 시스템에서 수행하는 변경 사항을 분석하는 것이 좋습니다.

  1. VM에 베어 리눅스 설치
  2. 루트 자식을 초기화
  3. 분석하려는 도구를 설치하십시오
  4. 시스템의 롤 변경 사항을 모두 확인하십시오.

... VM 삭제

.gitignore proc 등과 같이 파일에 많은 폴더를 추가해야합니다 .


0

전체 파일 시스템의 특정 폴더를 버전 제어 상태로 유지하려는 경우 다음 방법이 효과적 일 수 있습니다.

먼저 /레벨 에서 Git 저장소를 작성하십시오 .

$ cd /
# git init

그런 다음 /programming//a/11018557/320594 기반)와 /.gitignore같이 특정 폴더 만 허용하는 목록을 만듭니다 ./path/to/versioned/config/folder/

/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore

그런 다음 첫 번째 커밋을 만듭니다.

# git add -A
# git commit -m "Initial commit"

그런 다음 필요에 따라 버전 제어에서 원하는 추가 폴더를 추가하십시오.

추신:

이전 방법 외에도 / etc /를 버전 제어 상태로 유지해야하는 경우 특정 용도의 폴더에 대해보다 전문화 된 특정 폴더의 버전을 지정 하기 위해 etckeeper( https://etckeeper.branchable.com/ ) 을 사용하는 것이 좋습니다 ( 예 : 패키지 설치 후 자동 커밋)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.