Korzystając z Cygwin w Windows 8, chmod 600 nie działa zgodnie z oczekiwaniami?

75

Próbuję zmienić uprawnienia do mojego pliku klucza key.pemw Cygwin 1.7.11. Ma flagi uprawnień:-rw-rw----

chmod -c 600 key.pem

Raporty:

tryb „key.pem” zmieniony z 0660 (rw-rw ----) na 0600 (rw -------)

Jednak:

ls -l key.pem 

wciąż raporty

Flagi uprawnień key.pem są nadal: -rw-rw ----

Powodem dla którego pytam jest to, że ssh narzeka:

Uprawnienia 0660 dla pliku „key.pem” są zbyt otwarte.

kiedy próbuję ssh do mojej instancji Amazon EC2. Czy to problem z Cygwin i Windows 8 NTFS, czy coś mi brakuje?

Castaa
źródło
To brzmi jak błąd Win8 / Cygwin. Polecam zgłoszenie tego na liście mailingowej Cygwin .
me_i
Może to być związane z NTFS ... Windows tak naprawdę nie używa tego systemu Linux. Może możesz spróbować wejść w ustawienia uprawnień systemu Windows i dać sobie tylko prawa ...
sinni800
Myślę, że jest to związane z superuser.com/questions/363141/...
Daniel Stiner

Odpowiedzi:

97

Używam Cygwin w Win8CP i miałem ten sam problem. To zdecydowanie błąd Cygwina, ale istnieje obejście: spróbuj uruchomić:

 chgrp -R Users ~/.ssh

Dłuższe wyjaśnienie jest takie, że z jakiegoś powodu Cygwin /etc/passwdi /etc/groupgeneracja ustawiają domyślną / główną grupę użytkownika jako None. I nie można zmienić uprawnienia None, więc chmodgrupa for nie ma wpływu.

Nie próbowałem naprawiać plików passwd/ group, ale zrobiłem to chgrp -R Users ~/.ssh(lub, jeśli korzystasz z wersji wstępnej systemu Windows 8, z nazwą grupy HomeUsers). Następnie możesz to zrobić chmod 0600i będzie działać zgodnie z oczekiwaniami.

chgrpDo Usersgrupy mogą być wykonane w zależności od tego inne podobne przypadki można znaleźć. Działa nawet zgodnie z oczekiwaniami, ponieważ Cygwin umieszcza użytkowników w Usersgrupie jako grupę drugorzędną (zamiast podstawowej , co byłoby właściwym zachowaniem).

Jessidhia
źródło
12
Potrzebowałem chgrp -Rv Users ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar
@ TomášFejfar powyższy komentarz działał dla mnie. Dzięki.
scaraveos,
@ TomášFejfar, który był bardzo pomocny, może powinien znaleźć sposób na zainstalowanie skryptów lub coś w tym stylu
dashy
4
Uwaga, jeśli masz zainstalowany system Windows w innym języku, Usersnie będzie działać. Służy cat /etc/groupdo sprawdzania, co należy wymienić Users. W języku polskim, na przykład trzeba by wymienić Usersz Gebruikers.
thijsai
3
To już nie działa. Nowe rozwiązanie jest @ luke-lee.
fjardon
26

Począwszy od Cygwin 1.7.34 (2015-02-04) metoda, która zmienia grupę na Usersjuż nie działa. Zamiast tego musisz użyć setfaclnarzędzia Cygwin .

  • Powiedz, jeśli chcesz ustawić tryb pliku, aby 644 (rw-r--r--)to zrobić:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • lub użyj dłuższego formatu:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • lub skopiuj jego tryb za pomocą getfaclz pliku foodo bar:

    getfacl foo | setfacl -f - bar
    

Kompletny podręcznik znajduje się w sekcji „setfacl” w podręczniku użytkownika Cygwin . Zastanawiam się, dlaczego Cygwin nie zmienił jeszcze chmodużyteczności.

Luke Lee
źródło
1
rozwiązania ze zmianą grupy na Użytkownicy nie działały dla mnie, ale tylko na bazie setfacl!
dim
2
Luke, myślę, że przegapiłeś dwukropek w pierwszym bloku kodu po „o”.
SeldomNeedy
@SeldomNeedy Argh! Masz rację, odpowiednio poprawiony. Dzięki!
Luke Lee,
1
@SeldomNeedy Po kilku dalszych sprawdzeniach stwierdziłem, że obie składnie działają, ale oryginalna (z jednym dwukropkiem) jest dokładniejsza. Drugi dwukropek dla „u” i „g” służy do określenia UID i GID. Dla „o” nie ma takiego specyfikatora, więc potrzebny jest tylko jeden dwukropek.
Luke Lee,
10

Oto skrypt, który korzysta z sugestii Luke'a Lee, ale obsługuje ósemkowe argumenty, takie jak chmod. Zapewnia ramy, które można rozszerzyć. chociaż obecnie obsługuje tylko ósemkowe argumenty potrzebne do ustalenia uprawnień do katalogu key.pem i / lub ~ / .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

Użyłem go w ten sposób, aby naprawić mój katalog i pliki .ssh:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub
philwalk
źródło
Właśnie zostałem dotknięty tym w aktualizacji cygwina. Dzięki za skrypt. setfaclsam w sobie jest okropny.
Andy Brown
Gdzie mam umieścić skrypt?
Sisir,
skrypt może przejść w dowolne miejsce na twojej ścieżce cygwina. Możesz utworzyć katalog $ HOME / bin i umieścić go tam, chociaż będziesz musiał dodać go do swojej ścieżki, np. W $ HOME / .bashrc.
philwalk
4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh
Xtrimsky
źródło
To są dokładnie te kroki, których potrzebowałem, +1.
rumianek
1

Jeśli masz zainstalowany git bash, uruchom to samo polecenie ( chmod -c 600 key.pem) z git bash i unikaj Cygwina .

TheodorosPloumis
źródło
1

Ten problem można rozwiązać, uruchamiając polecenie ssh-keygen z terminalu cygwin (nie jest to zwykły wiersz polecenia systemu Windows). Zrobiłem to na moim komputerze z systemem Windows 8.

Ravindra Jain
źródło
4
Czy możesz prosić o dalsze rozwinięcie? Jak to naprawić problem? Jakie kroki powinien podjąć użytkownik inny niż „uruchom ssh-keygen z Cygwin”?
DanteTheEgregore
To tylko generuje klucz, ale OP ma klucz ze złymi uprawnieniami
Jonathan
To samo doświadczenie tutaj: chmod / ssh-keygen daje dobre uprawnienia cygwinowi, ale nie robi tego, jeśli wykonam je z cmd systemu Windows. (Nie wiem jednak dlaczego :-))
autra
-2

Uruchom instalator Cygwin i zaktualizuj. Błąd powinien zostać naprawiony.

Duncan Calvert
źródło
3
Twój post musi zostać rozwinięty. Dobra odpowiedź zawiera szczegółowe instrukcje (nie tylko linki do nich) oraz wyjaśnienie, w jaki sposób lub dlaczego odpowiedź dotyczy pytania PO. Zmodyfikuj swój post, aby odpowiednio adresować oba te elementy.
Twisty Impersonator