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