Windows SSH: uprawnienia do „klucza prywatnego” są zbyt otwarte


100

Mam OpenSSH 7.6 zainstalowany w systemie Windows 7 do celów testowych. Klient i serwer SSH działają dobrze, dopóki nie spróbowałem uzyskać dostępu do jednego z moich urządzeń AWS EC2 z tego okna.

Wygląda na to, że muszę zmienić uprawnienia do pliku klucza prywatnego. Można to łatwo zrobić na Unix / Linux za pomocą chmodpolecenia.

Co z oknami?

private-key.ppm jest kopiowany bezpośrednio z AWS i myślę, że również pozwolenie.

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh ubuntu@192.168.0.1 -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private-key.ppk": bad permissions
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>
C:\>
C:\>ssh ubuntu@192.168.0.1 -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>

Czy próbowałeś zmodyfikować listę ACL?
Ignacio Vazquez-Abrams

1
Czy Twój klucz prywatny znajduje się w ścieżce katalogu głównego C: \? Rozumiem, dlaczego to narzeka, jak zwykle rzeczy w C: \ są dostępne dla wszystkich. Czy próbowałeś przenieść go do folderu, do którego masz dostęp tylko Ty jako użytkownik (np. C: \ Users \ nazwa użytkownika \ desktop) i sprawdź, czy ten komunikat nadal pojawia się?
Dariusz

@Darius, tak to jest. Kiedy kopiujesz plik z unix / linux do Windows, uprawnienie jest również kopiowane. Muszę to zmienić, ale nie jestem pewien, jak to zrobić w systemie Windows. Można to łatwo zrobić na unix / linux za pomocą komendy chmod.
Sabrina

@ IgnacioVazquez-Abrams, ACL? Jakiego rodzaju ACL?
Sabrina

1
@ Sabrina Albo używasz polecenia icacls, aby zmienić uprawnienia, albo po prostu kliknij prawym przyciskiem myszy klucz prywatny, wybierz Właściwości i sprawdź w zakładce „Bezpieczeństwo”. I upewnij się, że jest on dostępny tylko dla Ciebie / każdego, kto powinien mieć dostęp do klucza prywatnego. Jeśli „Użytkownicy” mają dostęp do odczytu - oznacza, że ​​każdy, kto ma dostęp do systemu, może odczytać ten klucz prywatny.
Dariusz

Odpowiedzi:


114

Zlokalizuj plik w Eksploratorze Windows, kliknij go prawym przyciskiem myszy, a następnie wybierz „Właściwości”. Przejdź do zakładki „Bezpieczeństwo” i kliknij „Zaawansowane”.

Zmień właściciela na siebie, wyłącz dziedziczenie i usuń wszystkie uprawnienia. Następnie daj sobie „pełną kontrolę” i zapisz uprawnienia. Teraz SSH nie będzie już narzekać na zbyt otwarte uprawnienia do plików.

Powinno to wyglądać następująco:

wprowadź opis zdjęcia tutaj


2
Chciałbym tylko dodać 1) Ta metoda działa na moim systemie Windows 10 ( 10.0.17134.191) w wersji Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42i ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4oraz 2) Dzięki! @iBug!
atreyu

JEŚLI plik klucza znajduje się na dysku USB / dysku flash, karta Zabezpieczenia nie jest dostępna!
Dylan B

@DylanB Dlaczego umieściłeś poświadczenia na dysku wymiennym? (W rzeczywistości ta karta jest dostępna tylko w systemach plików NTFS - możesz łatwo sformatować dysk do NTFS).
iBug

11
Właściwie to zrobiłem i nadal narzeka, że ​​uprawnienia 0777 są zbyt otwarte.
Aaron Bramson,

10
Dlaczego w Windowsie jest to takie trudne, czy ktoś może po prostu dodać opcję polecenia --ignore-głupia-reguła?
Liam Mitchell,

21

Klucze muszą być dostępne tylko dla użytkownika, dla którego są przeznaczone, a nie dla żadnego innego konta, usługi lub grupy.

  • GUI:
    • [Plik] Właściwości - Bezpieczeństwo - Zaawansowane
      1. Ustaw właściciela na użytkownika klucza
      2. Usuń wszystkich użytkowników, grupy i usługi, z wyjątkiem użytkownika klucza , w obszarze Wpisy uprawnień
      3. Ustaw użytkownika klucza na Pełna kontrola


  • CLI:

    :: Set Variable ::
    set key="C:\Path\to\key"
    
    :: Remove Inheritance ::
    cmd /c icacls %key% /c /t /inheritance:d
    
    :: Set Ownership to Owner ::
    cmd /c icacls %key% /c /t /grant %username%:F
    
    :: Remove All Users, except for Owner ::
    cmd /c icacls %key%  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    :: Verify ::
    cmd /c icacls %key%
    

Co jeśli właściciel jest faktycznie grupą? W moim przypadku mam plik, network servicewięc Cygwin uważa, że ​​pozwolenie to 0770 zamiast 0700.
hyspace

Plik musi być własnością użytkownika i grupy, a nie tylko grupy. Uprawnienia grupowe to trzeci ósemkowy [użytkownik jest drugi] w specyfikacji cztero ósemkowej, a klucze SSH nie mogą być dostępne dla grup ani dla innych osób
JW0914,

Tak jest w przypadku Uniksa. W systemie Windows network servicemoże posiadać plik i jest to grupa
hyspace

Cygwin zezwala na funkcjonalność POSIX API w systemie Windows, ale nadal działa zgodnie z zasadami natywnych programów opartych na UNIX (stąd 3 i 4 uprawnienia ósemkowe w konfiguracji UGO). Chociaż możesz otworzyć problem w GitHubie Win32-OpenSSH Microsoftu, ponieważ klucze SSH muszą być grupowe, a inne niedostępne , posiadanie własności w opisany sposób prawdopodobnie nie jest obsługiwane. Lepiej jest dostosować się do normy programu niż próbować skonfigurować go w [prawdopodobnie] nieobsługiwany sposób.
JW0914

1
to powinna być poprawna odpowiedź. Dzięki za opcje CLI. GUI zawsze jest do bani w przypadku systemu Windows.
shyammakwana.me

10

Oprócz odpowiedzi udzielonej przez ibug. Ponieważ używałem systemu Ubuntu w systemie Windows do uruchomienia polecenia ssh. To wciąż nie działało. Więc zrobiłem

sudo ssh ...

i wtedy zadziałało


sudonie powinien być wykorzystywany do otwierania sesji SSH, ponieważ stanowi to zagrożenie bezpieczeństwa. Jedynym czasem (przynajmniej, o którym wiem), że konto roota powinno zostać wykorzystane do otwarcia sesji SSH, jest w systemach dla jednego użytkownika (tj. Zwykle znajduje się w systemie operacyjnym routera [OpenWrt, DD-WRT itp.] I innych systemach wbudowanych ) . Klucze SSH muszą być dostępne tylko dla użytkownika, dla którego są, a nie dla żadnego innego konta, usługi ani grupy.
JW0914

@ JW0914 LOL Mam serwer Debiana dla jednego użytkownika, a jedynym użytkownikiem (loginem) jest root. Nie sądzę, aby dodatkowy użytkownik inny niż root był pożyteczny, ponieważ jest to mój osobisty serwer i loguję się tylko podczas wykonywania prac konserwacyjnych.
iBug

@ iBug Proszę ponownie przeczytać mój komentarz, ponieważ wygląda na to, że całkowicie przegapiłeś drugie zdanie ...
JW0914,

5

Miałem ten sam problem i wydaje się, że jest on związany z wersją SSH, którą prowadzisz.

Jeśli piszę

where ssh

Dostaję...

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe

Kiedy biegam ssh -Vw obu lokalizacjach, dostaję

OpenSSH_7.5p1, without OpenSSL
OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

...odpowiednio

Kiedy więc uruchamiam sshz katalogu git / bin, działa dobrze i nie narzeka na uprawnienia, ale uruchamia ten sam wiersz poleceń, używając poprzedniej instalacji SSH, wraca z tym.

Load key "t:\\mykeys\\rich-private.ppk": invalid format
banana@127.0.0.127: Permission denied (publickey).

ps. uprawnienia do pliku mają dla mnie pełny dostęp i nic więcej.


OpenSSH nie powinien być instalowany w katalogu Windows z wielu powodów, od bezpieczeństwa, aż do ogromnej niedogodności, jeśli trzeba naprawić uszkodzony katalog Windows za pomocą DISMlub za pomocą opcji Reset (która została ulepszona w celu wykorzystania katalogu WinSxS w porównaniu do powrotu do oryginału install.esd) .
JW0914

To mi pomogło, nigdy nie dostałem wersji Windows ssh do pracy w tym scenariuszu, tylko Git's :(
cudacoder

To była również poprawka dla mnie. Wygląda na to, że system Windows 10 Pro zawiera teraz gotową wersję openssh. Byłem zmuszony usunąć folder C: \ Windows \ System32 \ OpenSSH i dodać ssh.exe git do PATH.
Shukri Adams

To „naprawiło” to dla mnie, używając C: \ Program Files \ Git \ usr \ bin \ ssh.exe działa tak, jak C: \ Windows \ System32 \ OpenSSH \ ssh.exe nie działa
smartins

3

Potrzebujesz jsut 2 rzeczy:

1) Wyłącz dziedziczenie wprowadź opis zdjęcia tutaj

2) Konwertuj odziedziczone uprawnienia na uprawnienia jawne wprowadź opis zdjęcia tutaj

3) Usuń grupę użytkowników wprowadź opis zdjęcia tutaj

4) Skończysz, że użytkownicy nie będą mieli dostępu do prywatnych plików, powinno to wystarczyć, aby dodać id_rsa. wprowadź opis zdjęcia tutaj


2

Miałem podobny problem, ale byłem w pracy i nie mam możliwości zmiany uprawnień do plików na moim komputerze roboczym. Co musisz zrobić, to zainstalować WSL, a następnie skopiować klucz do ukrytego katalogu ssh w WSL:

cp <path to your key> ~/.ssh/<name of your key>

Teraz powinieneś być w stanie normalnie modyfikować uprawnienia.

sudo chmod 600 ~/.ssh/<your key's name>

Następnie ssh przy użyciu WSL:

ssh -i ~/.ssh/<name of your key> <username>@<ip address>


2

użyj poniżej polecenia na swoim klawiszu, to działa w systemie Windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"

1

Możesz użyć icacls w Windows zamiast chmod, aby dostosować uprawnienia do plików. Aby dać bieżącemu użytkownikowi uprawnienia do odczytu i usunąć wszystko inne,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"

0

To jest tylko skryptowa wersja odpowiedzi CLI @ JW0914, więc proszę go głosować przede wszystkim. Jest to także mój pierwszy skrypt PowerShell, więc sugestie są mile widziane.

# DO the following in powerhsell if not already done:
# Set-ExecutionPolicy RemoteSigned


# NOTE: edit the path in this command if needed
$sshFiles=Get-ChildItem -Path C:\DevContainerHome\.ssh -Force

$sshFiles | % {
  $key = $_
  & icacls $key /c /t /inheritance:d
  & icacls $key /c /t /grant %username%:F
  & icacls $key  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
}

# Verify:
$sshFiles | % {
  icacls $_
}


-1

Odpowiedź od iBug działa dobrze! Możesz to zrobić i pozbyć się tego problemu.

Ale jest kilka rzeczy, które należy usunąć, ponieważ napotkałem problemy podczas konfigurowania uprawnień i zajęło mi to kilka minut, aby znaleźć problem!

Po odpowiedzi iBuga usuniesz wszystkie uprawnienia, ale jak sam sobie ustawiasz uprawnienia Pełna kontrola? właśnie tam utknąłem, ponieważ nie wiedziałem, jak to zrobić.

Po wyłączeniu dziedziczenia będziesz mógł usunąć wszystkich dozwolonych użytkowników lub grupy.

Gdy to zrobisz,

Kliknij Addnastępnie kliknij Set a Principalnastępnie wprowadzić Systemi Administratorsi your email addreddw polu na dole a następnie kliknij check names.

Załaduje nazwę, jeśli użytkownik istnieje. Następnie kliknij OK> Typ Allow> Podstawowe uprawnienia Full Control>Okay

Spowoduje to skonfigurowanie uprawnienia Pełna kontrola dla SYSTEMU, administratorów i Twojego użytkownika.

Następnie spróbuj ssh używając tego klucza. To powinno być teraz rozwiązane.

Miałem ten sam problem i rozwiązałem go za pomocą tej metody. Jeśli istnieje jakikolwiek użytkownik lub grupa o takiej nazwie, załaduje to.

-Zrzuty ekranu-

Wpisy uprawnień Wybierz głównego / Wybierz użytkownika lub grupy

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.