再談git的http服務-權限控制hooks版


  通過git-http-backend方法提供的http服務基本上可以做到認證用戶才能使用,但只能控制到服務器路徑訪問,而且無法區分讀寫。經過不懈努力,找到了方法,相關腳本及配置見后。

  基本思路就是利用apache的路徑權限設置控制版本庫的讀權限;通過hooks/pre-receive鈎子來控制版本庫的寫權限,具體鈎子的原理和用戶這里不寫了。git提供了幾個全局變量可以在pre-receive鈎子里面使用,詳情可以參看git-http-backend manual page

  通過REMOTE_USER獲取執行push的用戶名,通過PATH_INFO獲取項目名稱。

  此方法的弊端就是配置比較復雜,而且需要重啟apache

  附上pre-receive:

#!/bin/sh

prj=${PATH_INFO:1}
prj=${prj%/*}"-write:"
priusr=$(cat ../git.group|grep $prj)
priusr=${priusr##*:}
for ele in $priusr
do
  if [ $ele == $REMOTE_USER ]
  then
    #echo 'user found ' $ele
    exit 0
  fi
done
echo "Access denied"
exit 1

  以及apache的git.conf相應內容:

#config for git-http-backend
SetEnv GIT_PROJECT_ROOT /git/repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /mygit/ /usr/libexec/git-core/git-http-backend/

#privilege config
<Location /mygit/test>
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /git/repositories/git.passwd
    AuthGroupFile /git/repositories/git.group
    <Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
        Require group test-read</Limit>
</Location>

   /git/repositories/git.group如下,此處的read組一定要包含write組。

test-read:bill jobs
test-write:jobs

     按照以上配置,bill,jobs都可以clone和pull項目,但只有jobs可以push


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM