Usando o Cygwin no Windows 8, o chmod 600 não funciona como esperado?

75

Estou tentando alterar as permissões para meu arquivo de chave key.pem em Cygwin 1.7.11. Tem os sinalizadores de permissões: -rw-rw----

chmod -c 600 key.pem

Relatórios:

mode of 'key.pem' changed from 0660 (rw-rw----) to 0600 (rw-------)

No entanto:

ls -l key.pem 

ainda relata

key.pem's permission flags are still: -rw-rw----

O motivo pelo qual estou perguntando é que o ssh está reclamando:

Permissions 0660 for 'key.pem' are too open.

quando tento ssh na minha instância do Amazon EC2. Este é um problema com o Cygwin & Windows 8 NTFS ou estou faltando alguma coisa?

    
por Castaa 05.03.2012 / 23:27

7 respostas

97

Estou usando o Cygwin no Win8CP e tive o mesmo problema. É definitivamente um bug do Cygwin, mas há uma solução alternativa: tente executar:

 chgrp -R Users ~/.ssh

A explicação mais longa é que, por algum motivo, a geração /etc/passwd e /etc/group do Cygwin está colocando o grupo principal / padrão do usuário como None . E você não pode alterar a permissão de None , portanto, o chmod para o grupo não tem efeito.

Eu não tentei reparar os arquivos passwd / group , mas fiz um chgrp -R Users ~/.ssh (ou, se você estiver no pré-lançamento do Windows 8, com o nome do grupo HomeUsers ) . Depois disso, você pode fazer o chmod 0600 e ele funcionará como esperado.

O chgrp para o grupo Users pode ser feito em qualquer outro caso semelhante encontrado. Funciona como esperado, pois o Cygwin coloca os usuários no grupo Users como um grupo secundário (em vez de primário , que seria o comportamento correto).

    
por 03.04.2012 / 20:58
26

A partir do Cygwin 1.7.34 (2015-02-04) o método que altera o grupo para Users não funciona mais. Em vez disso, você precisa usar o utilitário setfacl do Cygwin.

  • Digamos que, se você quiser definir o modo de arquivo como 644 (rw-r--r--) , faça isso:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • ou use um formato mais longo:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • ou copie seu modo usando getfacl do arquivo foo para bar :

    getfacl foo | setfacl -f - bar
    

Um manual completo está na seção "setfacl" do guia do usuário do Cygwin . Eu me pergunto por que o Cygwin ainda não mudou chmod utility da mesma forma.

    
por 12.02.2015 / 03:19
10

Aqui está um script que usa a sugestão de Luke Lee, mas suporta octal args como chmod. Ele fornece uma estrutura que pode ser estendida. embora atualmente apenas suporte octal args necessários para consertar a permissão no diretório e nos arquivos key.pem e / 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

Eu usei assim para corrigir meu diretório e arquivos .ssh:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub
    
por 14.02.2015 / 16:57
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
    
por 26.05.2014 / 19:36
1

Se você tiver git bash instalado, execute o mesmo comando ( chmod -c 600 key.pem ) com git bash e evite Cygwin .

    
por 26.04.2014 / 17:15
1

Este problema pode ser resolvido executando o comando ssh-keygen a partir do terminal cygwin (não o prompt de comando normal do windows). Eu fiz isso na minha máquina windows8.

    
por 08.08.2014 / 16:59
-2

Execute o instalador do Cygwin e atualize. O bug deve ser corrigido.

    
por 15.06.2015 / 19:52