dostęp tylko do tunelowania ssh

31

Czy można skonfigurować ssh (na systemie Linux), aby umożliwić dostęp tylko do tunelowania? Czy użytkownik może konfigurować tunele, ale nie może uzyskać plików powłoki / dostępu?

druga
źródło

Odpowiedzi:

42

Tak, po prostu użyj /bin/falsejako powłoki i poinstruuj użytkownika, aby rozpoczął proces tunelowania SSH bez wykonywania żadnych zdalnych poleceń (tj. -NFlagi dla OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host
hrabia
źródło
Um, jeśli użytkownik nie używa -N, ma dostęp do powłoki. To naprawdę nie rozwiązuje problemu i jest niebezpieczne.
mlissner
12
@mlissner: Nie, jeśli masz /bin/falsepowłokę, nie będziesz mieć dostępu do powłoki, ponieważ każda sesja logowania zostanie natychmiast zakończona.
Sven
10

W pliku użytkownika .ssh / Author_keys umieść coś takiego:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

Zasadniczo więc elementy sterujące byłyby przed kluczem publicznym ssh użytkownika oddzielonym spacją. W tym przykładzie połączenia wykorzystujące określony klucz publiczny będą mogły wykonywać przekierowanie portów SSH tylko na serwer MySQL 192.168.1.10 i serwer WWW 10.0.0.16 i nie będą miały przypisanej powłoki (no-pty). Pytasz konkretnie o opcję „no-pty”, ale inne mogą być również przydatne, jeśli użytkownik ma tunelować tylko do określonych serwerów.

Spójrz na stronę podręcznika dla sshd, aby uzyskać więcej opcji dla pliku autoryzowanych_kluczy .

Zauważ, że wrażenia użytkownika mogą wyglądać nieco dziwnie: kiedy ssh się pojawi, będzie wyglądało na to, że sesja się zawiesiła (ponieważ nie dostają pty). W porządku. Jeśli użytkownik określi przekierowanie portów, na przykład „-L3306: 192.168.1.10: 3306”, przekierowanie portów będzie nadal działać.

W każdym razie spróbuj.

cjc
źródło
6
To niebezpieczna rada ; no-ptynie uniemożliwia dostępu do powłoki, po prostu nie daje jej powłoki. Nie wyświetla monitu (tzn. „Wydaje się zawiesić”), ale nadal możesz wydawać polecenia w porządku. Potrzebujesz tej command="..."opcji, .ssh/authorized_keysjeśli chcesz ograniczyć dostęp do powłoki z tego miejsca.
Aleksi Torhamo
@AleksiTorhamo ma rację, ale to dopiero początek; musisz także ustawić powłokę na / usr / sbin / nologin lub / bin / false w / etc / passwd, aby całkowicie ograniczyć powłokę. Zredagowałem powyższy wpis, aby to odzwierciedlić, wraz z radą Aleksiego.
Jamieson Becker,
4

Daj użytkownikowi powłokę, która pozwala tylko na wylogowanie, np /bin/press_to_exit.sh

#! / bin / bash
czytaj -n 1 -p „Naciśnij dowolny klawisz, aby wyjść”

W ten sposób może pozostać zalogowany tak długo, jak chce, z aktywnymi tunelami, ale nie uruchamiać żadnych poleceń. Ctrl-czamyka połączenie.

Dzwoneczek
źródło
3
Myślę, że przynajmniej teoretycznie użytkownik będzie mógł nacisnąć CTRL + C we właściwym momencie (między wierszami 1 i 2) i skończyć z pełną powłoką bash.
andreas-h
2

Przypisz powłokę, która nie pozwala użytkownikowi się zalogować.

na przykład

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

uniemożliwiłoby im to otrzymanie zachęty powłoki i dałoby im 60-sekundowy limit czasu - jeśli przez 60 sekund nie ma aktywnego połączenia, to zakończy działanie i tym samym całkowicie je rozłączy (zwiększ liczbę zgodnie z wymaganiami).

Nie mogą również wykonać polecenia zdalnego, ponieważ powłoka im na to nie pozwala.

jrg
źródło
4
Większość instalacji Linuksa już ma coś do tego. / sbin / nologin lub / bin / false lub podobny.
Rory,
1
Co zrobiłby Ctrl-C w powyższym przykładzie?
Arjan,
Arjan: Ponieważ skrypt jest używany jako powłoka, Ctrl-C miałby taki sam efekt jak „ logout” na normalnym.
grawity
2
Właściwie podoba mi się odpowiedź Earla z opcją „-N”, ale jeśli chcesz przekazać swojemu użytkownikowi pomocną, przyjazną i pouczającą wiadomość - i powstrzymać go przed opuszczaniem połączeń SSH w dowolnym miejscu - niestandardowy skrypt jest miły i jasny co robi
jrg
2
@jrg Ta dyskusja jest stara i być może zmieniłeś zdanie :) Ale IMHO niebezpiecznie jest wymyślić ręcznie wykonane skrypty powłoki. Jest już /sbin/nologin, który można dostosować za pomocą przyjaznej dla użytkownika wiadomości w /etc/nologin.txt.
dr01
0

Moim rozwiązaniem jest zapewnienie użytkownikowi, który może tylko tunelować, bez interaktywnej powłoki , ustawienia tej powłoki w / etc / passwd na / usr / bin / tunnel_shell .

Wystarczy utworzyć plik wykonywalny / usr / bin / tunnel_shell za pomocą nieskończonej pętli .

Dodatkowo skorzystaj z opcji AllowGroupsi Match Group.

W pełni wyjaśnione tutaj: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/

Daniel W.
źródło
2
Użytkownik może w jakiś sposób wyjść z pliku wykonywalnego i uciec od powłoki. Czy jesteś całkowicie pewien, że Twój plik wykonywalny nie pozwoli na to?
dr01
2
@ dr01 Szczerze mówiąc, nie jestem pewien, czy jest to w 100% bezpieczne. Wydaje mi się, że kiedy wyjdziesz z pliku wykonywalnego, sesja SSH również się kończy. Zbadam to więcej i mogę tu skomentować ponownie.
Daniel W.