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?


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).


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.


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

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

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 .


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.