Використовуючи 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. Можливо, ви можете спробувати зайти в налаштування дозволу Windows і дати собі права ...
sinni800

Я думаю, це пов’язано з superuser.com/questions/363141/…
Даніель Стінер

Відповіді:


97

Я використовую Cygwin у програмі Win8CP, і у мене була така ж проблема. Це напевно помилка Cygwin, але є рішення: спробуйте запустити:

 chgrp -R Users ~/.ssh

Більш тривалим поясненням є те, що з певних причин Cygwin /etc/passwdта /etc/groupпокоління ставлять користувача за замовчуванням / основною групою як None. І ви не можете змінити дозвіл на None, тому chmodдля групи немає ефекту.

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

chgrpДо Usersгрупи може бути зроблено в залежності від того , в інших подібних випадках ви знайдете. Це працює навіть як очікувалося, оскільки Cygwin ставить користувачів у Usersгрупу як вторинну групу (замість первинної , що було б правильною поведінкою).


12
Мені потрібні chgrp -Rv Users ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Томаш Феджфар

@ TomášFejfar коментар вище працював для мене. Дякую.
scaraveos

@ TomášFejfar, що було дуже корисно, можливо, воно повинно знайти свій шлях до встановлення сценаріїв чи чогось іншого
dashesy

4
Зверніть увагу, якщо у вас інстальована Windows іншою мовою, Usersвона не працює. Використовуйте, cat /etc/groupщоб перевірити, що вам слід замінити Users. У голландському, наприклад , вам доведеться замінити Usersз Gebruikers.
thijsai

3
Це більше не працює. Нове рішення - це @ luke-lee.
fjardon

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
Люк, я думаю, ти пропустив двокрапку у своєму першому кодовому блоці після «о».
SeldomNeedy

@SeldomNeedy Argh! Ви праві, виправлені відповідно. Дякую!
Люк Лі

1
@SeldomNeedy Після кількох перевірок я виявив обидва синтаксичні роботи, але оригінальний (з двокрапкою) більш точний. Друга двокрапка для '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.
фольклор


1

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


1

Цю проблему можна вирішити, запустивши команду ssh-keygen з терміналу cygwin. (Не звичайний рядок Windows Command). Я це зробив у своїй машині Windows8.


4
Чи можете ви, будь ласка, детальніше розгорнутися? Як це можна виправити? Які кроки повинен зробити користувач, окрім "запустити ssh-keygen від Cygwin"?
DanteTheEgregore

Це просто створює ключ, але в ОП є ключ із поганими дозволами
Джонатан

Тут же досвід: chmod / ssh-keygen ставить хороший дозвіл під cygwin, але не робить цього, якщо я виконую їх з Windows cmd. (Я не знаю, чому хоч :-))
autra

-2

Запустіть інсталятор Cygwin та оновіть його. Помилку слід виправити.


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