Użytkownicy zalogowani na moim serwerze Linux powinni mieć możliwość ssh do określonego zdalnego komputera z domyślnym kontem. Uwierzytelnianie na zdalnym komputerze wykorzystuje klucz publiczny, więc na serwerze dostępny jest odpowiedni klucz prywatny.
Nie chcę, aby użytkownicy serwera mogli odczytać klucz prywatny. Zasadniczo fakt, że mają dostęp do serwera, pozwala im na poprawne połączenie ssh, a usunięcie ich z serwera powinno również uniemożliwić połączenie ze zdalnym komputerem.
Jak mogę pozwolić użytkownikom na otwieranie połączenia ssh, nie dając im dostępu do odczytu klucza prywatnego?
Moje dotychczasowe przemyślenia: oczywiście plik wykonywalny ssh musi być w stanie odczytać klucz prywatny, więc musi działać pod innym użytkownikiem na serwerze, który ma te prawa. Po ustanowieniu połączenia ssh mogę „przekazać” je użytkownikowi, aby mógł wprowadzać polecenia i wchodzić w interakcje ze zdalnym komputerem.
- Czy to dobre podejście?
- Jak powinienem wdrożyć forward?
- W jaki sposób użytkownik może zainicjować połączenie (to znaczy wykonanie ssh przez użytkownika, który ma uprawnienia do odczytu klucza)?
- Czy istnieje luka w zabezpieczeniach? - jeśli użytkownicy mogą wykonać ssh jako inny użytkownik, to czy mogą zrobić wszystko, co inny użytkownik może (w tym odczyt klucza prywatnego)?
źródło
~/.ssh/authorized_keys
pliku?Odpowiedzi:
To jeden z powodów, dla których
sudo
istnieje. Po prostu zezwól użytkownikom na uruchamianie 1 pojedynczego polecenia z tylko wstępnie zatwierdzonymi opcjami wiersza polecenia, a najbardziej oczywiste obejścia zostaną rozwiązane. na przykładustawia się
sudo
tak, aby wszyscy członkowie grupyusers
mogli uruchomić komendę ssh jako użytkownik some_uid bez podawania własnego hasła (lub hasła do konta some_uid), gdy działają:Usuń
NOPASSWD:
opcję wymuszania, aby użytkownicy wprowadzali własne hasła przed zalogowaniem się na zdalnym hoście.Prawdopodobnie skonfiguruj alias lub skrypt otoki dla wygody użytkowników, ponieważ
sudo
jest dość wybredny przy użyciu poprawnych argumentów.źródło
Wydaje się, że jest to dobry przypadek użycia dla uwierzytelniania opartego na hoście. Jest to metoda uwierzytelniania, w której SSH nie używa klucza indywidualnego użytkownika na komputerze lokalnym (w tym przypadku na serwerze) do uwierzytelnienia; zamiast tego używa prywatnego klucza hosta , tego,
/etc/ssh/
który jest przechowywany i który może być odczytany tylko przezroot
.Aby to skonfigurować, musisz utworzyć plik o nazwie
.shosts
na zdalnej maszynie, w katalogu osobistym użytkownika, który ma się logować (nie w~/.ssh
). Plik powinien mieć zawartośćgdzie
server-hostname
jest nazwą twojego serwera i+
jest dosłownym znakiem plus, który służy jako symbol wieloznaczny oznaczający „każdy użytkownik”.Musisz także upewnić się, że komputer zdalny może zweryfikować klucz hosta serwera, co oznacza, że klucz hosta serwera musi być wymieniony na jednym
/etc/ssh/ssh_known_hosts
lub~/.ssh/known_hosts
na komputerze zdalnym. Jeśli tak nie jest, możesz to skonfigurować, logując się na zdalnym komputerze i uruchamiającPo skonfigurowaniu tych kroków możesz całkowicie usunąć klucz prywatny z serwera, jeśli nie potrzebujesz go do niczego innego. (A jeśli to zrobisz, zawsze możesz ustawić, aby było czytelne tylko dla
root
czegoś.)Możesz także z łatwością robić takie rzeczy, jak zezwalanie lub odmawianie dostępu niektórym użytkownikom na zdalną maszynę. Zobacz strony podręcznika
ssh
ihosts.equiv
dla szczegółów.Jednym z problemów związanych z tą konfiguracją jest to, że użytkownicy logujący się na zdalnym komputerze mogą modyfikować
.shosts
. Nic nie mogą zrobić, co pozwoliłoby im zalogować się na zdalnym komputerze jako inny użytkownik, ale mogliby odciąć dostęp własny lub innych osobom do zdalnego komputera. Jeśli jest to problem, możesz być w stanie uczynić.shosts
tylko zapisywalnym przezroot
coś lub coś - nie jestem pewien, czy to działa, ale możesz spróbować i zobaczyć. (Inne metody, takie jak ta,sudo
są narażone na to samo ryzyko, ponieważ użytkownik zawsze może usunąć~/.ssh/authorized_keys
).źródło
sudo
opcja mogłaby być lepsza dla zamkniętego środowiska, ale ...