Pozwól użytkownikowi skonfigurować tunel SSH, ale nic więcej

Chciałbym zezwolić użytkownikowi na skonfigurowanie tunelu SSH do konkretnej maszyny na określonym porcie (powiedzmy 5000), ale chcę ograniczyć tego użytkownika tak bardzo, jak to możliwe. (Uwierzytelnianie odbywa się za pomocą public/private keypair).

Wiem, że muszę edytować odpowiednie ~/.plik SSH / authorized_keys, ale nie jestem pewien dokładnie, jaką zawartość tam umieścić (poza kluczem publicznym).

 91
Author: Lorin Hochstein, 2008-08-11

10 answers

Na Ubuntu 11.10, odkryłem, że mogę blokować polecenia ssh, wysyłane z i bez-T oraz blokować kopiowanie scp, pozwalając jednocześnie na przekierowanie portów.

W szczególności mam serwer redis na" somehost " przypisany do localhost: 6379, który chcę bezpiecznie udostępnić przez tunele ssh innym hostom, które mają plik kluczowy i będą ssh z:

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost

Spowoduje to, że redis-server, "localhost" port 6379 na "somehost" pojawi się lokalnie na komputerze wykonującym polecenie ssh, przerobionym do portu" localhost " 16379.

Na zdalnym "somehost" jest to, czego użyłem do authorized_keys:

cat .ssh/authorized_keys   (portions redacted)

no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost

No-pty potknie większość prób ssh, które chcą otworzyć terminal.

Permitopen wyjaśnia, jakie porty mogą być przekazywane, w tym przypadku port 6379 Port redis-server, który chciałem przekazać.

The command="/bin / echo do-not-send-commands" Echo back "do-not-send-commands" jeśli ktoś lub coś udaje się wysłać polecenia do hosta przez ssh - T lub inaczej.

Z najnowszego Ubuntu man sshd, authorized_keys / command jest opisane w następujący sposób:

Command= " polecenie" Określa, że polecenie jest wykonywane za każdym razem, gdy ten klucz jest używany do uwierzytelniania. Polecenie dostarczone przez użytkownika (jeśli istnieje) jest ignorowane.

Próby użycia bezpiecznego kopiowania plików scp również nie powiodą się z echem "nie wysyłaj-poleceń" znalazłem sftp również nie powiedzie się z tą konfiguracją.

Myślę, że sugestia ograniczona powłoka, przedstawiona w niektórych poprzednich odpowiedziach, jest również dobrym pomysłem. Zgadzam się również, że wszystko tutaj szczegółowo można określić, czytając "man sshd" i szukając w nim "authorized_keys"

 85
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-26 04:08:01

Prawdopodobnie będziesz chciał ustawić powłokę użytkownika na powłokę ograniczoną . Wyłącz zmienną PATH w pliku ~ / użytkownika.bashrc lub ~/.bash_profile i nie będą w stanie wykonać żadnych poleceń. Później, jeśli zdecydujesz, że chcesz zezwolić użytkownikom na wykonywanie ograniczonego zestawu poleceń, takich jak less lub tail, możesz skopiować dozwolone polecenia do oddzielnego katalogu (takiego jak /home/restricted-commands) i zaktualizować ścieżkę do tego katalogu.

 18
Author: Jason Day,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-12 00:16:38

Oprócz opcji authorized_keys, takiej jak no-X11-forwarding, istnieje dokładnie jedna, o którą prosisz: permitopen= "host: port". Korzystając z tej opcji, użytkownik może skonfigurować tunel tylko do określonego hosta i portu.

Szczegóły formatu pliku AUTHORIZED_KEYS znajdują się w Man sshd.

 17
Author: marbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 08:52:05

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

Wystarczy utworzyć plik wykonywalny /usr / bin / tunnel_shell z nieskończoną pętlą.

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

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

 8
Author: DanFromGermany,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-30 16:47:50

Jestem w stanie skonfigurować plik authorized_keys z kluczem publicznym do logowania do środka. Nie jestem pewien co do dodatkowych informacji, które muszę ogranicz to, co może robić to konto. Na przykład, Wiem, że mogę umieść polecenia takie jak:

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

Chcesz mieć linię w pliku authorized_keys, która wygląda tak.

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 
 3
Author: Zoredache,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-04 22:47:17

Jeśli chcesz zezwolić na dostęp tylko dla określonego polecenia-jak svn - możesz również określić to polecenie w pliku autoryzowanych kluczy:

command="svnserve -t",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding [KEY TYPE] [KEY] [KEY COMMENT]

Z http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks

 3
Author: joseph_morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-06 01:05:31

Tutaj masz fajny post, który uważam za przydatny: http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/

Nazwa użytkownika może zostać zmieniona na"sshtunnel".]}
useradd sshtunnel -m -d /home/sshtunnel -s /bin/rbash
passwd sshtunnel

Zauważ, że używamy rbash (restricted-bash), aby ograniczyć to, co użytkownik może zrobić: użytkownik nie może cd (zmienić katalogu) i nie może ustawić żadnych zmiennych środowiskowych.

Następnie edytujemy zmienną PATH użytkownika env w /home/sshtunnel/.profile na nic - sztuczka, która sprawi, że bash nie znaleziono żadnych poleceń do wykonania:

PATH=""

W końcu nie zezwalamy użytkownikowi na edytowanie dowolnych plików, ustawiając następujące uprawnienia:

chmod 555 /home/sshtunnel/
cd /home/sshtunnel/
chmod 444 .bash_logout .bashrc .profile
 3
Author: juanmf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 21:13:35

Zobacz ten post na temat uwierzytelniania kluczy publicznych .

Dwie główne rzeczy, o których musisz pamiętać, to:

  1. upewnij się, że chmod 700 ~/.ssh
  2. dołącza blok klucza publicznego do autoryzowanych kluczy
 0
Author: Michael Pryor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-28 18:50:38

Zrobiłem program w C który wygląda tak:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

Ustawiłem powłokę ograniczonego użytkownika do tego programu.

Nie sÄ ... dzÄ™, Ĺźe Ograniczony uĺźytkownik moĹźe wykonaÄ ‡ cokolwiek, nawet jeĹ "li zrobi to ssh server command, poniewaĹź komendy wykonywane sÄ ... przy uĹźyciu powĺ' oki, a ta powĺ ' oka niczego nie wykonuje.

 -1
Author: fangfufu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 04:21:15

Wygenerujesz klucz na komputerze użytkownika za pośrednictwem dowolnego klienta ssh, którego używają. na przykład szpachla ma narzędzie do tego. Wygeneruje zarówno klucz prywatny, jak i publiczny.

Zawartość wygenerowanego pliku klucza publicznego zostanie umieszczona w pliku authorized_keys.

Następnie musisz się upewnić, że klient ssh jest skonfigurowany do używania klucza prywatnego, który wygenerował klucz publiczny. Jest dość prosta, ale nieco inna w zależności od klient jest używany.

 -2
Author: palehorse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-11 18:04:01