chmod无法更改Cygwin上的组权限

chmod无法更改Cygwin上的组权限,cygwin,Cygwin,我正在使用Cygwin并尝试更改组访问权限,例如 但这是行不通的。我可以更改用户和其他人的权限。似乎组的权限级别在某种程度上与用户的权限级别保持一致?一项实验表明,chmod在Cygwin下确实可以正确地更改组权限 实验使用了NTFS分区上的一个文件。Cygwin在Windows上实现了一个POSIX层,但它最终仍然使用Windows本身以及特定文件系统实现的功能 在现代版本的Windows上,大多数硬盘都格式化为使用NTFS,这为chmod提供了足够的支持。但是外部USB驱动器通常使用FAT3

我正在使用Cygwin并尝试更改组访问权限,例如


但这是行不通的。我可以更改用户和其他人的权限。似乎组的权限级别在某种程度上与用户的权限级别保持一致?

一项实验表明,
chmod
在Cygwin下确实可以正确地更改组权限

实验使用了NTFS分区上的一个文件。Cygwin在Windows上实现了一个POSIX层,但它最终仍然使用Windows本身以及特定文件系统实现的功能

在现代版本的Windows上,大多数硬盘都格式化为使用NTFS,这为
chmod
提供了足够的支持。但是外部USB驱动器通常使用FAT32,它没有相同的能力来表示权限。Cygwin层尽可能伪造POSIX语义,但它只能做这么多

试一试

如果它表明您使用的是FAT32文件系统,那可能就是问题所在。解决方案是将文件存储在NTFS文件系统上。名为
id\u dsa
的文件可能是一个SSH私钥,无论如何它都需要存储在
$HOME/.SSH

您的主目录是否位于FAT32分区上?我记得,Windows的最新版本(“最近”表示过去10年或更长时间)能够将FAT32文件系统转换为NTFS


这个答案的其余部分是对问题原始版本的回应,该问题在
chmod
命令中有一个输入错误


Cygwin使用GNU Coreutils版本的
chmod
。这个,

chmod g=0 fileName
不是正确的语法。我得到:

$ chmod g=0 fileName
chmod: invalid mode: `g=0'
Try `chmod --help' for more information.
(这在Linux上,不是Cygwin,但应该是相同的。)

要关闭所有组权限,请执行以下操作:

$ chmod g= fileName
$ ls -l fileName 
-rw----r-- 1 kst kst 0 Jun 13 10:31 fileName
要查看
chmod
文档:

$ info coreutils chmod
要查看有关符号文件模式的文档,请执行以下操作:

$ info coreutils Symbolic
符号模式的格式为:

 [ugoa...][+-=]PERMS...[,...]
其中PERMS是集合“rwxXst”中的零个或多个字母,或 “ugo”集合中的单个字母


我和你有一个类似的问题,我使用的是NTFS文件系统,所以Keith Thompson的答案并没有为我解决这个问题

我将文件的组所有者更改为
Users
组:

chown :Users filename
完成后,我可以使用
chmod
将组权限更改为我的遗嘱。在我的例子中,因为它是OpenSSH的RSA密钥,所以我做到了:

chmod 700 filename

它成功了。在Cygwin中,默认情况下有两个组,
Root
组和
Users
组。我想添加另一个组,但无法使用我在Linux上使用的工具。出于这个原因,我只使用了
用户组。

Cygwin不喜欢它不知道的组拥有文件。 不幸的是,这种情况在Cygwin中经常发生,尤其是当你的电脑在Windows域中时,情况会不断变化。 我还通过外置驱动器在两台电脑之间同步文件,不同电脑之间的UID/GID不同,因此这是问题的根源

如果您看到的是
ls-l
,而不是组名,则表示Cygwin不知道gid,即它不在
/etc/group
中,Cygwin也无法从Windows查询它。您可以通过运行
getent group
来确认这一点,其中
是数字组id

要修复此问题,您可以使用
chgrp
更改所有受影响文件/目录的组,如上面接受的答案中所述,或者使用任何未使用的组名(例如
Users2
)在
/etc/group
中为未知gid创建一个条目


完成此操作后,可能需要关闭所有Cygwin窗口,然后重新打开它们。

与前面的答案一样,未识别的组会导致此类问题。它主要发生在Windows域中

最简单的修复方法是重新生成
/etc/passwd
/etc/group
文件(域用户需要参数
-d
):


关闭并再次启动Cygwin。

这对我来说是一个非常烦人的问题。就我而言,user135348的解决方案效果最好。
chown:Users-R
方法的最大问题是,每次创建新文件时,都会将其分配给未知的gid 1049120。不断更改文件gid是非常令人沮丧的

我也尝试了
mkgroup
,但在我的情况下,它不起作用:我的gid是1049120

根据::0x100000中解释的规则,偏移量用于计算机主域的帐户。 如果尝试从1049120中删除相同的偏移量,则会得到544,这是内置Administrators组的RID

此帐户不是本地管理员组的成员;我们使用SuRun授予管理员权限,而不提供凭据。在这种情况下,mkgroup未能生成所有可能的gid


编辑组文件并添加自定义组名似乎总是可以轻松解决问题。

我在从域远程工作并使用cygserver时遇到了这个问题

运行
ls-l
会显示一个数字组id,而不是组名

我停止了cygserver、
net stop“CYGWIN cygserver
和其他CYGWIN进程,然后再次运行
ls-l
,然后正确显示了组名

我猜cygserver持有不完整的域组信息


重新启动cygserver后,系统继续正常工作。

必须在Windows系统上指定用户所属的组名

所以我就这么做了:

chown-R ONEX:用户~/*

您可以在此处找到您的用户名和组:


对不起,我输入了“chmod g=”。请参见下面的示例:$ls-l id\u rsa-rwxr--1无1679 Jun 13 10:16 id\u rsa$chmod g=id\u rsa$ls-l id\u rsa-rwxr--1无1679 Jun 13 10:16 id_
chown :Users filename
chmod 700 filename
mkpasswd -l -d > /etc/passwd
mkgroup  -l -d > /etc/group