如何在给定目录的任何现有或未来子目录中向特定用户授予读/写权限?

Sam*_*lle 8 permissions git

我在 VPS 上托管我自己的 git 存储库。假设我的用户是约翰。

我使用 ssh 协议来访问我的 git 存储库,所以我的 url 类似于ssh://john@myserver.com/path/to/git/myrepo/.

Root 是所有内容的所有者 /path/to/git

我正在尝试授予 john 对所有内容的读/写访问权限 /path/to/git/myrepo

我都试过chmod,并setfacl控制访问,但都失败了同样的方式:他们递归应用的权利(与正确的选项),以所有当前存在的子目录/path/to/git/myrepo,但只要创建一个新的目录,我的用户不能写在新目录中。

我知道 git 中有一些钩子可以让我在每次提交后重新申请权限,但我开始认为我走错了路,因为这对于一个非常基本的目的来说似乎太复杂了。

:我应该如何设置我的权利,让 john 访问 john 下的任何东西,/path/to/git/myrepo并使其适应树结构变化?

Q2:如果我应该退后一步更改一般方法,请告诉我。

编辑:问题已按原样回答,但这是错误的问题。正确的问题应该是“如何在服务器上配置裸 git 存储库以用于 ssh 访问?”。看我自己的回答。

Ser*_*rge 6

myrepousers例如,创建一个组,并将您的 git 用户添加到该组。

然后将 /path/to/git/myrepo 下的所有内容组更改为 myrepositers:

chown -R .myrepousers /path/to/git/myrepo
Run Code Online (Sandbox Code Playgroud)

然后修复权限:

chmod -R g+w /path/to/git/myrepo
find /path/to/git/myrepo -type d -exec chmod g+s {} \;
Run Code Online (Sandbox Code Playgroud)

应该都设置好了。

  • 如果你想了解塞缪尔这里发生了什么,谷歌搜索“setgid”。这里的魔法在于`g+s`。当然,您也必须首先了解 `chmod` 的基础知识。 (2认同)

Sam*_*lle 5

其实那是错误的做法。经过额外的研究,我发现在我的情况下,我必须使用 git 的内置功能来处理存储库中的文件系统。

它基本上是通过shared选项完成的git init,它可以具有(除其他外)以下值:

  • group: 初始化存储库,以便文件和目录具有用户和组写入权限,而其他所有人都具有读取权限
  • 0660: 相同,但其他人没有读取权限。

新创建的目录和文件自动拥有正确的权限。您还可以使用git init现有存储库重新配置它而不会丢失其内容。

所以最后我必须做的是:

  • 创建一个组 mygitrepo
  • 将用户添加到它
  • chmod -R git 仓库到 root:mygitrepo

现在该组的每个用户都可以拉/推,其他人都不能,而且不会影响文件系统权限。

git init --bare --shared=0660
Run Code Online (Sandbox Code Playgroud)

http://www.kernel.org/pub/software/scm/git/docs/git-init.html了解更多信息。