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


Это звучит как ошибка 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группу в качестве вторичной группы (вместо основной , что было бы правильным поведением).


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

Только что получил это в обновлении Cygwin. Спасибо за сценарий. setfaclсам по себе это ужасно.
— Энди Браун

Где я могу поставить сценарий?
— Сисир

Сценарий может идти в любом месте вашего пути Cygwin. Вы можете создать каталог $ HOME / bin и поместить его туда, хотя затем вам нужно будет добавить его к своему пути, например, в $ HOME / .bashrc.
— Philwalk


1

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


1

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


4
Не могли бы вы рассказать подробнее? Как это может решить проблему? Какие действия должен предпринять пользователь, кроме «запуска ssh-keygen from Cygwin»?
— DanteTheEgregore

Это просто генерирует ключ, но у OP есть ключ с плохими разрешениями
— Джонатан,

То же самое происходит и здесь: chmod / ssh-keygen дает хорошее разрешение для cygwin, но не делает этого, если я запускаю их из windows cmd. (Хотя я не знаю почему :-))
— августа

-2

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


3
Ваш пост должен быть расширен. Хороший ответ включает в себя конкретные инструкции (а не только ссылки на них) и объяснение того, как или почему ответ отвечает на вопрос ОП. Пожалуйста, отредактируйте свое сообщение, чтобы адекватно рассмотреть оба эти элемента.
— Я говорю, восстановите Монику
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.