Mit Cygwin unter Windows 8 funktioniert chmod 600 nicht wie erwartet?

75

Ich versuche, die Berechtigungen für meine Schlüsseldatei key.pemin Cygwin 1.7.11 zu ändern. Es hat die Berechtigungsflags:-rw-rw----

chmod -c 600 key.pem

Berichte:

Modus von 'key.pem' geändert von 0660 (rw-rw ----) zu 0600 (rw -------)

Jedoch:

ls -l key.pem 

berichtet noch

Die Berechtigungsflags von key.pem sind weiterhin: -rw-rw ----

Dieser Grund, warum ich frage, ist, dass ssh sich beschwert:

Berechtigungen 0660 für 'key.pem' sind zu offen.

wenn ich versuche, in meine Amazon EC2-Instanz zu sshen. Ist dies ein Problem mit Cygwin und Windows 8 NTFS oder fehlt mir etwas?

Castaa
quelle
Das klingt nach einem Win8 / Cygwin-Fehler. Ich würde empfehlen, es auf der Cygwin-Mailingliste zu melden .
me_and
Es könnte mit NTFS zusammenhängen ... Windows verwendet dieses Linux-Schema nicht wirklich. Vielleicht können Sie versuchen, in die Windows-Berechtigungseinstellungen zu gehen und sich nur Rechte zu geben ...
sinni800
Ich denke, das hängt mit superuser.com/questions/363141/… zusammen
Daniel Stiner

Antworten:

97

Ich verwende Cygwin im Win8CP und hatte das gleiche Problem. Es ist definitiv ein Cygwin-Fehler, aber es gibt eine Problemumgehung: Versuchen Sie, Folgendes auszuführen:

 chgrp -R Users ~/.ssh

Die längere Erklärung ist, dass Cygwin /etc/passwdund /etc/groupGeneration aus irgendeinem Grund die Standard- / Hauptgruppe des Benutzers als setzen None. Und Sie können die Berechtigung von nicht ändern None, sodass die chmodfor-Gruppe keine Auswirkung hat.

Ich habe nicht versucht, die passwd/ group-Dateien selbst zu reparieren , aber ich habe eine chgrp -R Users ~/.ssh(oder, wenn Sie mit der Windows 8-Vorabversion arbeiten, mit dem Gruppennamen HomeUsers) ausgeführt. Danach können Sie das tun chmod 0600und es wird wie erwartet funktionieren.

Die Weitergabe chgrpan die UsersGruppe kann in allen anderen ähnlichen Fällen erfolgen. Es funktioniert sogar wie erwartet, da Cygwin Benutzer Usersals sekundäre Gruppe in die Gruppe einfügt (anstelle der primären , was das richtige Verhalten wäre).

Jessidhia
quelle
12
Ich brauchte chgrp -Rv Benutzer ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar
@ TomášFejfar Kommentar oben hat bei mir funktioniert. Vielen Dank.
Scaraveos
@ TomášFejfar, das war sehr hilfreich, vielleicht sollte es seinen Weg in Installationsskripte oder so finden
Bindestrich
4
Hinweis: Wenn Sie Windows in einer anderen Sprache installiert haben Users, funktioniert dies nicht. Verwenden Sie cat /etc/group, um zu überprüfen, was Sie ersetzen sollten Users. Auf Niederländisch zum Beispiel würden Sie ersetzen müssen Usersmit Gebruikers.
Thijsai
3
Es funktioniert nicht mehr Die neue Lösung ist die von @ luke-lee.
Fjardon
26

Ab Cygwin 1.7.34 (04.02.2015) funktioniert die Methode, mit der die Gruppe in geändert wird, Usersnicht mehr. Stattdessen müssen Sie das setfaclDienstprogramm von Cygwin verwenden .

  • Sagen Sie, wenn Sie den Dateimodus dazu einstellen möchten 644 (rw-r--r--):

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • oder verwenden Sie ein längeres Format:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • oder kopieren Sie den Modus mit getfaclvon Datei foozu bar:

    getfacl foo | setfacl -f - bar
    

Eine vollständige Anleitung finden Sie im Abschnitt "setfacl" der Cygwin-Bedienungsanleitung . Ich frage mich, warum Cygwin den chmodNutzen ebenfalls noch nicht geändert hat .

Luke Lee
quelle
1
lösungen mit gruppenwechsel zu Usern haben bei mir nicht funktioniert sondern nur setfacl-basiert!
dim
2
Luke, ich glaube, Sie haben einen Doppelpunkt in Ihrem ersten Codeblock nach dem 'o' verpasst.
SeldomNeedy
@SeldomNeedy Argh! Sie haben recht, entsprechend korrigiert. Vielen Dank!
Luke Lee
1
@SeldomNeedy Nach einigen weiteren Überprüfungen stellte ich fest, dass beide Syntaxfunktionen funktionieren, aber die ursprüngliche (mit einem Doppelpunkt) ist genauer. Der 2. Doppelpunkt für 'u' und 'g' dient zur Angabe von UID und GID. Für 'o' gibt es keinen solchen Bezeichner, daher wird nur ein Doppelpunkt benötigt.
Luke Lee
10

Hier ist ein Skript, das Luke Lees Vorschlag verwendet, aber Oktalargumente wie chmod unterstützt. Es bietet einen Rahmen, der erweitert werden kann. Obwohl es derzeit nur oktale Argumente unterstützt, die zum Korrigieren der Berechtigungen für das Verzeichnis und die Dateien key.pem und / oder ~ / .ssh erforderlich sind.

#!/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

Ich habe es so benutzt, um mein .ssh-Verzeichnis und meine Dateien zu reparieren:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub
Philwalk
quelle
Wurde gerade von diesem in einem Cygwin-Update getroffen. Danke für das Drehbuch. setfaclan sich ist schrecklich.
Andy Brown
Wo lege ich das Skript?
Sisir
Das Skript kann überall in Ihrem Cygwin-Pfad verwendet werden. Sie können ein $ HOME / bin-Verzeichnis erstellen und dort ablegen, obwohl Sie es dann Ihrem Pfad hinzufügen müssen, z. B. in $ HOME / .bashrc.
Philwalk
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
xtrimsky
quelle
Dies sind die genauen Schritte, die ich benötigt habe, +1.
camomileCase
1

Wenn Sie git bash installiert haben, führen Sie denselben Befehl ( chmod -c 600 key.pem) mit git bash aus und vermeiden Sie Cygwin .

TheodorosPloumis
quelle
1

Dieses Problem kann behoben werden, indem Sie den Befehl ssh-keygen über das Cygwin-Terminal ausführen (nicht die normale Windows-Eingabeaufforderung). Ich habe dies in meinem Windows8-Rechner getan.

Ravindra Jain
quelle
4
Können Sie bitte näher darauf eingehen? Wie kann das Problem behoben werden? Welche Schritte sollte der Benutzer außer "ssh-keygen von Cygwin ausführen" ausführen?
DanteTheEgregore
Dies erzeugt nur einen Schlüssel, aber das OP hat einen Schlüssel mit schlechten Berechtigungen
Jonathan
Gleiche Erfahrung hier: chmod / ssh-keygen legt eine gute Berechtigung unter cygwin ab, tut dies jedoch nicht, wenn ich sie über Windows Cmd ausführe. (Ich weiß aber nicht warum :-))
autra
-2

Führen Sie das Cygwin-Installationsprogramm aus und aktualisieren Sie es. Der Fehler sollte behoben sein.

Duncan Calvert
quelle
3
Dein Beitrag muss erweitert werden. Eine gute Antwort beinhaltet spezifische Anweisungen (nicht nur Links zu diesen) und eine Erklärung, wie oder warum die Antwort die Frage des OP beantwortet. Bitte bearbeiten Sie Ihren Beitrag, um diese beiden Elemente angemessen zu behandeln.
Twisty Imitator