使用 HTTP 和 Linux 使用者的儲存庫授權的正確 Subversion 權限
抱歉這個“愚蠢”的問題,但我真的無法在網際網路上找到解決方案。請幫我。
我在 Linux 伺服器上使用 Subversion 來對我正在維護的網站項目的文件進行版本控制。
這是我的配置:
項目文件夾(伺服器上儲存庫的工作副本,以便使用瀏覽器訪問項目並查看網站 - Apache 將此目錄作為 DocumentRoot 指向):
/var/projects/prj
儲存庫文件夾:
/var/repo/prjrepo
當我安裝 SVN (
apt-get install subversion libapache2-svn
) 時,它既沒有創建使用者顛覆,也沒有創建組顛覆。我不明白為什麼。我在 Windows 上使用 TortoiseSVN 來簽出/更新/送出。
我使用 HTTP 連接到具有授權使用者列表的儲存庫:
http://1.2.3.4/svn/prjrepo
授權到儲存庫的使用者列表與使用者列表及其 MD5 密碼一起保存在 htpasswd 文件中。
當然 Apache 作為 www-data 執行。
prj 文件夾歸 root:root 所有,其他人只有 rx 訪問文件,除了 www-data 需要寫入的目錄(例如文件上傳)。
儲存庫文件夾歸我創建 svn:svn 的使用者和組所有,但這可能沒有用。使用者和組的權限是 rwx,其他人則沒有。此外,我對所有文件夾強制使用 g+s,這樣 svn 組將永遠是所有新文件的所有者。
問題是當我將文件送出到儲存庫時,它說由於“權限被拒絕”而失敗。我可以理解為什麼:儲存庫文件夾歸 svn:svn 所有,但是 Tortoise 在送出時會向伺服器發出 HTTP 請求。HTTP 請求作為 www-data 執行,他們當然沒有儲存庫的權限。
我還添加了一個送出後操作,以便在每次送出時更新工作副本(prj 文件夾)。如果我將儲存庫的所有者組更改為 www-data,Tortoise 可以送出,但是送出後操作當然會出錯,因為 www-data 無法寫入 prj 文件夾下的所有目錄和文件。這是正確的(www-data 不能寫入它只需要讀取的文件——它是 Apache,它是網站……)。
所以:我真的不知道如何正確配置文件夾的權限以使一切正常。請記住,www-data 不得對 prj 具有寫訪問權限,因為它只能讀取這些文件(例如,用於文件上傳的某些文件夾除外)。
另一個問題:現在 Apache 被配置為只允許那些在為此目的創建的特定 htpasswd 文件下定義的使用者訪問儲存庫(見上文)。有沒有辦法讓一些 LINUX 使用者可以訪問儲存庫,而無需為儲存庫訪問定義新使用者?那可能嗎?如何?
如果您使用 DAV 選項進行 subversion,則需要授予 Web 伺服器訪問儲存庫的權限。這可以像將儲存庫的所有文件/目錄更改為由 www-data 擁有一樣簡單。
如果您希望您的送出後操作做一些有用的事情,您可能需要考慮為它作為 www-data 執行時需要執行的特定腳本/命令設置無密碼 sudo 。所以在你的命令後腳本中你可能有類似的東西
sudo bash -c 'cd /var/projects/prj ; svn update'