Utilizzando Cygwin in Windows 8, chmod 600 non funziona come previsto?


75

Sto cercando di modificare le autorizzazioni per il mio file chiave key.pemin Cygwin 1.7.11. Ha i flag dei permessi:-rw-rw----

chmod -c 600 key.pem

Rapporti:

modalità di 'key.pem' modificata da 0660 (rw-rw ----) a 0600 (rw -------)

Però:

ls -l key.pem 

riporta ancora

I flag di autorizzazione di key.pem sono ancora: -rw-rw ----

Questo è il motivo per cui chiedo che ssh si stia lamentando:

Le autorizzazioni 0660 per 'key.pem' sono troppo aperte.

quando provo a ssh nella mia istanza di Amazon EC2. È un problema con Cygwin e Windows 8 NTFS o mi manca qualcosa?


Sembra un bug di Win8 / Cygwin. Consiglio di segnalarlo sulla mailing list di Cygwin .
me_e il

Potrebbe essere correlato a NTFS ... Windows non utilizza davvero quello schema Linux. Forse puoi provare ad
accedere alle

Penso che questo sia legato a superuser.com/questions/363141/…
Daniel Stiner

Risposte:


97

Sto usando Cygwin in Win8CP e ho avuto lo stesso problema. È sicuramente un bug di Cygwin, ma c'è una soluzione alternativa: prova a eseguire:

 chgrp -R Users ~/.ssh

La spiegazione più lunga è che, per qualche motivo, Cygwin /etc/passwde la /etc/groupgenerazione stanno mettendo il gruppo predefinito / principale dell'utente come None. E non è possibile modificare l'autorizzazione di None, quindi il chmodgruppo for non ha alcun effetto.

Non ho provato a riparare i file passwd/ da groupsolo, ma ho fatto un chgrp -R Users ~/.ssh(o, se ci si trova nella pre-release di Windows 8, con il nome del gruppo HomeUsers). Dopodiché, puoi fare chmod 0600e funzionerà come previsto.

Il chgrpal Usersgruppo può essere fatto in qualsiasi altro caso simile che trovi. Funziona anche come previsto poiché Cygwin inserisce gli utenti nel Usersgruppo come gruppo secondario (anziché primario , che sarebbe il comportamento corretto).


12
Avevo bisogno di chgrp -Rv Users ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar,

@ TomášFejfar commento sopra ha funzionato per me. Grazie.
scaraveos,

@ TomášFejfar che è stato molto utile, forse dovrebbe trovare la sua strada negli script di installazione o qualcosa del genere
dashesy

4
Nota se Windows è installato in un'altra lingua Usersnon funzionerà. Utilizzare cat /etc/groupper verificare cosa sostituire Users. In olandese, ad esempio, dovresti sostituirlo Userscon Gebruikers.
thijsai,

3
Non funziona più La nuova soluzione è quella di @ luke-lee.
fjardon,

26

A partire da Cygwin 1.7.34 (2015-02-04) il metodo che cambia il gruppo in Usersnon funziona più. Invece è necessario utilizzare l' setfaclutilità di Cygwin .

  • Ad esempio, se si desidera impostare la modalità file per 644 (rw-r--r--)fare ciò:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • o usa un formato più lungo:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • oppure copia la sua modalità utilizzando getfacldal file fooa bar:

    getfacl foo | setfacl -f - bar
    

Un manuale completo si trova nella sezione "setfacl" della guida dell'utente di Cygwin . Mi chiedo perché anche Cygwin non abbia ancora cambiato chmodutilità.


1
le soluzioni con cambio di gruppo in Utenti non hanno funzionato per me, ma solo per setfacl!
dim

2
Luke, penso che tu abbia perso i due punti nel tuo primo blocco di codice dopo la 'o'.
SeldomNeedy,

@SeldomNeedy Argh! Hai ragione, corretto di conseguenza. Grazie!
Luke Lee,

1
@SeldomNeedy Dopo alcuni altri controlli ho trovato che entrambe le sintassi funzionano, ma quella originale (con due punti) è più accurata. Il secondo punto per 'u' e 'g' è per specificare UID e GID. Per 'o' non esiste un tale identificatore, quindi è necessario solo un colon.
Luke Lee,

10

Ecco una sceneggiatura che usa il suggerimento di Luke Lee ma supporta argomenti ottici come chmod. Fornisce un framework che può essere esteso. sebbene al momento supporti solo argt ott necessari per correggere i permessi su directory e file key.pem e / o ~ / .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

L'ho usato in questo modo per correggere i miei file e directory .ssh:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub

Sono appena stato colpito da questo in un aggiornamento di Cygwin. Grazie per la sceneggiatura. setfaclda solo è orribile.
Andy Brown,

Dove metto la sceneggiatura?
Sisir,

lo script può andare ovunque nel tuo percorso cygwin. È possibile creare una directory $ HOME / bin e inserirla lì, anche se è necessario aggiungerla al proprio percorso, ad esempio in $ HOME / .bashrc.
Philwalk,

4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh

Questi sono i passaggi esatti di cui avevo bisogno, +1.
camomilla

1

Se hai installato git bash, esegui lo stesso comando ( chmod -c 600 key.pem) con git bash ed evita Cygwin .


1

Questo problema può essere risolto eseguendo il comando ssh-keygen dal terminale cygwin (non il normale prompt dei comandi di Windows). L'ho fatto nella mia macchina Windows8.


4
Potete per favore approfondire ulteriormente? Come può risolvere il problema? Quali passi l'utente dovrebbe fare se non "eseguire ssh-keygen da Cygwin"?
DanteTheEgregore

Questo genera solo una chiave, ma l'OP ha una chiave con permessi errati
Jonathan,

Stessa esperienza qui: chmod / ssh-keygen mette un buon permesso sotto cygwin, ma non lo fa se li eseguo da Windows cmd. (Non so perché però :-))
autra

-2

Esegui il programma di installazione e l'aggiornamento di Cygwin. Il bug dovrebbe essere corretto.


3
Il tuo post deve essere ampliato. Una buona risposta include istruzioni specifiche (non solo collegamenti ad esse) e una spiegazione su come o perché la risposta affronta la domanda dei PO. Modifica il tuo post per affrontare adeguatamente entrambi questi elementi.
Dico Reinstate Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.