79 votes

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

J'essaie de changer les permissions de mon fichier de clé key.pem sur Cygwin 1.7.11. Il a les drapeaux de permissions : -rw-rw----

chmod -c 600 key.pem

Rapports :

le mode de 'key.pem' a changé de 0660 (rw-rw----) à 0600 (rw-------)

Cependant :

ls -l key.pem 

toujours des rapports

Les drapeaux de permission de key.pem sont toujours : -rw-rw----

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

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

lorsque j'essaie de me connecter à mon instance Amazon EC2. Est-ce un problème avec Cygwin et Windows 8 NTFS ou est-ce que j'ai manqué quelque chose ?

99voto

Jessidhia Points 2790

J'utilise Cygwin dans le Win8CP, et j'ai eu le même problème. C'est certainement un bug de Cygwin, mais il y a une solution de contournement : essayez d'exécuter :

 chgrp -R Users ~/.ssh

L'explication la plus longue est que, pour une raison ou une autre, le programme de Cygwin /etc/passwd y /etc/group mettent le groupe par défaut/principal de l'utilisateur en tant que None . Et vous ne pouvez pas changer la permission de None donc le chmod pour le groupe n'a aucun effet.

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

El chgrp au Users Le groupe peut être fait dans tous les autres cas similaires que vous trouverez. Cela fonctionne même comme prévu puisque Cygwin place les utilisateurs dans le groupe Users en tant que secondaire (au lieu de primaire ce qui serait le comportement correct).

29voto

Luke Lee Points 427

À partir de Cygwin 1.7.34 (2015-02-04), la méthode qui change le groupe en Users ne fonctionne plus. A la place, vous devez utiliser le programme de Cygwin setfacl utilitaire.

  • Par exemple, si vous voulez régler le mode de fichier sur 644 (rw-r--r--) faites-le :

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

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

    getfacl foo | setfacl -f - bar

Un manuel complet se trouve dans le section "setfacl" du guide de l'utilisateur de Cygwin . Je me demande pourquoi Cygwin n'a pas encore changé chmod de même.

11voto

philwalk Points 404

Voici un script qui utilise la suggestion de Luke Lee mais supporte les args octaux comme chmod. Il fournit un cadre qui peut être étendu. bien qu'il ne supporte actuellement que les args octaux nécessaires pour fixer la permission sur le répertoire et les fichiers 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

4voto

xtrimsky Points 473
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh

1voto

TheodorosPloumis Points 111

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X