75

Я пытаюсь изменить права доступа к моему файлу ключа key.pem в Cygwin 1.7.11. У него есть флаги разрешений: -rw-rw----

chmod -c 600 key.pem

Доклады:

режим 'key.pem' изменен с 0660 (rw-rw ----) на 0600 (rw -------)

Тем не мение:

ls -l key.pem 

все еще сообщает

Флаги разрешений key.pem по-прежнему: -rw-rw ----

Вот почему я спрашиваю, что SSH жалуется:

Разрешения 0660 для 'key.pem' слишком открыты.

когда я пытаюсь войти в мой экземпляр Amazon EC2. Это проблема с Cygwin & Windows 8 NTFS или я что-то упустил?

7 ответов7

97

Я использую Cygwin в Win8CP, и у меня была та же проблема. Это определенно ошибка Cygwin, но есть обходной путь: попробуйте запустить:

 chgrp -R Users ~/.ssh

Более длинное объяснение состоит в том, что по какой-то причине при генерации /etc/passwd и /etc/group Cygwin пользовательская / основная группа по умолчанию выставляется как None . И вы не можете изменить разрешение None , поэтому chmod для группы не имеет никакого эффекта.

Я не пытался восстановить passwd/group самостоятельно, но я сделал chgrp -R Users ~/.ssh (или, если вы находитесь в предварительной версии Windows 8, с именем группы HomeUsers). После этого вы можете выполнить chmod 0600 и он будет работать, как и ожидалось.

chgrp группы « Users » может быть выполнена в других подобных случаях. Это даже работает, как и ожидалось, поскольку Cygwin помещает пользователей в группу « Users » в качестве вторичной группы (вместо основной, что было бы правильным поведением).

26

Начиная с Cygwin 1.7.34 (2015-02-04) метод, который изменяет группу на Users больше не работает. Вместо этого вам нужно использовать утилиту Cygwin setfacl .

  • Скажем, если вы хотите установить режим файла на 644 (rw-r--r--) сделайте следующее:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • или используйте более длинный формат:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • или скопируйте его режим, используя getfacl из файла foo в bar:

    getfacl foo | setfacl -f - bar
    

Полное руководство находится в разделе "setfacl" руководства пользователя Cygwin. Интересно, почему Cygwin еще не изменил утилиту chmod ?

10

Вот скрипт, который использует предложение Люка Ли, но поддерживает восьмеричные аргументы, такие как chmod. Это обеспечивает основу, которая может быть расширена. хотя в настоящее время он поддерживает только восьмеричные аргументы, необходимые для исправления прав доступа к каталогу и файлам key.pem и / или ~ / .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

Я использовал это, чтобы исправить мои каталог и файлы .ssh:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
1

Если у вас установлен git bash, запустите ту же команду (chmod -c 600 key.pem) с git bash и избегайте Cygwin.

1

Эту проблему можно решить, запустив команду ssh-keygen с терминала cygwin.(Не обычная командная строка Windows). Я сделал это в моей машине Windows8.

-2

Запустите установщик Cygwin и обновите его. Ошибка должна быть исправлена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .