En utilisant Cygwin sous Windows 8, chmod 600 ne fonctionne pas comme prévu?

75

J'essaie de modifier les autorisations sur mon fichier de clé key.pemdans Cygwin 1.7.11. Il a les drapeaux d'autorisations:-rw-rw----

chmod -c 600 key.pem

Rapports:

le mode de 'key.pem' est passé de 0660 (rw-rw ----) à 0600 (rw -------)

Pourtant:

ls -l key.pem 

rapporte encore

Les drapeaux d'autorisation de key.pem sont toujours: -rw-rw ----

La raison pour laquelle je demande est que ssh se plaint:

Les autorisations 0660 pour 'key.pem' sont trop ouvertes.

lorsque j'essaie de ssh dans mon instance Amazon EC2. Est-ce un problème avec Cygwin et Windows 8 NTFS ou est-ce que je manque quelque chose?

Castaa
la source
Cela ressemble à un bogue Win8 / Cygwin. Je recommanderais de le signaler sur la liste de diffusion Cygwin .
me_and et
Cela pourrait être lié à NTFS ... Windows n'utilise pas vraiment ce schéma Linux. Peut-être que vous pouvez essayer d'aller dans les paramètres d'autorisation de Windows et ne vous donner que des droits ...
sinni800
Je pense que cela est lié à superuser.com/questions/363141/…
Daniel Stiner

Réponses:

97

J'utilise Cygwin dans Win8CP et j'ai eu le même problème. C'est certainement un bogue de Cygwin, mais il existe une solution de contournement: essayez de lancer:

 chgrp -R Users ~/.ssh

L'explication la plus longue est que, pour une raison quelconque, Cygwin /etc/passwdet sa /etc/groupgénération placent le groupe par défaut / principal de l'utilisateur comme None. Et vous ne pouvez pas changer l'autorisation de None, le chmodgroupe for n'a aucun effet.

Je n'ai pas essayé de réparer les fichiers passwd/ groupmoi-même, mais j'ai fait un chgrp -R Users ~/.ssh(ou, si vous êtes sur la version préliminaire de Windows 8, avec le nom du groupe HomeUsers). Après cela, vous pouvez le faire chmod 0600et cela fonctionnera comme prévu.

Le chgrpau Usersgroupe peut se faire dans d' autres cas , selon la même que vous trouvez. Cela fonctionne même comme prévu puisque Cygwin place les utilisateurs du Usersgroupe en tant que groupe secondaire (au lieu de primaire , ce qui constituerait le comportement correct).

Jessidhia
la source
12
J'avais besoin de chgrp -Rv Utilisateurs ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar
@ TomášFejfar commentaire ci-dessus a fonctionné pour moi. Merci.
scaraveos
@ TomášFejfar qui a été très utile, il devrait peut-être trouver sa place dans les scripts d'installation ou quelque chose du
genre
4
Notez que si Windows est installé dans une autre langue, il Usersne fonctionnera pas. Utilisez cat /etc/grouppour vérifier avec ce que vous devez remplacer Users. En néerlandais par exemple, vous devez remplacer Userspar Gebruikers.
Thijsai
3
Ça ne marche plus. La nouvelle solution est celle de @ luke-lee.
fjardon
26

Depuis Cygwin 1.7.34 (2015-02-04), la méthode permettant de changer le groupe pour Usersne plus fonctionner. Au lieu de cela, vous devez utiliser l' setfaclutilitaire Cygwin .

  • Dites, si vous voulez définir le mode de fichier pour 644 (rw-r--r--)faire ceci:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • ou utilisez un format plus long:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • ou copier son mode en utilisant getfaclde fichier fooà bar:

    getfacl foo | setfacl -f - bar
    

Un manuel complet se trouve dans la section "setfacl" du manuel d’utilisation Cygwin . Je me demande pourquoi Cygwin n’a pas encore changé d’ chmodutilité.

Luke Lee
la source
1
Les solutions avec changement de groupe vers Utilisateurs ne fonctionnaient pas pour moi, mais uniquement basées sur setfacl!
Dim
2
Luke, je pense que vous avez manqué un colon dans votre premier bloc de code après le «o».
SeldomNeedy
@SeldomNeedy Argh! Vous avez raison, corrigé en conséquence. Merci!
Luke Lee
1
@SeldomNeedy Après quelques vérifications supplémentaires, j'ai trouvé que la syntaxe fonctionnait bien, mais celle d'origine (avec un signe deux-points) est plus précise. Les deuxièmes points pour «u» et «g» servent à spécifier UID et GID. Pour 'o', il n’existe pas de spécificateur de ce type, il ne faut donc que deux points.
Luke Lee
10

Voici un script qui utilise la suggestion de Luke Lee mais supporte les arguments octaux comme chmod. Il fournit un cadre qui peut être étendu. bien qu’il ne supporte actuellement que les arguments octaux nécessaires pour corriger l’autorisation sur le répertoire key.pem et / ou ~ / .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

Je l'ai utilisé comme ça pour réparer mon répertoire et mes fichiers .ssh:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub
philwalk
la source
Je viens d’être touché par celui-ci dans une mise à jour de cygwin. Merci pour le script. setfaclseul est horrible.
Andy Brown
Où est-ce que je mets le script?
Sisir
le script peut aller n'importe où dans votre chemin cygwin. Vous pouvez créer un répertoire $ HOME / bin et le placer à cet emplacement, bien que vous deviez ensuite l'ajouter à votre chemin, par exemple dans $ HOME / .bashrc.
philwalk
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
Xtrimsky
la source
Ce sont les étapes exactes dont j'avais besoin, +1.
camomileCase
1

Si vous avez installé git bash, exécutez la même commande ( chmod -c 600 key.pem) avec git bash et évitez Cygwin .

TheodorosPloumis
la source
1

Ce problème peut être résolu en exécutant la commande ssh-keygen à partir du terminal cygwin (l’invite de commande Windows normale). Je l'ai fait dans ma machine Windows8.

Ravindra Jain
la source
4
Pouvez-vous élaborer davantage? Comment cela peut-il résoudre le problème? Quelles sont les étapes à suivre par l'utilisateur autres que "lancer ssh-keygen depuis Cygwin"?
DanteTheEgregore
Cela génère juste une clé, mais le PO a une clé avec de mauvaises permissions
Jonathan
Même expérience ici: chmod / ssh-keygen place une bonne permission sous cygwin, mais ne le fait pas si je les exécute à partir de la cmd de windows. (Je ne sais pas pourquoi :-))
mardi
-2

Exécutez le programme d'installation Cygwin et mettez-le à jour. Le bug devrait être corrigé.

Duncan Calvert
la source
3
Votre message doit être élargi. Une bonne réponse comprend des instructions spécifiques (pas seulement des liens vers celles-ci) et une explication sur la manière dont ou pourquoi la réponse répond à la question des PO. Veuillez modifier votre message pour répondre de manière adéquate à ces deux éléments.
Je dis: réintégrez Monica le