¿Utilizando Cygwin en Windows 8, chmod 600 no funciona como se esperaba?

75

Estoy tratando de cambiar los permisos a mi archivo de clave key.pem en Cygwin 1.7.11. Tiene las banderas de permisos: -rw-rw----

chmod -c 600 key.pem

Informes:

el modo de 'key.pem' cambió de 0660 (rw-rw ----) a 0600 (rw -------)

Sin embargo:

ls -l key.pem 

todavía informes

Las banderas de permiso de key.pem siguen siendo: -rw-rw ----

Esta razón por la que estoy preguntando es que ssh se queja:

Los permisos 0660 para 'key.pem' están demasiado abiertos.

cuando trato de ssh en mi instancia de Amazon EC2. ¿Es este un problema con Cygwin & amp; Windows 8 NTFS o me falta algo?

Castaa
fuente
Esto suena como un error Win8 / Cygwin. Recomiendo reportarlo en el Lista de correo de Cygwin .
me_and
Puede estar relacionado con NTFS ... Windows realmente no usa ese esquema de Linux. Tal vez pueda intentar ingresar a la configuración de permisos de Windows y solo otorgarse derechos ...
sinni800
Creo que esto está relacionado con superuser.com/questions/363141/…
Daniel Stiner

Respuestas:

97

Estoy usando Cygwin en el Win8CP, y tuve el mismo problema. Definitivamente es un error de Cygwin, pero hay una solución: intente ejecutar:

 chgrp -R Users ~/.ssh

La explicación más larga es que, por alguna razón, Cygwin's /etc/passwd y /etc/group generación están poniendo el grupo predeterminado / principal del usuario como None. Y no puedes cambiar el permiso de None, entonces el chmod Para el grupo no tiene efecto.

No intenté reparar el passwd / group me limito, pero hice un chgrp -R Users ~/.ssh (o, si está en la versión preliminar de Windows 8, con el nombre del grupo HomeUsers ). Después de eso, puedes hacer el chmod 0600 y funcionará como se esperaba.

los chgrp al Users El grupo se puede hacer en cualquier otro caso similar que encuentre. Incluso funciona como se esperaba ya que Cygwin pone a los usuarios en el Users grupo como un secundario grupo (en lugar de primario , que seria el comportamiento correcto).

Kovensky
fuente
12
Necesitaba chgrp -Rv Users ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar
@ TomášFejfar comentario anterior funcionó para mí. Gracias.
scaraveos
@ TomášFejfar fue muy útil, tal vez debería encontrar su camino para instalar scripts o algo
dashesy
4
Tenga en cuenta si tiene instalado Windows en otro idioma Users no va a funcionar Utilizar cat /etc/group para consultar con lo que debe reemplazar Users. En holandés, por ejemplo, tendrías que reemplazar Users con Gebruikers.
thijsai
3
Ya no funciona. La nueva solución es la de @luke-lee.
fjardon
26

A partir de Cygwin 1.7.34 (2015-02-04) el método que cambia el grupo a Users ya no funciona En su lugar necesitas usar Cygwin's setfacl utilidad.

  • Diga, si desea configurar el modo de archivo a 644 (rw-r--r--) hacer esto:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • o usar un formato más largo:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • o copie su modo usando getfacl desde el archivo foo a bar:

    getfacl foo | setfacl -f - bar
    

Un manual completo está en el Sección "setfacl" de la guía del usuario de Cygwin . Me pregunto por qué Cygwin aún no ha cambiado. chmod igualmente utilidad.

Luke Lee
fuente
1
¡Las soluciones con cambio de grupo a Usuarios no funcionaron para mí, sino solo una basada en setfacl!
dim
2
Luke, creo que te perdiste dos puntos en tu primer bloque de código después de la 'o'.
SeldomNeedy
@SeldomNeedy Argh! Tienes razón, corregido en consecuencia. ¡Gracias!
Luke Lee
1
@SeldomNeedy Después de algunas comprobaciones más, encontré que ambas sintaxis funcionan, pero la original (con una coma) es más precisa. El segundo signo de dos puntos para 'u' y 'g' es para especificar UID y GID. Para 'o' no existe tal especificador, por lo que solo se necesita una coma.
Luke Lee
10

Aquí hay una secuencia de comandos que utiliza la sugerencia de Luke Lee pero que admite argumentos octales como chmod. Proporciona un marco que se puede ampliar. aunque actualmente solo es compatible con los argumentos octales necesarios para arreglar el permiso en el directorio y archivos key.pem y / 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

Lo usé así para arreglar mi directorio y archivos .ssh:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub
philwalk
fuente
Acabo de ser golpeado por este en una actualización de cygwin. Gracias por el guión. setfacl por sí misma es horrible.
Andy Brown
¿Dónde pongo el guión?
Sisir
El script puede ir a cualquier parte de tu ruta de cygwin. Puede crear un directorio $ HOME / bin y ponerlo allí, aunque luego deberá agregarlo a su ruta, por ejemplo, en $ HOME / .bashrc.
philwalk
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
xtrimsky
fuente
Estos son los pasos exactos que necesitaba, +1.
camomileCase
1

Si usted tiene git bash instalado ejecuta el mismo comando ( chmod -c 600 key.pem ) con git bash y evitar Cygwin .

TheodorosPloumis
fuente
1

Este problema se puede resolver ejecutando el comando ssh-keygen desde el terminal cygwin. (No es el indicador de comandos normal de Windows). He hecho esto en mi máquina windows8.

Ravindra Jain
fuente
4
¿Puedes por favor elaborar más? ¿Cómo puede esto solucionar el problema? ¿Qué pasos debe seguir el usuario además de "ejecutar ssh-keygen desde Cygwin"?
DanteTheEgregore
Esto solo genera una clave, pero el OP tiene una clave con permisos incorrectos
Jonathan
La misma experiencia aquí: chmod / ssh-keygen pone un buen permiso bajo cygwin, pero no lo hace si los ejecuto desde el cmd de windows. (No sé por qué aunque :-))
autra
-2

Ejecute el instalador de Cygwin y actualice. El error debe ser arreglado.

Duncan Calvert
fuente
3
Tu publicación necesita ser ampliada. Un bien responder incluye instrucciones específicas (no solo enlaces a ellas) y una explicación de cómo o por qué la respuesta aborda la pregunta de los OP. Edite su publicación para abordar adecuadamente estos dos elementos.
Twisty Impersonator