當前位置:編程學習大全網 - 源碼下載 - 文件路徑超出系統限制 git能解決麽

文件路徑超出系統限制 git能解決麽

那麽在git服務器上通常會建立壹個git這樣壹個賬戶,其它人***用這個賬戶來克隆或推送數據到git倉庫中,通常也只需要這個功能,但是如果不加限制,那麽其它人可以通過這個git賬戶登錄到主機,那麽這樣是不安全的,所以需要加以限制方法如下:編輯/etc/passwd這個文件,在文件末尾可以找到類似這樣的行:git:x:1000:1000::/home/git:/bin/sh然後把/bin/sh改為/usr/bin/git-shell這樣git這個賬戶就只能用來克隆或者推送數據到git倉庫中了,而不能用它來登錄到主機。對於將用戶公鑰保存在authorized_keys文件中的做法,只能應付於只有幾個開發者的情況,如果開發者數量達到幾百人的規模時,管理起來十分痛苦,每次增加或刪除用戶時都必須登錄到服務器上去,而且還缺少必要的權限管理,因為用戶對所有在/home/git下的git項目都擁有讀寫權限。那麽可以使用gitosis這個東西,gitosis是用來管理authorized_keys文件和簡單連接限制的腳本。添加、刪除用戶或設定權限這些工作是通過管理壹個特殊的git倉庫來實現的,妳只需要在這個倉庫做好相應的設置,然後推送到服務器上,gitosis就會隨之改變策略,聽起來不錯吧。那麽首先是安裝gitosis,gitosis工作依賴某些python工具,所以需要安裝壹些必要的安裝包:$ sudo apt-get install python-setuptools接下來就是將gitosis克隆下來並安裝:$ git clone /tv42/gitosis.git $ cd gitosis $ sudo python setup.py install默認gitosis會把/home/git作為git倉庫的根目錄,如果是其它目錄,可以做壹個鏈接:$ ln -s /opt/git /home/git/repositories如果之前將/etc/passwd中git賬戶的/bin/sh改成了/usr/bin/git-shell,那麽這裏需要先改回去(這裏沒有弄明白,改回去之後不就能使用git這個賬戶登錄到主機了嗎)。接下來就是初始化gitosis了,運行gitosis-init命令(註意需要在服務器端執行gitosis-init命令):$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/這樣公鑰的擁有者就可以配置gitosis那個特殊的git倉庫了,接下來需要手動對該倉庫中的post-update腳本加上可執行權限:$ sudo chmod +x /home/git/repositories/gitosis-admin.git/hooks/post-update註:首先需要刪除服務器上的.ssh目錄(包括其中的authorized_keys這個文件),這裏為什麽要刪除.ssh這個目錄呢,因為在執行gitosis-init命令時會在/home/git目錄下創建壹個.ssh目錄,同時在.ssh目錄下創建authorized_keys文件,並且將id_rsa.pub這個密鑰寫入authorized_keys這個文件中,這樣該密鑰的擁有者就對gitosis-admin.git這個倉庫具有訪問權限,但這裏還是有點不是很明白,密鑰不是放在gitosis-admin倉庫中的keydir目錄下的嗎?gitosis-admin.git這個特殊的git倉庫已經建立好了,並且密鑰的擁有者對該倉庫具有訪問權限,那麽接下來就是將這個倉庫拉下來:$ git clone git@gitserver:repositories/gitosis-admin.git註意:這裏修改其命令為:$ git clone git@gitserver:gitosis-admin.git否則將出現如下提示錯誤:$ git clone git@gitserver:repositories/gitosis-admin.git Cloning into 'gitosis-admin'... ERROR:gitosis.serve.main:Repository read access denied fatal: The remote end hung up unexpectedly因為什麽原因呢,gitosis默認Git倉庫路徑就是/home/git/repositories,如果要新建其它倉庫,最好也放在該目錄下,否則也會提示同樣的錯誤,還有壹點需要註意的是服務器上的git倉庫最好以.git後綴名結尾,否則克隆時會以(倉庫名.git)這個名字去尋找,如果不是以.git後綴名結尾的話,就會出現找不到的情況。如果克隆成功,那麽將在本地出現gitosis-admin這個目錄,可以到這個目錄去看壹下,該目錄下主要有兩個東西gitosis.conf和keydir,gitosis.conf主要是配置用戶、倉庫和權限的配置文件,而keydir目錄中則保存的是用戶的公鑰,每個用戶都得有壹個.pub結尾的文件,例如scott.pub。而此時gitosis.conf內容如下:$ cat gitosis.conf [gitosis] [group gitosis-admin] members = scott writable = gitosis-admin表示只有scott這個用戶能管理gitosis-admin這個項目。那麽之後呢,我們需要添加壹個git項目iphone_project,由於此時只有scott這個用戶(註意,這裏members指定的用戶名必須同".pub"前面的命名相同,例如,如果是scott.pub,那麽這裏寫上scott就可以了,通常,我們生成密鑰時會跟上機器的名字,如果妳的.pub命名帶上"@機器名"的話,那麽members這裏也要帶上@機器名,總之members指定的名字壹定要同".pub"前面命名相同),那麽iphone_project這個項目就只對他進行授權:[group mobile] members = scott writable = iphone_project修改完成之後,需要提交gitosis-conf這個文件:$ 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註意,這裏後來也測試成功了,這裏的意思是,首先需要在本地建立壹個git工程,然後在執行git remote add命令添加壹個遠程倉庫,最後執行git push命令時則在服務器上建立iphone_project.git這樣壹個裸倉庫。 如果需要將其他開發者加入進來,現在不用將用戶公鑰加入到~/.ssh/authorized_keys這個文件中了,只需要將公鑰放入keydir這個目錄中就行了:$ 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這個group中:[group mobile] members = scott john josie jessica writable = iphone_project提交這個更新之後,scott這四個用戶都對iphone_project項目具有讀寫權限。如果只讓John具有只讀權限,也可以這樣做:[group mobile] members = scott josie jessica writable = iphone_project [group mobile_ro] members = john readonly = iphone_project現在Johon可以克隆和或者代碼更新,但是不能提交代碼到倉庫中。像這樣設置權限是很方便的,gitosis甚至還可以指定某個group為壹個成員,例如:[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希望對妳有所幫助

  • 上一篇:學C語言有什麽用?壹般編程有什麽用?
  • 下一篇:為什麽有時候量比很高,而換手率很低,這兩個指標如何配合使用,判斷壹個股票的成交量
  • copyright 2024編程學習大全網