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
将用户作为Users
Users
次要的组(而不是基本的,这才是正确的行为)。
答案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
或者使用从文件复制其模式foo
到bar
: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
)并避免赛格威。