我正在使用Cygwin并尝试使用chmod更改群组访问权限,例如
$ls -l id_rsa
-rwxrwxr-- 1 None 1679 Jun 13 10:16 id_rsa
$ chmod g= id_rsa
$ ls -l id_rsa
-rwxrwxr-- 1 None 1679 Jun 13 10:16 id_rsa
但这不起作用。我可以更改用户和其他人的权限。似乎组的权限级别与用户的权限级别保持一致?
答案 0 :(得分:34)
我遇到了类似的问题,我正在使用NTFS文件系统,因此Keith Thompson的回答并没有为我解决。
我将文件的群组所有者更改为Users
群组:
chown :Users filename
执行此操作后,我可以使用chmod
将群组权限更改为我的意愿。就我而言,由于它是OpenSSH的RSA密钥,我做了:
chmod 700 filename
它有效。在Cygwin中,默认情况下会有两个组,Root
组和Users
组。我想添加另一个组,但我无法使用我以前在Linux上使用的工具。出于这个原因,我只使用了Users
组。
答案 1 :(得分:4)
Cygwin并不喜欢他们不知道的群组所拥有的文件。 不幸的是,这种情况在Cygwin中经常发生,特别是如果您的PC处于Windows域中且事情不断变化。 我还通过外部驱动器在两台PC之间同步我的文件,并且不同PC之间的uid / gids是不同的,因此这是问题的根源。
如果您执行ls -l
并查看数字组ID而不是组名,则表示Cygwin不知道gid - 即它不在/etc/group
中,并且Cygwin也无法从Windows查询。您可以通过运行getent group <gid>
来确认这一点,其中<gid>
是数字组ID。
要解决此问题,您可以使用chgrp
更改所有受影响文件/目录的组,如上面接受的答案中所述,或者在/etc/group
中为未知gid创建条目,任何未使用的组名(例如Users2
)。
执行此操作后,可能需要关闭所有Cygwin窗口,然后重新打开它们。
答案 2 :(得分:2)
实验表明,chmod
可以正确地更改Cygwin下的群组权限。
该实验使用NTFS分区上的文件。 Cygwin在Windows之上实现了一个POSIX层,但它最终仍然使用了Windows本身的功能以及特定文件系统实现的功能。
在现代版本的Windows上,大多数硬盘驱动器都被格式化为使用NTFS,这为chmod
提供了足够的支持。但外部USB驱动器通常使用FAT32,它没有相同的能力来表示权限。 Cygwin层虽然可以伪造POSIX语义,但它只能做很多事情。
尝试
$ df -T .
如果它表明您正在使用FAT32文件系统,那可能就是问题所在。解决方案是将文件存储在NTFS文件系统上。名为id_dsa
的文件可能是SSH私钥,无论如何都需要存储在$HOME/.ssh
中。
您的主目录是否在FAT32分区上?我记得,最新版本的Windows(“最近”意味着过去10年或更长时间)能够将FAT32文件系统转换为NTFS。
此答案的其余部分是对问题的原始版本的回应,该问题在chmod
命令中有拼写错误。
Cygwin使用chmod
的GNU Coreutils版本。此,
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'的零个或多个字母,或者a 来自'ugo'集的单个字母。
答案 3 :(得分:2)
与之前的答案一样,未被识别的群体会导致此类问题。它主要发生在Windows域名中。
最简单的解决方法是重新生成/etc/passwd
和/etc/group
个文件(域用户需要参数-d
):
mkpasswd -l -d > /etc/passwd
mkgroup -l -d > /etc/group
关闭并再次启动Cygwin。
答案 4 :(得分:0)
对我来说,这是一个非常烦人的问题。在我的情况下,user135348的解决方案效果最好。 chown :Users -R
方法的最大问题是每次创建新文件时,它都会被分配给未知的gid 1049120.继续更改文件gid非常令人沮丧。
我也尝试了mkgroup
,但在我的情况下它没有用:我的gid是1049120。
基于 Mapping Windows SIDs to POSIX uid/gid values 中说明的规则:: 0x100000 offset用于来自计算机主域的帐户。 尝试从1049120中删除相同的偏移量,得到544,这是内置管理员组的RID。
此帐户不是本地Administrators组的成员;我们使用SuRun授予管理员权限而不提供凭据。在这种情况下,mkgroup无法生成所有可能的gid。
编辑组文件并添加自定义组名似乎总能轻松解决问题。
答案 5 :(得分:0)
从域远程工作并使用cygserver时遇到此问题。
正在运行ls -l
显示数字组ID而不是组名。
我停止了cygserver,net stop "CYGWIN cygserver
和其他Cygwin进程,然后再次运行ls -l
,然后正确显示组名。
我猜cygserver持有不完整的域组信息。
重启cygserver后,系统继续正常工作。
答案 6 :(得分:-1)
您必须在用户所属的Windows系统上指定组名。
所以我这样做了:
chown -R ONEX:Users ~/*
您可以在此处找到您的用户名和群组: