
그게 가능할까?
요약, 저는 서버에서 puppet master를 실행하고 있으며 이상적으로는 SSH를 통한 루트 로그인을 비활성화하고 루트 액세스가 필요한 경우 sudo를 통해 모든 액세스를 강제하고 싶습니다.
그러나 매니페스트를 관리하기 위해 git repo를 사용하여 꼭두각시를 설치했습니다. 이 저장소는 현재 루트가 소유하고 있으며 현재 2개의 솔루션만 알고 있습니다.
- (덜 이상적임) 키 인증을 통해서만 루트 액세스를 허용합니다. 그렇다면 git push 명령만 허용하도록 무엇을 잠글 수 있습니까?
- /etc/puppet의 저장소를 다른 소유자로 소유하십시오. Puppet이 이것으로 안정적으로 작동합니까?
- 관련 Sudo 구성 및 명령이 이 문제를 해결할 수 있습니까?
답변1
그룹 쓰기 권한을 유지하도록 Git 저장소를 구성할 수 있습니다( --shared
저장소 생성 시 옵션). 이를 사용하면 리포지토리에 액세스해야 하는 계정을 특정 그룹에 추가하여 이들이 액세스할 수 있도록 할 수 있습니다.
나는 우리 git 서버를 위해 그렇게 합니다. 또한 각 사용자의 홈 디렉토리에 액세스 권한이 있는 각 저장소에 대한 심볼릭 링크를 넣어 모든 사람이 상대 URL로 액세스할 수 있도록 했습니다.
답변2
내 질문에 답하기 위해 Daniel이 제공한 정보를 살펴봤지만 결과가 나오지 않았습니다. git group write를 조사한 결과 발견되었습니다.http://andyregan.net/blog/archives/504
공통 그룹(꼭두각시)별로 내 저장소 그룹 소유권을 부여하고 해당 그룹에 관련 사용자를 추가한 후 다음을 실행합니다.
chmod -R g+swX /etc/puppet/
cd /etc/puppet
git repo-config core.sharedRepository true
나에게 완벽하게 작동했습니다. 루트 소유 저장소로 푸시할 수 있고, 꼭두각시는 여전히 작동하며 그렇게 하기 위해 루트 SSH 로그인을 사용하지 않습니다.
승리, 승리
업데이트
꼭두각시에서도 이 문제가 발생했지만 더 나은 방식으로 처리하기 위해 env_reset 줄 뒤에 다음을 추가하여 올바른 sudoers 구성 비트를 사용하여 이 문제를 해결했습니다.
Defaults env_keep += SSH_AUTH_SOCK
이를 통해 다음과 같은 명령을 실행할 수 있습니다.
cd /etc/puppet && sudo git pull && sudo git submodule sync && sudo git submodule update --init --recursive
즉, Rakefile(내 사용자는 이미 Sudo를 통해 nopasswd 권한을 가지고 있음)이고 모든 것이 그에 따라 작동합니다. 내가 달성한 것은 기본적으로 ssh-agent가 전달한 ssh-key를 루트 사용자에게 전달한 다음 루트 사용자(또는 내 비 루트 사용자 아래에 ssh 키를 저장하지 않고 마치 루트가 아닌 사용자로 연결된 것처럼 git pull을 수행하는 것입니다. -서버에 대한 권한 있는 계정) Win Win
답변3
내가 좋아하는 것은 다양한 커밋 전 및 커밋 후 후크를 실행하는 꼭두각시 마스터에 "스테이징" 베어 git 저장소를 두는 것입니다. 커밋 전 후크는 퍼핏 구문을 확인하고(잘못된 구문이 있는 코드는 커밋할 수 없도록) 커밋 후 후크는 실제로 코드를 /etc/puppet에 놓고 Apache를 다시 시작합니다(퍼펫 2.6의 오래된 캐싱 버그 수정).
푸시하는 스테이징 영역이 있으면 꼭두각시 코드 배포 프로세스가 더욱 원자적으로 만들어집니다. 그렇지 않으면 puppetmaster가 클라이언트에 절반만 커밋된 코드를 제공할 수도 있습니다.