我的操作環境是:
- Ubuntu 12.04
- Git version 1.7.9.5
- Perl 5.14
準備步驟
- 伺服器上須先預備好以下套件
- Git 1.6.6 以上
- Perl 5.8.8 以上
- OpenSSH
- 產生管理者的 ssh key (此 key 將專門提供給 gitolite 管理者使用)
舉例:$ ssh-keygen -t rsa -f <key_filename>
會產生$ ssh-keygen -t rsa -f ~/admin
~/admin
跟~/admin.pub
兩個檔案,分別是 private key 與 public key。
此時會提示輸入 passphrase。passphrase 是用來加密 private key 的密碼,避免 private key 被竊時造成的安全性風險。每次 push/pull 的時候需要輸入 passphrase,可以配合 ssh-add (Linux) 或 Pageant (Windows) 來避免每次都要打 passphrase。
這邊注意所使用的<key_filename>
就是 gitolite 管理者 (非主機管理者也非 git 帳號管理者) 所使用的虛擬帳號。 - 建立 git 專用帳號 (我使用
git
而非有些人慣用的gitolite
)
必須給予 git 帳號一個可以執行 command 的 shell,但可放心所有 gitolite user 都只是虛擬帳號,他們會被導向到 gitolite-shell 這個 gitolite 提供的指令去,無法真的登入。# adduser --system git --shell "/bin/bash"
以下未特別註明的,皆會使用 git 帳號作為 $ 的擁有者。
安裝步驟 (未註明 #
的皆使用 git 帳號)
- 取得
gitolite
套件
$ git clone git://github.com/sitaramc/gitolite.git
- 安裝 gitolite 於家目錄下 (其實只是做個 soft link 過去)
記得把 $HOME/bin 加入 $PATH 中。$ mkdir -p ~/bin $ gitolite/install -ln
或是也可以用複製的方式安裝到其他系統目錄下 (以 /usr/share/gitolite 為例)
# mkdir -p /usr/share/gitolite # gitolite/install -to /usr/share/gitolite
- 設置 gitolite
這表示 admin.pub 這把公鑰所對應的私鑰擁有者就是 gitolite 的管理者,同時管理者的虛擬帳號即為 admin。 另外,如果$ gitolite setup -pk admin.pub # 這裡的 admin.pub 就是之前產生的管理者公鑰
~/.ssh
底下的 authorized_keys 已經有相同的 public key 的話,會出現 FATAL error:「admin.pub maps to shell access, not admin.」由於 gitolite 透過使用的 key 來決定使用者是不是管理者,故不可以使用本來已可連線取得 shell 的 key。
安全性
- 實際使用 gitolite 後,會發現
~git/.ssh/authorized_keys
這個檔案被加入一些東西,像是這樣
前面加上的那個稱為 ssh forced command,可以限制 user 登入後執行的 command。也就是說,gitolite 在使用時,並沒有啟動 daemon,而是透過 ssh 連線,並轉介到 gl-auth-command 進行動作的。# gitolite start command="/usr/share/gitolite/./gl-auth-command admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa <很長一串 public key> <description> command="/usr/share/gitolite/./gl-auth-command someone",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa <很長一串 public key> <description> # gitolite end
- gitolite 在運作時,使用的都是 git 這個帳號 (以我的例子而言),如果對安全性有很高的要求,可以盡量限縮這個帳號的權限。不過還是得給他一個 shell 使用就是了,我試過將 shell 改成
/bin/false
或/usr/sbin/nologin
,結果操作就失敗了orz - 預設狀況下,透過
gl-setup
產生的 repository 與其他相關檔案,權限都是 700。也就是說,即使主機上有其他的使用者,如果他沒有管理者權限 (或是sudo
權限) 的話,也無法存取到那些受 gitolite 管轄的 repository。 - 管理者在進行設定時,最好確認使用者提供的 key 是否正確,可透過
來獲得 public key 的 fingerprint,並以其他管道與使用者對照確認,避免惡意攻擊。$ ssh-keygen -lf <pubkey_file>
我把PATH=$PATH:$HOME/bin已經打上去了
回覆刪除可是使用使用 git 帳號 輸入gitolite/install -to /usr/share/gitolite 他還是顯示以下錯誤
[email protected]:~$ gitolite/install -to /usr/share/gitolite
bash: gitolite/install: 沒有此一檔案或目錄
[email protected]:~$
我想請問這是為什麼??
有先 clone 回來嗎?照理來說 clone 回來後會有 gitolite 這個目錄,裡面有 install 這個檔案。
刪除呵呵~~我昨天發現了這個問題了~~
回覆刪除所以我使用你的文章"Gitolite 2.2 安裝筆記"的方法
已經解決我的問題
現在我正在使用你"Gitolite 設定與管理"的文章
也輸了下列的指令
gitol[email protected]:~/gitolite-admin$ cp /var/tmp/fox.pub keydir/
g[email protected]:~/gitolite-admin$ git add keydir/fox.pub
[email protected]:~/gitolite-admin$ git commit -m 'add user fox'
不過當我的USER輸入
$ git clone [email protected]:testproj.git
他還是提示我要輸入密碼,並且我輸入了之後,密碼是無效的
所以我試了設定 ssh host foxr,而產生了.ssh目錄和config文件
host gitolite
user gitolite
hostname 192.168.11.241
port 22
identityfile ~/.ssh/fox
不過使用者還是沒辦法連過去,不知道是我哪裡還沒做到嗎??