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


75

私は私のキーファイルへのアクセス権を変更しようとしているkey.pem中での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の問題ですか、それとも何か不足していますか?


これは、Win8 / Cygwinのバグのように聞こえます。Cygwinメーリングリストで報告することをお勧めします
me_and

NTFSに関連している可能性があります... Windowsは実際にはそのLinuxスキームを使用していません。たぶん、あなたは窓の許可設定に入り、自分自身に権利を与えることを試みることができます
...-sinni800

回答:


97

Win8CPでCygwinを使用していますが、同じ問題がありました。これは間違いなくCygwinのバグですが、回避策があります:実行してみてください:

 chgrp -R Users ~/.ssh

長い説明は、何らかの理由で、Cygwinのことである/etc/passwd/etc/group世代のようにユーザーのデフォルト/メイングループを入れていますNone。また、の許可を変更することはできないNoneため、chmodforグループは効果がありません。

passwd/ groupファイルを自分で修復しようとしませんでしたが、chgrp -R Users ~/.ssh(または、Windows 8プレリリースを使用している場合はグループ名を使用してHomeUsers)実行しました。その後、あなたはそれを行うことができ、chmod 0600期待通りに動作します。

グループは、あなたが見つける似た他の方の場合に行うことができます。Cygwinはユーザーを(正しい動作であるprimaryの代わりに)セカンダリグループとしてグループに入れるため、期待どおりに動作します。chgrpUsersUsers


12
chgrp -Rv Usersが必要でした〜/ .ssh / * chmod -vR 600〜/ .ssh / *
トマシュフェイファー

上記の@TomášFejfarのコメントは私のために働いた。ありがとう。
-scaraveos

とても役に立ちました@TomášFejfar、多分それは、インストールスクリプトか何かにその方法を見つける必要があります
dashesy

4
別の言語でWindowsがインストールされている場合は機能しないことに注意してくださいUserscat /etc/group交換するものを確認するために使用しますUsers。オランダでは、たとえば、あなたは交換しなければならないUsersGebruikers
thijsai

3
もう機能しません。新しいソリューションは@ luke-leeのものです。
fjardon

26

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
    
  • またはgetfaclfromファイルfooを使用してモードをコピーしますbar

    getfacl foo | setfacl -f - bar
    

完全なマニュアルは、Cygwinユーザーガイド「setfacl」セクションにあります。Cygwinがchmod同様にユーティリティを変更していないのはなぜだろうか。


1
グループがユーザーに変更されたソリューションは私にとっては機能しませんでしたが、setfaclベースのものだけでした!
薄暗い

2
ルーク、「o」の後の最初のコードブロックでコロンを逃したと思います。
SeldomNeedy

よろしくお願いします!あなたは正しい、それに応じて修正されます。ありがとう!
ルーク・リー

1
@SeldomNeedyいくつかのチェックを行った結果、両方の構文が機能することがわかりましたが、元の構文(コロンが1つ)の方が正確です。「u」と「g」の2番目のコロンは、UIDとGIDを指定するためのものです。「o」の場合、そのような指定子はないため、必要なコロンは1つだけです。
ルーク・リー

10

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

cygwinのアップデートでこれにヒットしました。スクリプトをありがとう。setfaclそれ自体は恐ろしいです。
アンディブラウン

スクリプトはどこに置きますか?
シシル

スクリプトはcygwinパスのどこにでも行くことができます。$ HOME / binディレクトリを作成してそこに置くこともできますが、その場合はパスに追加する必要があります(例:$ HOME / .bashrc)。
philwalk


1

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


1

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


4
さらに詳しく説明していただけますか?これはどのように問題を解決できますか?「Cygwinからssh-keygenを実行する」以外に、ユーザーはどの手順を実行する必要がありますか?
DanteTheEgregore 14

これは単にキーを生成しますが、OPには
ジョナサン

ここで同じ経験:chmod / ssh-keygenはcygwinの下で適切な許可を与えますが、windows cmdから実行する場合は許可しません。(私は理由がわかりません:
autra

-2

Cygwinインストーラーを実行して更新します。バグを修正する必要があります。


3
投稿を展開する必要があります。適切な回答には、特定の指示(それらへのリンクだけでなく)と、回答がOPの質問に対処する方法または理由に関する説明が含まれます。投稿を編集して、これらの両方の要素に適切に対処してください。
Twisty Impersonator
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.