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?

Yannick Schall
źródło
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.
szybka zmiana
źródło
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

tanza9
źródło
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.

Dom
źródło
31

0600 jest tym, na czym ustawiony jest mój (i działa)

Devin Ceartas
źródło
24

AFAIK wartościami są:

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

600 dla pliku klucza „id_rsa”

ajaaskel
źródło
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.

Supawat Pusavanno
źródło
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.

syberghost
źródło
15

podaj 400 uprawnień, wykonaj poniższe polecenie

chmod 400 /Users/username/.ssh/id_rsa

wprowadź opis zdjęcia tutaj

Sujit Dhamale
źródło
świetny! To rozwiązało problem dla mnie. Dziękuję Ci!
Emanuela Colta
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.

Jared Beach
źródło
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

lansanalsm
źródło
5

co dla mnie zadziałało

chgrp Użytkownicy FOLDER

chmod 600 FOLDER

Jerome Ansia
źródło
chgrp: grupo inválido: «Użytkownicy»
Próbowałem, ale wciąż wyrzucam „nieprawidłową grupę: Użytkownicy”, dlaczego? za pomocą Windows 10, PowerShell
Jason Gol
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-------)
Jeff Gu Kang
źródło
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ć.

lm5050
źródło
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
Daniel Kettemann
źródło
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.

Piyush Baijal
źródło
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
vildhjarta
źródło
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

deepu kumar singh
źródło
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.
Ravi Teja Mureboina
źródło
-1

Używam VPC na EC2 i otrzymywałem te same komunikaty o błędach. Zauważyłem, że korzystam z publicznego DNS. Zmieniłem to na prywatny DNS i vola !! zadziałało...

użytkownik3195783
źródło
Amazon zaleca chmod 400 i korzystanie z publicznego DNS. Zapoznaj się z dokumentacją tutaj: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
ddri
-2

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

Fedulov Oleg
źródło
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