나는 gitolite에 푸시하는 등의 방법으로 데비안 서버를 유지하고 싶습니다.
문제는 gitolite를 루트나 외부에서 시스템에 대한 쉘 액세스 권한이 있는 사용자로 실행해서는 안 된다는 것입니다. 그러나 후크 및 트리거에서 etckeeper와 상호 작용하려면 gitolite가 필요합니다(예: 외부 사용자가 git 작업을 수행하기 전에 작업 트리에 보류 중인 모든 변경 사항을 커밋하고 기본 gitolite 저장소에 푸시하는지 확인). 대신 루트 액세스가 필요합니다.
나는 무엇인지 알고 싶다안전하고 단순하며 우아함이 문제를 해결하는 방법.
분명히 많은 솔루션이 가능하지만 저는 Linux 시스템 관리에 능숙하지 않기 때문에 영감을 찾고 있습니다. 내가 고려한 가능한 솔루션은 다음과 같습니다.
두 명의 서로 다른 사용자와 일부 메시징 시스템(생산자/소비자 또는 데몬)을 사용하여 gitolite는 루트 사용자가 실행하도록 하나의 작업을 남겨둡니다. (특히 종료 코드를 기다려야 하기 때문에 모든 명령을 실행할 수 있는 쉘 스크립트인 git Hook의 고급 기능에 비해 매우 복잡해 보입니다.)
setuid를 사용하시겠습니까? 이 작업을 위해 설계된 것 같지만 주의 깊게 읽어보면 위험해 보이고 쉘 스크립트를 많이 지원하지 않는 것 같습니다...
누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
고쳐 쓰다: 이 질문에 대한 답변을 제가 직접 찾다가 아래에 답변을 게시하게 되었습니다. 다른 솔루션/고려사항을 환영합니다...
답변1
나는 다음과 같은 제목의 가이드를 찾았습니다.지톨라이트와 etckeeper그러나 그것은 나에 의해 테스트되지 않았습니다.
발췌
많은 Linux 시스템의 변경 사항을 추적하기 위해 /etc에 대한 모든 변경 사항을 추적하는 etckeeper를 설치했습니다. 패키지를 설치할 때 자동 커밋을 위한 멋진 적절한 후크가 함께 제공됩니다.
git 저장소의 변경 사항을 유지하는 것 외에도 gitolite가 관리하는 중앙 저장소로 푸시하기 시작했습니다. 다음 단계에 따라 etckeeper를 설정했습니다.
루트로
/etc
$ git config –global user.email [email protected] $ git config –global user.name “Configuration Admin” $ git remote add origin [email protected]:machineconf
git 키를
/root/.ssh
.루트 사용자로서:
$ cd /etc/etckeeper/commit.d $ (echo ‘#!/bin/sh’ ; echo ‘git push origin’) > 99git-push $ chmod +x 99git-push $ git add . $ git commit -m “automatically push commits to backup repository”
답변2
음, 보름달이 다가오고 있고 잠이 부족한 내 뇌는 창의적인 과잉 운전을 시작하고 있습니다. 나는이 문제를 해결했다고 생각합니다.
그 과정에서 나는 두 번째 주요 보안 문제를 발견했고 이에 대해 논의할 것입니다.
질문
gitolite는 변경 사항을 /etc/.git으로 가져와서 확인할 수 있어야 합니다. 그래서 권한이 있어야 하는데, 외부 SSH 연결을 허용하는 소프트웨어 계정이기 때문에 보안상의 위험이 있습니다.
두 번째 문제는 /etc를 gitolite의 코 아래로 전달함으로써 gitolite가 읽지 말아야 할 파일을 읽고 변경할 수 있게 한다는 것입니다. Gitolite는 양쪽 끝 모두에 투명한 전송 프로토콜이어야 합니다. 신뢰할 수 없는 중개인. 다행스럽게도 이는 정보 보안 분야에서 잘 연구된 패턴입니다.
해결책
gitolite가 권한이 있는 일부 제한된 작업을 수행하도록 허용하려면 실제로 sudoers 파일에 해당 사용자를 추가하고 루트로 실행해야 하는 스크립트만 실행하도록 허용할 수 있습니다. sudoers를 사용하면 규칙에 해시를 추가하여 파일 이름만을 기반으로 한 유효성 검사를 피할 수 있습니다.
etcgit ALL=(root) NOPASSWD: sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== /etc/gitolitetc/scripts/xxx.sh
이를 통해 etcgit 사용자는 단 한 가지 작업만 수행할 수 있으며, 그 한 가지 작업으로 인해 해시가 변조되는 것을 방지할 수 있습니다.
이제 gitolite 읽기 및 /etc 변경 문제에 대해 설명하겠습니다.일부해결책가지다계속 ~ 이다제안됨git 엔드투엔드를 투명하게 암호화합니다. 실현 가능하다고 입증되면 모든 문제가 즉시 해결됩니다.
실행 가능하지 않은 경우에도 git 저장소에서 특정 파일을 생략하여 gitolite가 해당 파일을 읽지 않도록 할 수 있으며, 개발자가 서명한 커밋만 가져오는 git 후크를 작성할 수 있습니다. 즉, 개인 파일에는 /에 대한 pgp 키가 필요합니다. etc/.git 변경 사항을 수락합니다. 마이크 거위츠는이것은 그의 블로그에 잘 설명되어 있습니다.서명 확인과 포괄적인 이론 분석을 위한 스크립트가 포함되어 있습니다.
일부 난해한 다른 옵션은 아직 타당성이 확인되지 않았기 때문에 Gitolite가 루트 소유권 하에 제어해야 하는 기본 저장소를 유지하고 sudoer를 사용하여 Gitolite가 전달 작업을 수행하는 데 필요한 최소한의 명령만 실행하도록 허용하는 것이 가능할 것입니다. 커밋 및 전달하지만 저장소의 내용은 실제로 읽을 수 없습니다. 이것이 가능한지는 의문이지만 만약 가능하다면 암호화된 저장소의 모든 장점을 갖고 있으며 단점은 전혀 없습니다.
글쎄, 나는 마침내 서버 구성을 마쳤을 때 이것이 당시 나의 새로운 프로그래밍 블로그의 첫 번째 블로그 게시물의 자료가 될 것이라고 생각했습니다.