bash - 阻止 .git/index 更改其权限

标签 bash git ubuntu ansible sysadmin

我该如何预防.git/index从不断改变其权限和所有权?
我跑ls -al .git/index并看到该文件归root所有。
我用 sudo chown -R $USER:USER 更改权限和 sudo chmod -R 775 .git我什至尝试使用 rm -rf .git/index.lock 删除锁定文件
权限更新,但几分钟后它们又变回由 root 和 740 拥有,这破坏了我正在尝试的 git 命令。
我通过 Ansible 设置了全局 git 配置,所以我想知道这是否搞砸了?是否有我需要修改的全局文件?

最佳答案

当 Git 写入索引时,它这样做的方式是创建一个名为 .git/index.lock 的新文件。 (使用 O_EXCL ),根据 core.sharedRepository 调整其权限,然后将其重命名为顶部。 Git 不提供就地重写文件的方法。
如果创建此文件以使其归 root 所有,则 root 正在创建该文件,因为它正在更新索引。这可能意味着 root 拥有的某个进程正在修改工作树。
如果这不是您的意图,那么最好的办法是找到该进程并阻止它修改工作树。多个用户修改同一个工作树不是一个好主意,如果您的 root 拥有的进程正在从工作树中读取文件并与另一个用户共享,则可能导致安全漏洞。
如果您确定您正在做的事情是安全的,并且您想修改 .git 中的哪些文件的权限目录已创建,您可以使用 core.sharedRepository设置它们。例如,您可以使用值 0664 .请注意,Git 将自动处理可执行位,并且不应将索引标记为可执行。
如果您想始终对存储库使用相同的组,您可以在存储库中的所有目录上设置 setgid 位,然后将它们的组设置为适当的值。假设您还设置了 core.sharedRepository设置为使事物组可写的值,然后您可以使用该组中的任何用户修改存储库,并且事物应该可以工作。请注意,如果其中一个或多个用户不受信任或权限较低,这可能仍会产生安全隐患,因此您应该小心。

关于bash - 阻止 .git/index 更改其权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68353617/

相关文章:

mongodb - 使用 "sudo service mongod start"和 "mongod"有什么区别?

linux - Shell - 将环境变量与 ccrypt 一起使用

node.js - npm install 无法解析 git 存储库 - 证书失败

git - 致命的 : Not a git repository when installing mod_python

git - 如何显示已上演的更改?

ubuntu - docker 组成 : Encountered errors while bringing up the project

linux - Bash 脚本检查进程是否正在运行并读取用户输入以在必要时启动

linux - 为什么 read 在 bash 中抛出错误但工作正常?

python - #!/bin/sh vs #!/usr/local/bin/python 在可执行文件中

ruby - 为什么 bundler 选择了错误的 ruby​​ 版本?