<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                把所有用戶的公鑰保存在 authorized_keys 文件的做法,只能湊和一陣子,當用戶數量達到幾百人的規模時,管理起來就會十分痛苦。每次改刪用戶都必須登錄服務器不去說,這種做法還缺少必要的權限管理 — 每個人都對所有項目擁有完整的讀寫權限。 幸好我們還可以選擇應用廣泛的 Gitosis 項目。簡單地說,Gitosis 就是一套用來管理 authorized_keys 文件和實現簡單連接限制的腳本。有趣的是,用來添加用戶和設定權限的并非通過網頁程序,而只是管理一個特殊的 Git 倉庫。你只需要在這個特殊倉庫內做好相應的設定,然后推送到服務器上,Gitosis 就會隨之改變運行策略,聽起來就很酷,對吧? Gitosis 的安裝算不上傻瓜化,但也不算太難。用 Linux 服務器架設起來最簡單 — 以下例子中,我們使用裝有 Ubuntu 8.10 系統的服務器。 Gitosis 的工作依賴于某些 Python 工具,所以首先要安裝 Python 的 setuptools 包,在 Ubuntu 上稱為 python-setuptools: `$ apt-get install python-setuptools` 接下來,從 Gitosis 項目主頁克隆并安裝: ~~~ $ git clone https://github.com/tv42/gitosis.git $ cd gitosis $ sudo python setup.py install ~~~ 這會安裝幾個供 Gitosis 使用的工具。默認 Gitosis 會把 `/home/git` 作為存儲所有 Git 倉庫的根目錄,這沒什么不好,不過我們之前已經把項目倉庫都放在 `/opt/git` 里面了,所以為方便起見,我們可以做一個符號連接,直接劃轉過去,而不必重新配置: `$ ln -s /opt/git /home/git/repositories` Gitosis 將會幫我們管理用戶公鑰,所以先把當前控制文件改名備份,以便稍后重新添加,準備好讓 Gitosis 自動管理 authorized_keys 文件: `$ mv /home/git/.ssh/authorized_keys /home/git/.ssh/ak.bak` 接下來,如果之前把 git 用戶的登錄 shell 改為 `git-shell` 命令的話,先恢復 'git' 用戶的登錄 shell。改過之后,大家仍然無法通過該帳號登錄(譯注:因為 authorized_keys 文件已經沒有了。),不過不用擔心,這會交給 Gitosis 來實現。所以現在先打開 /etc/passwd 文件,把這行: `git:x:1000:1000::/home/git:/usr/bin/git-shell` 改回: `git:x:1000:1000::/home/git:/bin/sh` 好了,現在可以初始化 Gitosis 了。你可以用自己的公鑰執行 `gitosis-init` 命令,要是公鑰不在服務器上,先臨時復制一份: ~~~ $ sudo -H -u git gitosis-init < /tmp/id_dsa.pub Initialized empty Git repository in /opt/git/gitosis-admin.git/ Reinitialized existing Git repository in /opt/git/gitosis-admin.git/ ~~~ 這樣該公鑰的擁有者就能修改用于配置 Gitosis 的那個特殊 Git 倉庫了。接下來,需要手工對該倉庫中的 post-update 腳本加上可執行權限: ~~~ $ sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update ~~~ 基本上就算是好了。如果設定過程沒出什么差錯,現在可以試一下用初始化 Gitosis 的公鑰的擁有者身份 SSH 登錄服務器,應該會看到類似下面這樣: ~~~ $ ssh git@gitserver PTY allocation request failed on channel 0 ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment. Connection to gitserver closed. ~~~ 說明 Gitosis 認出了該用戶的身份,但由于沒有運行任何 Git 命令,所以它切斷了連接。那么,現在運行一個實際的 Git 命令 — 克隆 Gitosis 的控制倉庫: 在你本地計算機上 ~~~ $ git clone git@gitserver:gitosis-admin.git ~~~ 這會得到一個名為 `gitosis-admin` 的工作目錄,主要由兩部分組成: ~~~ $ cd gitosis-admin $ find . ./gitosis.conf ./keydir ./keydir/scott.pub ~~~ `gitosis.conf` 文件是用來設置用戶、倉庫和權限的控制文件。keydir 目錄則是保存所有具有訪問權限用戶公鑰的地方— 每人一個。在 keydir 里的文件名(比如上面的 scott.pub)應該跟你的不一樣 — Gitosis 會自動從使用 `gitosis-init` 腳本導入的公鑰尾部的描述中獲取該名字。 看一下 `gitosis.conf` 文件的內容,它應該只包含與剛剛克隆的 gitosis-admin 相關的信息: ~~~ $ cat gitosis.conf [gitosis] [group gitosis-admin] members = scott writable = gitosis-admin ~~~ 它顯示用戶 scott — 初始化 Gitosis 公鑰的擁有者 — 是唯一能管理 gitosis-admin 項目的人。 現在我們來添加一個新項目。為此我們要建立一個名為 mobile 的新段落,在其中羅列手機開發團隊的開發者,以及他們擁有寫權限的項目。由于 'scott' 是系統中的唯一用戶,我們把他設為唯一用戶,并允許他讀寫名為 iphone_project 的新項目: ~~~ [group mobile] members = scott writable = iphone_project ~~~ 修改完之后,提交 gitosis-admin 里的改動,并推送到服務器使其生效: ~~~ $ git commit -am 'add iphone_project and mobile group' [master 8962da8] add iphone_project and mobile group 1 file changed, 4 insertions(+) $ git push origin master Counting objects: 5, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitserver:gitosis-admin.git fb27aec..8962da8 master -> master ~~~ 在新工程 iphone_project 里首次推送數據到服務器前,得先設定該服務器地址為遠程倉庫。但你不用事先到服務器上手工創建該項目的裸倉庫— Gitosis 會在第一次遇到推送時自動創建: ~~~ $ git remote add origin git@gitserver:iphone_project.git $ git push origin master Initialized empty Git repository in /opt/git/iphone_project.git/ Counting objects: 3, done. Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitserver:iphone_project.git * [new branch] master -> master ~~~ 請注意,這里不用指明完整路徑(實際上,如果加上反而沒用),只需要一個冒號加項目名字即可 — Gitosis 會自動幫你映射到實際位置。 要和朋友們在一個項目上協同工作,就得重新添加他們的公鑰。不過這次不用在服務器上一個一個手工添加到 `~/.ssh/authorized_keys` 文件末端,而只需管理 keydir 目錄中的公鑰文件。文件的命名將決定在 `gitosis.conf` 中對用戶的標識。現在我們為 John,Josie 和 Jessica 添加公鑰: ~~~ $ cp /tmp/id_rsa.john.pub keydir/john.pub $ cp /tmp/id_rsa.josie.pub keydir/josie.pub $ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub ~~~ 然后把他們都加進 'mobile' 團隊,讓他們對 iphone_project 具有讀寫權限: ~~~ [group mobile] members = scott john josie jessica writable = iphone_project ~~~ 如果你提交并推送這個修改,四個用戶將同時具有該項目的讀寫權限。 Gitosis 也具有簡單的訪問控制功能。如果想讓 John 只有讀權限,可以這樣做: ~~~ [group mobile] members = scott josie jessica writable = iphone_project [group mobile_ro] members = john readonly = iphone_project ~~~ 現在 John 可以克隆和獲取更新,但 Gitosis 不會允許他向項目推送任何內容。像這樣的組可以隨意創建,多少不限,每個都可以包含若干不同的用戶和項目。甚至還可以指定某個組為成員之一(在組名前加上 @ 前綴),自動繼承該組的成員: ~~~ [group mobile_committers] members = scott josie jessica [group mobile] members = @mobile_committers writable = iphone_project [group mobile_2] members = @mobile_committers john writable = another_iphone_project ~~~ 如果遇到意外問題,試試看把 `loglevel=DEBUG` 加到 `[gitosis]` 的段落(譯注:把日志設置為調試級別,記錄更詳細的運行信息。)。如果一不小心搞錯了配置,失去了推送權限,也可以手工修改服務器上的 `/home/git/.gitosis.conf` 文件` — Gitosis `實際是從該文件讀取信息的。它在得到推送數據時,會把新的` gitosis.conf` 存到該路徑上。所以如果你手工編輯該文件的話,它會一直保持到下次向 `gitosis-admin `推送新版本的配置內容為止。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看