Используя Cygwin в Windows 8, chmod 600 не работает должным образом?

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 или я что-то упустил?

Castaa
источник
Это звучит как ошибка Win8 / Cygwin. Я бы рекомендовал сообщить об этом в списке рассылки Cygwin .
me_and
Это может быть связано с NTFS ... Windows на самом деле не использует эту схему Linux. Может быть, вы можете попробовать
зайти в
Я думаю, что это связано с superuser.com/questions/363141/…
Даниэль Стинер

Ответы:

97

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

 chgrp -R Users ~/.ssh

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

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

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

Jessidhia
источник
12
Мне нужны пользователи chgrp -Rv ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Томаш Фейфар
@ TomášFejfar комментарий выше работал для меня. Благодарю.
Scaraveos
@ TomášFejfar, который был очень полезен, может быть, он должен найти свой путь в установочных скриптах или что-то еще
dashesy
4
Обратите внимание, если у вас установлена ​​Windows на другом языке, Usersона не будет работать. Используйте, cat /etc/groupчтобы проверить, что вы должны заменить Users. На нидерландском языке, например, вам придется заменить Usersна Gebruikers.
thijsai
3
Это больше не работает. Новое решение - @ luke-lee's.
Фьардон
26

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

  • Скажем, если вы хотите установить файловый режим, чтобы 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утилиту аналогичным образом.

Люк Ли
источник
1
решения с изменением группы на Пользователи не работали для меня, а только на основе setfacl!
Дим
2
Люк, я думаю, ты пропустил двоеточие в своем первом блоке кода после 'o'.
SeldomNeedy
@SeldomNeedy Argh! Вы правы, соответственно исправлены. Спасибо!
Люк Ли
1
@SeldomNeedy После еще нескольких проверок я обнаружил, что оба синтаксиса работают, но оригинальный (с одним двоеточием) более точен. 2-е двоеточие для 'u' и 'g' предназначено для указания UID и GID. Для 'o' такого спецификатора нет, поэтому нужен только один двоеточие.
Люк Ли
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
philwalk
источник
Только что получил это в обновлении Cygwin. Спасибо за сценарий. setfaclсам по себе это ужасно.
Энди Браун
Где я могу поставить сценарий?
Сисир
Сценарий может идти в любом месте вашего пути Cygwin. Вы можете создать каталог $ HOME / bin и поместить его туда, хотя затем вам нужно будет добавить его к своему пути, например, в $ HOME / .bashrc.
Philwalk
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
xtrimsky
источник
Это именно те шаги, которые мне нужны, +1.
РомашкаCase
1

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

TheodorosPloumis
источник
1

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

Равиндра Джайн
источник
4
Не могли бы вы рассказать подробнее? Как это может решить проблему? Какие действия должен предпринять пользователь, кроме «запуска ssh-keygen from Cygwin»?
DanteTheEgregore
Это просто генерирует ключ, но у OP есть ключ с плохими разрешениями
Джонатан,
То же самое происходит и здесь: chmod / ssh-keygen дает хорошее разрешение для cygwin, но не делает этого, если я запускаю их из windows cmd. (Хотя я не знаю почему :-))
августа
-2

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

Дункан Калверт
источник
3
Ваш пост должен быть расширен. Хороший ответ включает в себя конкретные инструкции (а не только ссылки на них) и объяснение того, как или почему ответ отвечает на вопрос ОП. Пожалуйста, отредактируйте свое сообщение, чтобы адекватно рассмотреть оба эти элемента.
Я говорю, восстановите Монику