Muszę wykonać kopię zapasową serwera na moim komputerze za pomocą Duplicity:
duplicity /etc sftp://[email protected]//home/backup
Zanim będzie to możliwe, muszę zezwolić na dostęp bez hasła, wykonując następujące czynności:
$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh [email protected]
Moje pytanie brzmi: w jaki sposób mogę ograniczyć polecenie tylko do tego transferu SFTP w generowanym kluczu publicznym?
command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
A skoro korzystam z dynamicznego adresu IP, w jaki sposób mogę rozwiązać problem „brakującego znanego hosta” przy każdej zmianie adresu IP?
ssh
sftp
key-authentication
account-restrictions
Przepełnienie pytania
źródło
źródło
Odpowiedzi:
Można to zrobić na 2 sposoby.
1. - Ograniczanie przez sshd
Metoda ta polega na skonfigurowaniu funkcji SFTP w swoim demona SSH
sshd
. Jest to kontrolowane przez/etc/ssh/sshd_config
plik konfiguracyjny. UWAGA: Ograniczy to użytkownika,backup
aby zezwolono tylko na SFTP na serwerze.2. - Ograniczanie za pomocą uprawnionych kluczy
Ta metoda nie wymaga żadnych zmian w
sshd_config
pliku. Możesz ograniczyć użytkownika + klucz SSH do pojedynczego polecenia za pomocącommand=
funkcji, o której już wspomniałeś w swoim pytaniu. Sztuka polega na tym, jakie polecenie zawierasz. Możesz umieścić serwer SFTP w tymcommand=
wierszu, co ma taki sam efekt jak ustawienie serwera SFTP wsshd_config
pliku.UWAGA: jeśli użytkownik ma dostęp do zapisu
~/.ssh/authorized_keys
, może go odczytać i / lub zmodyfikować. Na przykład mogliby go pobrać, edytować i ponownie załadować, usuwając gocommmand=...
, zapewniając mu nieograniczony dostęp do poleceń, w tym powłoki. Jeśli użytkownik ma dostęp do zapisu~/.ssh
, może również po prostu odłączyć i ponownie utworzyć plik lubchmod
dostęp do zapisu. Istnieje wiele możliwych rozwiązań, takich jak odkładanie~/.ssh/authorized_keys
plików w miejsce, w którym nie można zapisać użytkownika, na przykład:Jest to trudniejsze, ale wykonalne przy użyciu
from=
funkcji wauthorized_keys
pliku. Tutaj mamy ograniczenie dostępu wyłącznie z przyjmującym,somehost.dyndns.org
.Dodatkowe ustawienia po
command=
są równie ważne, ponieważ jeszcze bardziej ograniczą użycie klucza SSH.podział funkcji
from='hostname1,hostname2,''
- Ogranicza dostęp z określonych wzorców adresów IP lub nazw hostówcommand='command'
- Uruchamia określone polecenie po uwierzytelnieniuno-pty
- Nie przydziela pty (nie pozwala na interaktywne logowanie)no-port-forwarding
- Nie zezwala na przekierowanie portówno-X11-forwarding
- użytkownik nie będzie w stanie usunąć wyświetlanych GUI X11no-agent-forwarding
- użytkownik nie będzie mógł przekazywać za pośrednictwem tego hosta do innych hostów wewnętrznychAby pozbyć się wiadomości o „brakujących znanych hostach”, możesz dodać tę opcję SSH do klienta, gdy łączy się w następujący sposób:
Zobacz stronę podręcznika,
ssh_config
aby uzyskać szczegółowe informacje o tym przełączniku.Ograniczanie powłoki użytkownika
W przypadku obu powyższych rozwiązań prawdopodobnie będziesz chciał zablokować
backup
użytkownika, ograniczając również jego powłokę w/etc/passwd
pliku. Zazwyczaj chcesz to ustawićscponly
, ale istnieją również inne możliwości. Zobacz pytania i odpowiedzi U&L zatytułowane: „ Potrzebujesz powłoki SCP? ”, Aby dowiedzieć się, jak to zrobić.Z opcji
/sbin/nologin
można także skorzystać, jeśli zdecydujesz się na użycie funkcji chrootsshd_config
zgodnie z opisem w punkcie 1 powyżej. Jeśli jednak zdecydujesz się użyć metody opisanej w punkcie 2 , prawdopodobnie będziesz musiał użyćscponly
innej powłoki powłoki użytkownika/etc/passwd
.BONUS - rozszerzenie nr 2 powyżej
Jeśli chcesz udostępnić zestaw poleceń dla tego użytkownika, możesz to zrobić. Utwórz skrypt w ten sposób
/home/backup/commands.sh
:Następnie ustaw
authorized_keys
plik tak:backup
Użytkownik może następnie uruchomić tych poleceń tak:Bibliografia
źródło
/sbin/nologin
uniemożliwi serwerowi dostęp do mojego komputera za pomocą SFTP. To próbowałem.known_hosts
pliku ssh . Marki podał prawidłowe rozwiązanie w swoim komentarzu.from
Parametr wauthorized_keys
pliku na komputerze C ogranicza tylko lokalizację, z której można podłączyć do S C/sbin/nologin
działa, jeśli użyję polecenia forceinternal-sftp
zamiast tego,/usr/libexec/openssh/sftp-server
który podałeś w certyfikacie. Sądzę, że są to dwa różne podsystemy. A utworzenie katalogu chroot dla tego pierwszego jest znacznie prostsze.Ograniczona powłoka
Musisz przypisać ograniczoną powłokę, taką jak scponly lub rssh.
Kiedy używasz scp lub sftp, łączysz się ze zdalną witryną przez ssh, a następnie zdalna powłoka wykonuje proces scp lub sftp. Potrzebujesz ograniczonej powłoki, która pozwala tylko scp lub sftp zablokować logowanie.
źródło