在 Windows 8 中使用 Cygwin,chmod 600 无法按预期工作?

在 Windows 8 中使用 Cygwin,chmod 600 无法按预期工作?

key.pem我正在尝试更改密钥文件的权限赛格威1.7.11. 它具有权限标志:-rw-rw----

chmod -c 600 key.pem

报告:

‘key.pem’ 的模式从 0660 (rw-rw----) 更改为 0600 (rw-------)

然而:

ls -l key.pem 

仍有报道

key.pem 的权限标志仍然是:-rw-rw----

我之所以询问是因为 ssh 在抱怨:

‘key.pem’ 的权限 0660 过于开放。

当我尝试通过 ssh 进入我的 Amazon EC2 实例时。 这是 Cygwin 和 Windows 8 NTFS 的问题吗,还是我遗漏了什么?

答案1

我在 Win8CP 中使用 Cygwin,也遇到了同样的问题。这肯定是 Cygwin 的一个错误,但有一个解决方法:尝试运行:

 chgrp -R Users ~/.ssh

更长的解释是,由于某种原因,Cygwin 的/etc/passwd/etc/group生成将用户的默认/主组设置为None。并且您无法更改的权限None,因此chmod组的权限无效。

我没有尝试自己修复passwd/group文件,但我确实做了chgrp -R Users ~/.ssh(或者,如果您使用的是 Windows 8 预发布版,则使用组名HomeUsers)。之后,您可以执行chmod 0600,它会按预期工作。

在其他类似情况下,也可以这样做。它甚至可以按预期工作,因为 Cygwinchgrp将用户作为UsersUsers次要的组(而不是基本的,这才是正确的行为)。

答案2

从 Cygwin 1.7.34 (2015-02-04) 开始,将组更改为 的方法Users不再有效。相反,您需要使用 Cygwin 的setfacl实用程序。

  • 假设您想设置文件模式来644 (rw-r--r--)执行以下操作:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • 或者使用更长的格式:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • getfacl或者使用从文件复制其模式foobar

    getfacl foo | setfacl -f - bar
    

完整手册位于Cygwin 用户指南的“setfacl”部分。我很奇怪为什么 Cygwin 还没有改变chmod其实用性。

答案3

这是一个使用 Luke Lee 的建议但支持八进制参数(如 chmod)的脚本。它提供了一个可扩展的框架。尽管它目前仅支持修复 key.pem 和/或 ~/.ssh 目录和文件的权限所需的八进制参数。

#!/bin/bash

# convert chmod octal permission args to equivalent setfacl args
ARGS=() ; FILES=()
while [ $# -gt 0 ]; do
  A=$1 ; shift
  case "$A" in
  600|0600) ARGS+=("u::rw-,g::---,o::---") ;;
  640|0640) ARGS+=("u::rw-,g::r--,o::---") ;;
  644|0644) ARGS+=("u::rw-,g::r--,o::r--") ;;
  700|0700) ARGS+=("u::rwx,g::---,o::---") ;;
  *) if [ -e "$A" ]; then FILES+=( "$A" ) ; else
    echo "unrecognized arg [$A]" 1>&2
    exit 1
  fi
  ;;
  esac
done
for F in "${FILES[@]}" ; do
  setfacl -s "${ARGS[@]}" "$F"
done

我这样使用它来修复我的.ssh 目录和文件:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub

答案4

如果你有git bash安装后使用 git bash 运行相同的命令(chmod -c 600 key.pem)并避免赛格威

相关内容