cygwin在windows8.1上的chmod无法修改权限

cygwin在windows8.1上的chmod无法修改权限

这几天安装了windows 8.1,在使用cygwin的时候发现了问题。

表现

在使用git clone一个项目时,cygwin告知 .ssh 的权限不正常:

1$ git clone git@github.com:zrong/cocos2d-x-filters.git
2Cloning into 'cocos2d-x-filters'...
3Bad owner or permissions on /home/rong/.ssh/config
4fatal: Could not read from remote repository.
5
6Please make sure you have the correct access rights

查看一下权限,是这样的:

1$ ll .ssh
2total 47K
3-rw-rw----+ 1 rong None 1.7K 2012-04-08  admin
4-rw-rw----+ 1 rong None  398 2012-04-08  admin.pub
5-rw-rw----+ 1 rong None  725 09-13 22:03 config
6-rw-rw----+ 1 rong None 1.7K 03-02 16:58 id_rsa
7-rw-rw----+ 1 rong None  402 03-02 16:58 id_rsa.pub
8-rw-rw----+ 1 rong None  13K 10-06 21:20 known_hosts

使用 chomd 600 * ,发现无效,权限依然是和上面一样。

解决

要解决这个问题,可以先为 .ssh 文件夹给予一个有效的Group。例如:

1chgrp Users .ssh

然后再次执行 chmod 600 -R ~/.ssh 就搞定了。

我猜这是因为 Windows 8 的权限控制发生了变化。在 Windows 7 中,可以使用 None 作为用户组,而在 Windows 8 中就必须指定一个存在的用户组。

进一步解决

上面的方案解决了 .ssh 的权限问题,目前 git clone 正常了。但是,当我在 cygwin 下新建一个文件的时候,它的属组依然是 None 。

可以通过修改 /etc/passwd 文件来解决这个问题:

  1. /etc/group 中找到 Users 用户对应的id,我的是 545;
  2. /etc/passwd 中找到 rong 用户条目,将它的属组id改为刚才找到的id;
  3. 重启 cygwin,搞定。

参考文章