web-dev-qa-db-fra.com

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

J'essaie de modifier les autorisations de mon fichier de clé key.pem dans 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 -------)

Toutefois:

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 quelque chose me manque?

76
Castaa

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, la génération /etc/passwd et /etc/group de Cygwin place le groupe par défaut/principal de l'utilisateur sous la forme None. Et vous ne pouvez pas modifier l'autorisation de None, de sorte que chmod pour le groupe n'a aucun effet.

Je n'ai pas essayé de réparer les fichiers passwd/group moi-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 groupeHomeUsers). Après cela, vous pouvez faire le chmod 0600 et cela fonctionnera comme prévu.

La variable chgrp à Users peut être utilisée dans n'importe quel autre cas similaire trouvé. Cela fonctionne même comme prévu puisque Cygwin place les utilisateurs dans le groupe Users en tant que groupe secondaire (au lieu de primaire , qui serait le comportement correct).

97
Kovensky

Depuis Cygwin 1.7.34 (2015-02-04), la méthode permettant de changer le groupe en Users ne fonctionne plus. Au lieu de cela, vous devez utiliser l'utilitaire setfacl de Cygwin.

  • Si vous souhaitez définir le mode de fichier sur 644 (rw-r--r--), procédez comme suit:

    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 copiez son mode en utilisant getfacl du fichier foo à bar:

    getfacl foo | setfacl -f - bar
    

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

26
Luke Lee

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 les répertoires et 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
10
philwalk
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
4
xtrimsky

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

1
TheodorosPloumis

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

1
Ravindra Jain