当我 clone/pull git 项目文件获得 -rw-r--r-- 权限时。如何避免 git 项目中计算机上的每个人只读访问 r--?
When I clone/pull git project files get -rw-r--r-- permission. How to avoid read-only access r-- to everyone on the machine in git projects?
我查看了克隆的 git 项目,发现文件具有 -rw-r--r--
权限。这意味着系统上的任何用户都可以读取项目文件。当然,这取决于文件夹权限,但在某些系统上 nobody
并且所有其他用户都可以读取项目。
如果有解决此问题的任何建议?为什么会这样?
例如这个有效:
sudo -u nobody cat /projects/project1/file1
它没有损坏,这里没有什么可以修复的:这就是权限在 Unix/Linux 系统上的工作方式。
程序,包括 Git,通常会创建模式为 0666
(rw-rw-rw-
) 的新文件,除非它们是可执行的;如果它们 是 意味着是可执行的,它们将创建模式为 0777
(rwxrwxrwx
) 的新文件。对于目录,进程必须可执行才能 chdir
进入它们或以其他方式在其中操作,程序调用 mkdir
系统调用,权限为 0777
(rwxrwxrwx
).
实际上不会使用这些权限创建文件除非当前进程将其umask
设置为0
。 umask per-process 并以与当前工作目录相同的方式继承,是操作系统在实际创建新文件或目录。典型设置中典型用户的默认 umask 是 022
:这会带走 ----w--w-
权限,因此新创建的目录最终具有模式 0755
(rwxr-xr-x
) 和新创建的 non-executable 个文件的模式为 0644
(rw-r--r--
).
将 umask 设置为 077
会带走 ---rwxrwx
,这样新创建的目录的模式为 0700
或 rwx------
并且新创建的 non-executable 文件具有模式 0600
或 rw-------
。新创建的可执行文件具有模式 0700
或 rwx------
,因为要求创建它们的进程提供了 0777
作为模式,并且 0777
被 ~077
屏蔽是 0700
.
Git 在 Unix 和 Unix-like 系统上使用这些相同的约定。这不是 Git 的事情,而是 OS 的事情。请注意,这个简单的 easily-understood 方案不适用于访问控制列表 (ACL) 等复杂的事物。有人以此论证复杂的东西不应该存在(和there is something to that argument)。首先,“其他”访问文件的想法也许应该被删除,因为“组”——如果可以根据需要任意创建组——将涵盖此类用途。
我查看了克隆的 git 项目,发现文件具有 -rw-r--r--
权限。这意味着系统上的任何用户都可以读取项目文件。当然,这取决于文件夹权限,但在某些系统上 nobody
并且所有其他用户都可以读取项目。
如果有解决此问题的任何建议?为什么会这样?
例如这个有效:
sudo -u nobody cat /projects/project1/file1
它没有损坏,这里没有什么可以修复的:这就是权限在 Unix/Linux 系统上的工作方式。
程序,包括 Git,通常会创建模式为 0666
(rw-rw-rw-
) 的新文件,除非它们是可执行的;如果它们 是 意味着是可执行的,它们将创建模式为 0777
(rwxrwxrwx
) 的新文件。对于目录,进程必须可执行才能 chdir
进入它们或以其他方式在其中操作,程序调用 mkdir
系统调用,权限为 0777
(rwxrwxrwx
).
实际上不会使用这些权限创建文件除非当前进程将其umask
设置为0
。 umask per-process 并以与当前工作目录相同的方式继承,是操作系统在实际创建新文件或目录。典型设置中典型用户的默认 umask 是 022
:这会带走 ----w--w-
权限,因此新创建的目录最终具有模式 0755
(rwxr-xr-x
) 和新创建的 non-executable 个文件的模式为 0644
(rw-r--r--
).
将 umask 设置为 077
会带走 ---rwxrwx
,这样新创建的目录的模式为 0700
或 rwx------
并且新创建的 non-executable 文件具有模式 0600
或 rw-------
。新创建的可执行文件具有模式 0700
或 rwx------
,因为要求创建它们的进程提供了 0777
作为模式,并且 0777
被 ~077
屏蔽是 0700
.
Git 在 Unix 和 Unix-like 系统上使用这些相同的约定。这不是 Git 的事情,而是 OS 的事情。请注意,这个简单的 easily-understood 方案不适用于访问控制列表 (ACL) 等复杂的事物。有人以此论证复杂的东西不应该存在(和there is something to that argument)。首先,“其他”访问文件的想法也许应该被删除,因为“组”——如果可以根据需要任意创建组——将涵盖此类用途。