2011-10-07 65 views
1

我們所有的開發人員都可以通過ssh登錄到我們的登臺服務器。如何使用sudoers運行mercurial命令

當他們在登臺服務器上運行任何hg命令時,它使它們成爲更新/新文件的所有者。我需要這些文件歸用戶/組www-data所有。

我試圖在sudoers文件編輯本

Cmnd_Alias WWW_DATA_CMDS = /usr/bin/svn, /usr/bin/hg 

%developers ALL=(www-data) NOPASSWD: WWW_DATA_CMDS 

正如你可以看到我們有SVN服務器上,以及(我們從SVN移開,以HG),這設置工作正常SVN,如果我們運行SVN命令創建文件爲www-data

如何獲得與Mercurial相同的工作?

回答

2

首先明白這裏沒有什麼魔法。 Mercurial始終以創建文件的方式創建文件,結尾是故事。它不會嘗試(甚至沒有權限)去做任何事情。

這意味着如果您只通過sudo運行hg,並且現有文件的權限是正確的,它將會按照您的要求進行操作。

但這也意味着如果用戶沒有使用sudo運行hg,並且他們擁有正確的權限,他們將會弄得一團糟。 Mercurial滿足於讓你做任何允許的Unix權限模式。

有三種方法來處理這個:

  • 巴掌節用尺子直到人們使用sudo一貫
  • 使用像水銀服務器的包裝,漏斗所有用戶到一個帳戶
  • 正確配置組,umask,所有權和權限,以便能夠實際共享

最後一個工作如下:

  • 確保每個用戶X有一個匹配的默認組X(最現代化的系統已經做到這一點)
  • 添加everyone(和wwwdata)到第二組項目 - 富
  • 確保每個人的umask設置在登錄非屏蔽組讀取/寫入(umask 007,不是077)
  • 將項目中的所有文件設置爲組項目foo(chgrp -R project-foo foo /)
  • 使所有文件讀/寫該組(chmod -R g + rw foo /)
  • 使所有目錄都可以通過並且setgid(find foo/-type d | xargs chmod g + sx)

這樣可以確保用戶每次在項目中創建文件時,都會對組中的其他人讀/寫。

+0

謝謝,我會去嘗試mercurial服務器,如果這不起作用,我會做你建議在第3點的權限設置。 – evilsee