Jak ograniczyć przekazywanie portów SSH, nie zaprzeczając temu?

5

Załóżmy, że utworzyłem konto, którego powłoka logowania jest w rzeczywistości skryptem, który nie zezwala na logowanie interaktywne i pozwala tylko na bardzo ograniczony, określony zestaw poleceń do zdalnego wykonania.

Niemniej jednak sshumożliwia użytkownikowi tego konta przekazywanie portów, co jest dziurą.

Teraz chodzi o to, że tak naprawdę chcę, aby to konto skonfigurowało określoną konfigurację przekierowania portów po ustanowieniu sshsesji. Ale musi być niemożliwe skonfigurowanie dowolnego przekierowania portów.

(Jest to dopuszczalne rozwiązanie, jeśli dozwolona konfiguracja przekierowania portów jest bezwarunkowo ustanowiona w ramach każdej sesji).

Kaz
źródło
Jeśli nikt nie zgłosi się w ciągu kilku dni, zaakceptuję własną odpowiedź. I być może zacznij nad tym pracować.
Kaz.
Jeśli przez pewien czas będziesz go akceptować / otwierać, wówczas nie będziesz więcej uwagi. Niektórzy lubią spędzać weekend w innym miejscu niż SO :)
Sampo Sarrala,
Moją pierwotną odpowiedzią była proponowana łatka, ale istniejące funkcje OpenSSH wykonują to zadanie.
Kaz
Ups, to należy do błędu serwera, prawda! Łatwo zapomnieć, że „superużytkownik” nie oznacza tutaj „root” ani „sysadmin”.
Kaz

Odpowiedzi:

7

Okazuje się, że OpenSSH ma do tego funkcję, która ogranicza -Lstyl otwierania po stronie serwera. Ta funkcja jest dostępna na dwa sposoby.

  1. W pliku konfiguracyjnym serwera jest PermitOpendostępna opcja. Tej opcji można użyć do określenia hostów i portów, dla których można ustanowić przekazywanie. Tej opcji można użyć wewnątrz Matchbloku, więc może być ograniczona przez użytkownika, grupę lub nazwę hosta lub wzorzec adresu IP.

  2. W authorized_keyspliku opcje mogą być powiązane z określonym kluczem. Istnieje permitopenopcja, która działa podobnie do konfiguracji serwera.

Uwagi / ograniczenia:

  • Ta opcja AllowTcpForwardingwyłącza wszystkie przekazywanie w obu kierunkach, uniemożliwiając skonfigurowanie portów nasłuchiwania na serwerze, a także aktywne przekazywanie dalej.

  • Nie ma PermitOpenkontroli dostępu dla -Rpołączeń w stylu. To chyba w porządku. Oznacza to, że użytkownicy mogą sshotwierać różne nieuprzywilejowane porty do nasłuchiwania na serwerze. Problemem klienta jest połączenie z drugą stroną połączenia SSH. Jeśli ograniczymy przekazywanie w tym -Lkierunku, użytkownik nie będzie mógł korzystać z tych -Rportów (przynajmniej nie przez ssh, jeśli ten użytkownik nie będzie w stanie utworzyć arbitralnej sesji interaktywnej).

  • Wydaje się, że nie ma sposobu na utworzenie pustej listy dozwolonych otwarć, aby uniemożliwić użytkownikom nawiązywanie jakichkolwiek -Lstylowych połączeń. Jednak obejściem tego problemu jest użycie nieszkodliwej, nieistniejącej lub niemożliwej nazwy hosta, takiej jak pusty ciąg. Konkretnie, permitopen=":1234"załatwia sprawę.

Kaz
źródło
Ponieważ mogę żyć bez precyzyjnej kontroli dostępu -R, działa to dla mnie.
Kaz
0

Wydaje się, że nie ma sposobu na utworzenie pustej listy dozwolonych otwarć, aby uniemożliwić użytkownikom nawiązywanie jakichkolwiek połączeń w stylu -L. Jednak obejściem tego problemu jest użycie nieszkodliwej, nieistniejącej lub niemożliwej nazwy hosta, takiej jak pusty ciąg. Konkretnie, permopen = ": 1234" załatwia sprawę.

Argument „dowolny” może być wykorzystany do usunięcia wszystkich ograniczeń i umożliwienia wszelkich żądań przekazania. Argument „brak” może być wykorzystany do zablokowania wszystkich żądań przekazania. Domyślnie wszystkie żądania przekierowania portów są dozwolone.

Shkrid
źródło