在 win7 上,cygwin 和 git bash 对文件或文件夹的权限有不同的看法

On win7, cygwin and git bash have different ideas about a file or folder's permission

在Cygwin中,我设置了一个文件夹的权限"tmp"

$ chmod 600 tmp

$ ls -ld tmp
drw-------+ 1 leecy Users 0 Aug 15 10:56 tmp

但是Git Bash (from Git for Windows) 有不同的想法 权限:

$ ls -ld ~/tmp
drwxr-xr-x 1 leecy 1049089 0 Aug 15 10:56 /c/cygwin64/home/leecy/tmp/

我已经研究、阅读并尝试了以下帖子中的建议(chgrpchown :Userssetfacl 等),但仍然找不到解决方案:

顺便说一句,这个问题相信是我git clone操作的原因 (使用 SSH)最近停止工作。在上面我是 用测试文件夹 tmp 演示问题,但在现实生活中 该文件夹实际上是我的 .ssh 和我的 git clone 最近开始的 失败并出现以下错误:

$ git clone ...
Cloning into 'foo'...
Bad owner or permissions on /home/leecy/.ssh/config
fatal: Could not read from remote repository.

最近可能有一些与 Windows 域相关的更改 设置(由公司 IT 人员完成)与此相关 问题 -- 更改后问题开始浮出水面。

版本:

Cygwin: 2.8.2(0.313/5/3)
Git Bash: git version 2.14.1.windows.1

更新

感谢 Doug Henderson 的建议(见评论)。
我尝试使用命令 setfacl -b -k,它确实删除了 额外的非标准 POSIX 权限,但它没有 解决问题。

使用前setfacl -b -k

$ getfacl tmp
# file: tmp
# owner: leecy
# group: Users
user::rw-
group::---
other:---
default:user::rwx
default:group::r-x
default:other:r-x

使用后setfacl -b -k

leecy@USLEECY-C1 ~
$ setfacl -b -k tmp

leecy@USLEECY-C1 ~
$ getfacl tmp
# file: tmp
# owner: leecy
# group: Users
user::rw-
group::---
other:---

但这并没有帮助

cygwin:

$ ls -ld tmp
drw------- 1 leecy Users 0 Aug 15 10:56 tmp

Git Bash:

$ ls -ld tmp
drwxr-xr-x 1 leecy 1049089 0 Aug 15 10:56 tmp/

更新 2

使用 getfacl 我仔细检查了文件所在的组,并且 确实cygwingit bash有两个不同的想法

Cygwin

$ getfacl tmp
# file: tmp
# owner: leecy
# group: Users
user::rw-
group::---
other:---

GitBash

$ getfacl tmp
# file: tmp
# owner: leecy
# group: 1049089 <unknown>
user::rwx
group::r-x
other:r-x

数字1049089在我的系统中可能意味着Domain Users,但是 这个数字似乎被 cygwin 而不是 git bash 理解。 我说是因为我的cygwin /etc/group 有这样一行 (这个文件原来没有,我用命令创建的 mkgroup -l -d > /etc/group 在此 post)

中建议
Domain Users:S-1-5-21-1593251271-2640304127-1825641215-513:1049089:

我还尝试了命令 chgrpchown。两者都运行没有错误, 但未生效(数字 545Users 的组 ID cygwin(但 git bash)理解)

chgrp

无效果
$ getfacl tmp
# file: tmp
# owner: leecy
# group: 1049089 <unknown>
user::rwx
group::r-x
other:r-x

$ chgrp 545 tmp

$ ls -ld tmp
drwxr-xr-x 1 leecy 1049089 0 Aug 15 10:56 tmp/

$ getfacl tmp
# file: tmp
# owner: leecy
# group: 1049089 <unknown>
user::rwx
group::r-x
other:r-x

chown

无效果
leecy@USLEECY-C1 MINGW64 ~
$ chown leecy.545 tmp

leecy@USLEECY-C1 MINGW64 ~
$ ls -ld tmp
drwxr-xr-x 1 leecy 1049089 0 Aug 15 10:56 tmp/

leecy@USLEECY-C1 MINGW64 ~
$ getfacl tmp
# file: tmp
# owner: leecy
# group: 1049089 <unknown>
user::rwx
group::r-x
other:r-x

感谢所有建议(来自 Doug Henerson 和 matzeri)。我的 最初的问题是关于许可的差异 通过 cygwingit bash,但确实是我想要实现的目标 是让我的 git 再次工作(它因

错误而失败
Bad owner or permissions on /home/leecy/.ssh/config

)

感谢 matzeri 的建议。我试用了 cygwin git 并意识到 git 的错误不是由于 我的 ~/.ssh~/.ssh/config 的组权限设置,而不是 它是 files/folder.

的所有者值

在这种情况下,所有者值应该是 leecy,并且显示 cygwingit bash 表明设置正确, 但事实并非如此。我必须 运行 以下内容 命令一次(在 cygwin 中)以正确设置值。

chown -R $USER ~/.ssh 

此更改后,我的 cygwin gitgit bash 都正常工作。

以下是我在修复前后看到的完整内容运行脚本:

修复前,cygwin表示所有者是leecy

$ ls -ld ~/.ssh
drw-------+ 1 leecy EMEA+Domain Users 0 Aug  8 22:18 /home/leecy/.ssh


$ ls -ld ~/.ssh/*
-rwxr-xr-x  1 leecy EMEA+Domain Users  135 Aug 16 13:35 /home/leecy/.ssh/agent.env
-rw-------  1 leecy EMEA+Domain Users  352 Jun  6 13:33 /home/leecy/.ssh/config
-rw-------  1 leecy EMEA+Domain Users 1766 May  8 19:32 /home/leecy/.ssh/id_rsa
-rwxr-xr-x  1 leecy EMEA+Domain Users  403 Jun  6 11:58 /home/leecy/.ssh/id_rsa.pub
-rw-r--r--  1 leecy EMEA+Domain Users 1582 Jun  6 11:50 /home/leecy/.ssh/known_hosts

(这个改变可能无关紧要,但我在测试时确实做了。)

$ chmod 600 ~/.ssh/agent.env

ssh 测试失败

$ ssh -v -p 29418 leecy@gerrit.app.foo.com
OpenSSH_7.5p1, OpenSSL 1.0.2k  26 Jan 2017
Bad owner or permissions on /home/leecy/.ssh/config

然后我运行这个命令

$ chown -R $USER ~/.ssh

表面上看,owner的价值还是一样

$ ls -ld ~/.ssh/*
-rw-------  1 leecy EMEA+Domain Users  135 Aug 16 13:35 /home/leecy/.ssh/agent.env
-rw-------  1 leecy EMEA+Domain Users  352 Jun  6 13:33 /home/leecy/.ssh/config
-rw-------  1 leecy EMEA+Domain Users 1766 May  8 19:32 /home/leecy/.ssh/id_rsa
-rwxr-xr-x  1 leecy EMEA+Domain Users  403 Jun  6 11:58 /home/leecy/.ssh/id_rsa.pub
-rw-r--r--  1 leecy EMEA+Domain Users 1582 Jun  6 11:50 /home/leecy/.ssh/known_hosts


$ ls -ld ~/.ssh
drw-------+ 1 leecy EMEA+Domain Users 0 Aug  8 22:18 /home/leecy/.ssh

但现在我的 ssh 可以用了

$ ssh -v -p 29418 leecy@gerrit.app.foo.com
(worked)