为什么我不能在Windows 8 CP上的Cygwin中使用chmod命令?

36

我无法在Windows 8上的Cygwin中更改组权限,因此不能使用ssh密钥连接到服务器。

Bash提示警告:"'/home/KeepZero/.ssh/id_rsa'的权限为0660过于开放。 您的私钥文件不应该被其他人访问。"

KeepZero@t400win8 ~
$ ls
test

KeepZero@t400win8 ~
$ ls -l
total 0
-rwxrwx--- 1 KeepZero KeepZero 0 Mar  4 15:07 test

KeepZero@t400win8 ~
$ chmod 700 test

KeepZero@t400win8 ~
$ ls -l test
-rwxrwx--- 1 KeepZero KeepZero 0 Mar  4 15:07 test

KeepZero@t400win8 ~
$ chmod 777 test

KeepZero@t400win8 ~
$ ls -l test
-rwxrwxrwx 1 KeepZero KeepZero 0 Mar  4 15:07 test

可以运行。你在使用什么样的文件系统? - ak2
啊,我忘了它是在Windows 8上,所以请忽略我的评论。我认为最好将此报告给Cygwin邮件列表。 - ak2
5个回答

70

运行ls -al命令,您会发现您的文件不属于任何组(none)。

只需对您的文件运行chgrp Users *命令,就可以恢复正常了。


3
是的,记得在操作后执行“chmod 600 <file>”。 - Peter Theill
我刚在 Google 搜索中找到了这个。这对于在 Cygwin 之外创建文件有什么影响?例如,如果我运行 chgrp Users * ~ 然后想通过资源管理器中的记事本打开一个文件进行编辑,这是否仍然正常工作?如果是这样,有没有文档说明他们为什么一开始不使用此默认设置? - Milo Gertjejansen
1
这个答案并没有解决最初的问题,每次创建新文件都会出现这个bug。第二个答案解决了这个问题。 - orion78fr
顺便提一下,您可能需要在命令中翻译“Users”。例如,我的法语Windows期望“chgrp Utilisateurs *”。 - philippe_b
群组列表可在/etc/group中找到。选择其中一个。 - david

48

Roi Danton 的解决方案 可以解决问题,但它并没有解决根本原因,任何您想更改权限的用户创建文件都会再次出现此问题。

要永久解决这个问题:

  1. /etc/group中查找“Users”组的组ID(或者您所在区域的等效组名)。

    在我的安装中,这是545(可能因人而异)。 cat /etc/group|egrep '^Users:' 将获得正确的行。行的第三个字段是组ID。 (使用cat /etc/group|egrep '^Users:'|cut -f3 -d':'仅获取ID)。

  2. 编辑您的/etc/passwd文件。查找您的用户记录。第四个字段是用户的“主要组”。它错误地设置为不存在的组。将该数字更改为步骤1中找到的数字。保存etc密码文件。

  3. 关闭所有打开的Cygwin窗口/终端,然后打开一个新的窗口。创建一个新文件。它应该有一个“Users”组,并且您应该能够按需更改其权限。


4
这个答案应该被接受,因为它解决了最初的问题而不是只是作出小修补。请注意,用户机器语言决定了组的名称。在我的情况下,它是“Utilisateurs”(用法语)。 - orion78fr
2
$ cat /etc/group | egrep '^Usuarios:' | cut -f3 -d':' 适用于西班牙用户。 - JorgeGT
这个解决方案是我找到的第一个允许我 chown -R myuser:myuser /usr/share/zsh 的方法。 - zzapper

1
我在Windows Server 2012 R2上遇到了同样的问题。尝试更改文件所有者、组或权限后,它仍然显示原始值并忽略我的设置。
阅读了文件权限后,我发现挂载点设置了 noacl 选项:

文件权限

在NTFS上,如果未为挂载点指定noacl挂载选项,则Cygwin将文件权限设置为POSIX系统上的权限。

$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,noacl)
C:/cygwin/lib on /usr/lib type ntfs (binary,noacl)
C:/cygwin on / type ntfs (binary,noacl)
C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,noacl,auto)

因此,我从/etc/fstab的挂载点中删除了noacl选项,并关闭了所有Cygwin窗口。重新打开控制台后,使用chown、chgrp和chmod进行的权限设置按预期工作。


我在mount的输出中看到了noacl,但在/etc/fstab中没有看到。你能否请展示一下你现在在/etc/fstab中有什么? - Wildcard

1
这个问题的可能原因是你复制了 .ssh 文件夹到实际电脑上...请创建自己的文件夹,然后获取正确的用户组。不要复制文件夹...它们分配给与用户组不匹配的用户组。

0

我在Windows 10上的Cygwin命令提示符中遇到了同样的问题。

对于 id 文件,只有 root 用户应该具有完全权限,而对于其他用户,受限制或无权限应该是可以的。

下面的命令解决了这个问题:

 chmod 700 <id-file>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接