프로젝트에 대한 단일 SSH 계정을 사용하여 SSH를 통해 git 서버를 설정하고 싶습니다. 모든 프로젝트 구성원은 Authorized_keys에 나열된 SSH 키를 가지고 있어야 합니다. 잠금은 git 작업만 수행하고 전용 디렉터리 내부에서만 액세스하도록 제한해야 합니다.
그러한 설정을 만드는 가장 좋은 방법은 무엇입니까? 분명히 git 명령만 수행하여 잠금을 수행할 수 있는 git-shell이 있지만 단일 디렉토리에 대한 액세스를 제한하는 방법을 찾을 수 없습니다. 다양한 Python 및 Ruby 래퍼도 있습니다. 이 중 어느 것을 신뢰해야 합니까?
답변1
답변2
귀하의 위협 모델은 무엇입니까?
좋은 사람이 실수로 git 저장소나 기타 데이터를 파괴했습니다.사용자가 homedir, tmp 및 git 저장소에만 쓸 수 있는지 확인하세요. 커밋할 때마다 저장소를 백업하고 정기적으로 복구 절차를 연습하세요.
나쁜 사람이 다른 사람의 개인 키를 훔쳐 시스템을 소유하려고 합니다.공격 표면은 인증으로 보호되는 sshd 부분과 사용하는 쉘 인터페이스로 제한되므로 가능한 한 작게 만드십시오. Python/Ruby 래퍼에는 많은 코드가 포함되어 있으며 오류가 발생할 여지가 많습니다. git-shell을 사용하거나 sshd_config의 Match 및 ChrootDirectory 지시문을 사용하여 사용자가 액세스할 수 있는 파일 시스템 부분을 제한하는 것을 고려하세요.
나쁜 사람이 누군가의 개인 키를 훔쳐 소스 코드를 얻습니다.사용자에게 개인 키를 보호하는 방법을 가르치고 키를 빠르게 취소하기 위한 절차를 수립합니다(예: 키 취소를 위해 오전 4시에 누구에게 전화해야 하는지).
를 사용하지 말고 .ssh/authorized_keys
대신 AuthorizedKeyfile
sshd_config의 키워드를 사용하여 사용자에게 쓰기 권한이 없는 경로를 지정하세요(예: ) /etc/ssh/keys/%u
. 사용자가 .ssh/authorized_keys를 자신의 복사본으로 덮어쓰지 못하도록 하는 것은 너무 어렵습니다.
또한 감사를 허용하려면 사용자 키 파일과 sshd_config의 버전 제어를 유지하세요.