Błąd ssh „uprawnienia są zbyt otwarte”


2053

Miałem problem z komputerem Mac, w którym nie mogłem już zapisać żadnego rodzaju pliku na dysku. Musiałem zrestartować lwa OSX i zresetować uprawnienia do plików i acls.

Ale teraz, gdy chcę zatwierdzić repozytorium, otrzymuję następujący błąd od ssh:

Permissions 0777 for '/Users/username/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

Jakie poziomy uprawnień powinienem przyznać plikowi id_rsa?


19
Dzięki za pytanie. Lepszym doświadczeniem byłoby dla tego, który napisał ten komunikat o błędzie, zasugerowanie kilku prawidłowych konfiguracji (takich jak 600 lub 400, jak sugerowano poniżej). Programiści, którzy nie piszą wystarczająco kompletnych komunikatów o błędach, które są pomocne, torturują nas wszystkich od lat!
George Pligoropoulos,

FWIW, jest to związane StrictModesjest włączona na sshdserwerze, z człowieka stronie: „StrictModes Określa, czy sshd (8) Należy sprawdzić tryby plików i własności plików użytkownika i katalog domowy przed zaakceptowaniem logowanie”. - możesz to wyłączyć, jednak nie jest to zalecane.
masseyb

Odpowiedzi:


3469

Klucze muszą być czytelne tylko dla Ciebie:

chmod 400 ~/.ssh/id_rsa

Jeśli klucze muszą być przez Ciebie zapisywalne:

chmod 600 ~/.ssh/id_rsa

Wydaje się również, że 600 jest w porządku (w rzeczywistości lepsza w większości przypadków, ponieważ nie trzeba później zmieniać uprawnień do plików, aby go edytować).

Odpowiednia część z manpage ( man ssh)

 ~/.ssh/id_rsa
         Contains the private key for authentication.  These files contain sensitive 
         data and should be readable by the user but not
         accessible by others (read/write/execute).  ssh will simply ignore a private 
         key file if it is              
         accessible by others.  It is possible to specify a
         passphrase when generating the key which will be used to encrypt the sensitive 
         part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_ecdsa.pub
 ~/.ssh/id_rsa.pub
         Contains the public key for authentication.  These files are not sensitive and 
         can (but need not) be readable by anyone.

299
400 jest zbyt niski, ponieważ sprawia, że ​​nie można go zapisać przez własnego użytkownika. 600 jest faktycznie zalecane, ponieważ pozwala właścicielowi na odczyt i zapis, a nie tylko na odczyt.
jfreak53

8
Odkryłem dzisiaj, że 400 ma znaczenie. Załóżmy, że masz plik autoryzowanych_kluczy, który ma ustawione funkcje no-pty i in . Jeśli plik jest zapisywalny, użytkownik może nadpisać plik uprawniony_kluczy i uzyskać interaktywny dostęp do powłoki! O czym należy pamiętać, choć z pewnością nie jest to ogólny przypadek większości ludzi.
szybka zmiana w

17
AWS faktycznie zaleca pozwolenie 400 na swojej stronie internetowej. Tak zrobiłem na OS X i zadziałało.
George Mylonas

5
To zdecydowanie działa i jest bardziej bezpieczne. Jedynym minusem jest to, że musisz go zmienić na 600, aby edytować. W przypadku id_rsa i id_rsa.pub wątpię, żeby to miało znaczenie, ponieważ rzadko kiedy będziesz edytować te pliki, ale w przypadku kluczy autoryzowanych może to być denerwujące. Najlepiej zrozumieć kompromisy i odpowiednio skonfigurować każdy system.
szybka zmiana w dniu

3
Przypuszczam, że zależy to również od tego, jak często je edytujesz. Wiele osób je ustawia i zapomina, w ten sposób 400 byłoby bezpieczniejszych przed innymi i własnymi działaniami; w razie potrzeby zmieniając na 600. Jeśli jest to część twojego przepływu pracy i twojego ssh-savy, być może bardziej przeszkodą byłoby ciągłe zmienianie uprawnień.
vol7ron

99

Korzystając z Cygwin w Windows 8.1, należy uruchomić polecenie:

Użytkownicy chgrp ~ / .ssh / id_rsa

Następnie można zastosować zamieszczone tutaj rozwiązanie, 400 lub 600 jest OK.

chmod 600 ~ / .ssh / id_rsa

Ref: http://vineetgupta.com/blog/cygwin-permissions-bug-on-windows-8


8
zależne od ustawień regionalnych. Musiałem uruchomić „chgrp Użytkownicy ~ / .ssh / id_rsa”, ponieważ „Użytkownicy” nie zignorowali żadnej takiej grupy.
Marcos

Też musiałem to zrobić. Mój katalog cygwin znajdował się w domyślnej lokalizacji ( C:\cygwin64), więc prawdopodobnie odziedziczył uprawnienia. Dziwne, że tak się nie stało na innych laptopach, które posiadałem.
Zach Thacker

3
@Marcos Dodałem odpowiedź, która działa niezależnie od ustawień regionalnych: stackoverflow.com/a/28647713/67013
thehouse

4
Windows 10. Używał tylko drugiego polecenia. Działa jak urok.
StalkAlex,

Należy pamiętać, że w przypadku instalacji w językach alternatywnych grupa „Użytkownicy” ma alternatywne identyfikatory.
John Rumpel

43

Rozwiązanie niezależne od ustawień regionalnych, które działa w systemie Windows 8.1 to:

chgrp 545 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa

GID 545 to specjalny identyfikator, który zawsze odnosi się do grupy „Użytkownicy”, nawet jeśli ustawienia narodowe używają innego słowa dla użytkowników.



24

AFAIK wartościami są:

700 dla ukrytego katalogu „.ssh”, w którym znajduje się plik klucza

600 dla pliku klucza „id_rsa”


19

Mam błąd w moim systemie Windows 10, więc ustawiłem uprawnienia w następujący sposób i działa.

Zezwolenie na id_rsa systemu Windows 10

Szczegółowo usuwaj innych użytkowników / grupy, dopóki nie będą mieć tylko „SYSTEM” i „Administratorzy”. Następnie dodaj do niego logowanie do systemu Windows tylko z uprawnieniami do odczytu.

Uwaga: id_rsaplik znajduje się w c:\users\<username>folderze.


Mam ten sam problem na Win-10. Na podstawie twoich wyjaśnień nie wyjaśnij, na co tak naprawdę pozwoliłeś, a czego odmówiłeś - mam „użytkowników” i „uwierzytelnionych użytkowników” oraz „Nie określonego użytkownika” jako opcje + System i Administratorzy. Poza tym nie mogłem rozgryźć cygwina - zainstalować lub używać. (?)
Sam-T

2
dla Win10 musisz przenieść swój klucz do domu użytkownika - działało to doskonale. Próbowałem podać pełną ścieżkę do klucza i zadzierać z uprawnieniami - nic nie działało.
Sam-T

@ Sam-T, jeśli nie widzisz swojego nazwiska na liście, możesz dodać, naciskając, Edit...a następnie naciśnij, Add...a następnie wpisz swoje imię w polu tekstowym"Enter the object names to select" a następnie naciśnij Check Namesprzycisk (i naciśnij OKi jeszcze raz OK), a następnie twoje imię i nazwisko powinno być wymienione w Securityzakładce
Supawat Pusavanno

Prawdopodobnie mogę dodać konkretną nazwę - zgodnie z twoimi instrukcjami. Ale moim głównym pytaniem było - jakie dokładne uprawnienia dla Odmów i Zezwól dla wszystkich . Tymczasem, jak wspomniano, udało mi się rozwiązać problem, po prostu dodając .pemdomyuser directory
Sam-T

15

Istnieje jeden wyjątek od wymogu uprawnień „0x00” dla klucza. Jeśli klucz jest własnością użytkownika root, a grupa należy do grupy, w której znajdują się użytkownicy, może to być „0440”, a każdy użytkownik w tej grupie może używać klucza.

Wierzę, że to zadziała z dowolnymi uprawnieniami w zestawie „0xx0”, ale nie przetestowałem każdej kombinacji z każdą wersją. Próbowałem 0660 z 5.3p1-84 na CentOS 6, a grupa nie jest podstawową grupą użytkownika, ale grupą dodatkową i działa dobrze.

Zwykle nie robi się tego w przypadku czyjegoś klucza osobistego, ale w przypadku klucza używanego do automatyzacji, w sytuacji, gdy nie chcesz, aby aplikacja mogła zepsuć się z kluczem.

Podobne zasady dotyczą ograniczeń katalogu .ssh.



11

W systemie Windows 10 chmod i chgrp cygwina nie były dla mnie wystarczające. Musiałem kliknąć prawym przyciskiem myszy plik -> Właściwości -> Bezpieczeństwo (karta) i usunąć wszystkich użytkowników i grupy oprócz mojego aktywnego użytkownika.


To jest jedyne rozwiązanie, które działa :) Dziękuję, że oszczędziłeś mój czas
Atul

Odkryłem, że po zrobieniu tego mogę również wykonać ssh z normalnego wiersza poleceń systemu Windows. Nie musisz używać Cygwin. Świetny!
Atul

8

To działało dla mnie (na Macu)

sudo chmod 600 path_to_your_key.pem 

następnie :

ssh -i path_to_your_key user@server_ip

Mam nadzieję, że to pomoże



4

Mam ten sam problem po migracji z innego komputera Mac. I to zablokowało połączenie github przez mój klucz.

Resetuję uprawnienia jak poniżej i teraz działa dobrze.

chmod 700 ~/.ssh     # (drwx------)
cd ~/.ssh            
chmod 644 *.pub      # (-rw-r--r--)
chmod 600 id_rsa     # (-rw-------)

4

Windows 10 ssh do Ubuntu EC2 błąd „uprawnienia są zbyt otwarte” na AWS

Miałem ten problem przy próbie ssh do instancji Ubuntu EC2 przy użyciu pliku .pem z AWS.

W systemie Windows działało to, gdy umieściłem ten klucz w utworzonym w folderze .ssh

C:\Users\USERNAME\.ssh\private_key

Aby zmienić ustawienia uprawnień w systemie Windows 10:

Ustawienia pliku> Bezpieczeństwo> Zaawansowane

Wyłącz dziedziczenie

Konwertuj odziedziczone uprawnienia na jawne uprawnienia

Usuń wszystkie wpisy uprawnień oprócz Administratorów

Można wtedy bezpiecznie połączyć.


4

Dla mnie (za pomocą podsystemu Ubuntu dla systemu Windows) komunikat o błędzie zmienił się na:

 Permissions 0555 for 'key.pem' are too open

po użyciu chmod 400. Okazuje się, że powodem było użycie roota jako domyślnego użytkownika.

Zmień to za pomocą cmd:

 ubuntu config --default-user your_username

3

Ciekawa wiadomość tutaj. Systemy operacyjne są wystarczająco inteligentne, aby odmawiać połączeń zdalnych, jeśli klucz prywatny jest zbyt otwarty. Rozumie ryzyko, że uprawnienia dla id_rsa są szeroko otwarte (odczyt, każdy może edytować).

{Można najpierw zmienić zamek, a następnie otworzyć go za pomocą kluczy, które już posiada}

cd ~/.ssh
chmod 400 id_rsa

Pracując na wielu serwerach (nieprodukcyjnych), większość z nas czuje potrzebę połączenia zdalnego serwera z ssh. Dobrym pomysłem jest posiadanie kodu poziomu aplikacji (może to być Java za pomocą jsch) w celu utworzenia zaufania ssh między serwerami. W ten sposób połączenie będzie bez hasła. Incase, perl jest zainstalowany - można również użyć modułu net ssh.


1

Ten błąd napotkałem podczas zabawy z Ansible. Zmieniłem uprawnienia klucza prywatnego na 600 , aby rozwiązać ten problem. I zadziałało!

chmod 600 .vagrant/machines/default/virtualbox/private_key

1

Próbowałem na poziomie 600 uprawnień dla mojego klucza prywatnego i zadziałało to dla mnie. chmod 600 privateKey [dev] $ ssh -i privateKey użytkownik @ ip działał

chmod 755 privateKey [dev] $ ssh -i privateKey użytkownik @ ip dawał następujący problem: Uprawnienia 0755 dla 'privateKey' są zbyt otwarte. Wymagane jest, aby pliki kluczy prywatnych NIE były dostępne dla innych. Ten klucz prywatny zostanie zignorowany. Załaduj klucz „privateKey”: złe uprawnienia


0
I have got the similar issue when i was trying to login to remote ftp server using public keys..        
To solve this issue initially i have done the following process
    Najpierw znajdź lokalizację kluczy publicznych, ponieważ podczas próby zalogowania się do ftp przy użyciu tego klucza publicznego. najpierw musimy utworzyć klucz i ustawić, aby ustawić te klucze na 600.
            Upewnij się, że jesteś we właściwej lokalizacji.
            krok 1:
            idź do właściwej lokalizacji
            krok 2:
            Po znalezieniu się we właściwej lokalizacji
 Komenda: 
     chmod 600 id_rsa

        This has solved my issue.


-2

dla Win10 musisz przenieść klucz do katalogu domowego użytkownika dla Linux-a, musisz przeskoczyć do 700 jak lub 600 itd.


dla Win10 musisz przenieść swój klucz do domu użytkownika - działało to doskonale. Próbowałem podać pełną ścieżkę do klucza i zadzierać z uprawnieniami - nie działało.
Sam-T
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.