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?


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).


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é.


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

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

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 .


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.


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é.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.