web-dev-qa-db-ja.com

Windows 8でCygwinを使用すると、chmod 600が期待どおりに動作しませんか?

キーファイルの権限を変更しようとしていますkey.pem in Cygwin 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が開きすぎています。

amazon EC2インスタンスにSSH接続しようとすると、 これはCygwinとWindows 8 NTFSの問題ですか、それとも何か不足していますか?

77
Castaa

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と期待どおりに動作します。

chgrpからUsersグループへのアクセスは、他の同様のケースが見つかった場合に実行できます。 CygwinはユーザーをUsersグループにsecondaryグループとして配置するため、期待どおりに機能します(正しい動作であるprimaryではなく)。

98
Jessidhia

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ユーティリティをまだ変更していないのはなぜですか。

28
Luke Lee

これは、Luke Leeの提案を使用するが、chmodのような8進数の引数をサポートするスクリプトです。拡張可能なフレームワークを提供します。現在はkey.pemや〜/ .sshディレクトリとファイルのパーミッションを修正するために必要な8進数の引数のみをサポートしていますが。

#!/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
11
philwalk
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
4
xtrimsky

git bashがインストールされている場合は、同じコマンド(chmod -c 600 key.pem)git bashを使用してCygwinを回避します。

1

この問題は、cygwinターミナルからssh-keygenコマンドを実行することで解決できます(通常のWindowsコマンドプロンプトではありません)。私は私のwindows8マシンでこれを行いました。

1
Ravindra Jain