W poprzednim wpisie przedstawiłem zalety stworzenia własnego serwera plików przy użyciu SSH, dzięki czemu możesz uzyskać dostęp do swoich plików z każdego miejsca na ziemi przy użyciu internetu. Tym razem postaram się opisać krok po kroku jak stworzyć działającą konfigurację, dzięki której uzyskasz wcześniej wspomnianą przeze mnie funkcjonalność oraz będziesz mógł cieszyć się dostępem do własnych plików w chmurze. Starałem się dobrze opisać każdy z kroków, dlatego tutorial ten nie należy do najkrótszych. A więc do dzieła …
Ustawianie portu nasłuchiwania SSH
W celach bezpieczeństwa, zdefiniuj nowy port, który będzie używany do nasłuchiwania przychodzących połączeń SSH, przez komputer który będzie udostępniał zasoby (dla ułatwienia, komputer ten nazwę „serwer”). Na potrzeby niniejszego tutoriala wybrałem port 59490 i nazwę sshcustomport, jednak w celach własnego bezpieczeństwa wybierz inny port z puli 49152–65535.
Na początek zdefiniuj nowy port i jego nazwę w pliku /etc/services za pomocą np. nano, dodając na końcu wpis:
sshcustomport 59490/tcp # my ssh port
sshcustomport 59490/udp # my ssh port
W pliku /System/Library/LaunchDeamons/ssh.plist odszukaj wpis przedstawiony poniżej:
<key>SockServicesName</key>
<string>ssh</string>
zamień go na:
<key>SockServicesName</key>
<string>sshcustomport</string>
Aby system wykrył zmiany należy zrestartować komputer lub wymusić ponowne załadowanie tych plików przez system poprzez wpisanie kolejno dwóch poleceń w terminalu:
launchctl unload /System/Library/LaunchDaemons/ssh.plist
launchctl load /System/Library/LaunchDaemons/ssh.plist
Na tym etapie serwer SSH działa już na nowym porcie 59490. Serwer można włączyć w Preferencjach Systemowych -> Udostępnianie -> Zdalne logowanie. Po włączeniu tej opcji w oknie ustawień pojawi się komunikat podobny do poniższego:
Aby zalogować się zdalnie na tym komputerze, wpisz „ssh user@192.168.0.100”.
Na komputerze klienta, możesz przetestować czy zdalny dostęp działa poprawnie. Do tego posłuży powyższa informacja oraz wcześniej zdefiniowany nr portu, które należy wpisać w oknie terminala na komputerze klienckim (który będziesz używał do połączeń z serwerem) analogicznie do poniższego przykładu:
ssh user@192.168.0.100 -p 59490
Po podaniu hasła powinieneś uzyskać dostęp do serwera. Jeśli się udało, przejdź do następnego kroku.
Tworzenie kluczy RSA
Aby utworzyć nową parę kluczy, na komputerze klienta (inny niż serwer) należy w terminalu wpisać
ssh-keygen -t rsa
Komunikaty należy potwierdzać enterem. Na etapie podawania hasła należy podać długie, skomplikowane hasło, aby było trudne do złamania. Należy pamiętać, że od tego zależy bezpieczeństwo naszych plików. Kombinacja małych oraz dużych liter wraz z cyframi o długości minimum 12 znaków jest wystarczająca. Złamanie takiego klucza przy użyciu mocy komputerowej na poziomie kilku średniej jakości PC-tów zajmie lata, z czego wynika że naszym danym nic nie grozi.
Po stworzeniu klucza, w katalogu ~/.ssh powstały dwa pliki: klucz prywatny (id_rsa) oraz klucz publiczny (id_rsa.pub).
Kopiowanie kluczy na nasz serwer
Utworzony klucz publiczny należy skopiować na serwer do katalogu
~/.ssh/
Można to zrobić na dwa sposoby: używając pendrive’a lub poprzez konsole.
W przypadku tego drugiego, musisz mieć włączone Zdalne logowanie w Preferencjach Systemowych, co zapewne zrobiłeś przy testowaniu połączenia po pierwszym kroku. Następnie w konsoli na komputerze klienckim wpisz:
scp -P [ustalony wcześniej numer portu ssh] ~/.ssh/id_rsa.pub [login]@[adres ip lub serwer]:~/.ssh/id_rsa.pub
Przykładowe polecenie może wyglądać następująco:
scp -P 59490 ~/.ssh/id_rsa.pub user@192.168.0.100:~/.ssh/id_rsa.pub
Oczywiście do wysłania klucza możesz też skorzystać z aplikacji do graficznego zarządzania zdalnym połączeniem takich jak Transmit lub darmowy Cyberduck, które same wykryją udostępniany serwer SSH za pomocą usługi Bonjour i połączenie nastąpi automatycznie po wpisaniu poprawnych danych do konta.
Następnie na serwerze należy dodać skopiowany klucz publiczny do zautoryzowanych kluczy. W tym celu w terminalu na serwerze wprowadzamy:
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
Konfigurowanie serwera SSH
Na tym etapie wprowadzimy kilka zmian konfiguracyjnych dla serwera SSH, aby zwiększyć jego bezpieczeństwo.
Za pomocą terminala (na serwerze) przechodzimy do katalogu /etc
cd /etc
W kolejnych krokach, zmienisz ustawienia dla serwera SSH, dlatego wcześniej wykonaj kopię zapasową domyślnych ustawień za pomocą:
cp sshd_config ~/Desktop/sshd_config_backup
Po wykonaniu kopii zapasowej pliku sshd_config, otwieramy go za pomocą nano do edycji, wpisując w terminalu:
sudo nano sshd_config
Ponieważ edycja plików systemowych wymaga uprawnień administratora, system poprosi o podanie hasła administratora. Po zatwierdzeniu enterem naszego hasła powinien otworzyć się podany plik w edytorze nano w terminalu.
W sekcji # Authentication zamień:
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#RSAAuthentication yes
#PubkeyAuthentication yes
na
# Authentication:
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 2
RSAAuthentication yes
PubkeyAuthentication yes
Dzięki temu uzyskujemy następujące zabezpieczenia:
- ograniczenie czasu oczekiwania na zalogowanie do 2 minut,
- zablokowanie możliwości zalogowania się na konto root (konto z wszystkimi uprawnieniami w systemie),
- ograniczenie do 3 prób uwierzytelniania użytkownika,
- maksymalnie 2 jednoczesne połączenia z serwerem,
- uruchamiamy uwierzytelnianie za pomocą publicznego klucza RSA.
Następnie należy znaleźć i zamienić
#PasswordAuthentication no
na
PasswordAuthentication no
Dzięki temu uwierzytelnianie będzie możliwe tylko przy pomocy klucza, a nie za pomocą loginu i hasła, które są podatne na ataki typu brute-force.
Należy także zmienić
#ChallengeResponseAuthentication yes
na
ChallengeResponseAuthentication no
Testowanie połączenia
Na tym etapie powinno się udać zestawić połączenie wewnątrz sieci. Do tego celu na komputerze zdalnym logujemy się na serwer za pomocą terminala, wpisując:
ssh user@192.168.0.100 -p 59490
Tym razem zamiast prośby o podanie hasła, powinno pojawić się pytanie czy chcesz połączyć się z serwerem, używając powyższego certyfikatu. Jeśli po wpisaniu „yes” otrzymałeś dostęp do swojego konta, jesteś na dobrej drodze. Teraz jedynie pozostało zmienić ustawienia routera tak, aby pozwalał na połączenia przychodzące z zewnątrz.
Ustawienie routera
Niestety każdy router posiada inny interfejs graficzny i trudnym byłoby napisanie tutoriala dla każdego z nich. W kolejnych krokach przedstawię jak zestawić takie połączenie przy użyciu routera marki TP-LINK model WR743ND. W przypadku innych modeli routerów tego producenta schemat działania powinien być analogiczny.
Aby uzyskać dostęp do routera, wpisz adres IP routera w Twojej przeglądarce internetowej (np. Safari). Jeśli nie znasz tego adresu, jest on zapisany często na routerze od spodu wraz z loginem i hasłem lub możesz go znaleźć w Preferencje Systemowe -> Sieć, wybierz swój interfejs przez który się łączysz (np. wifi) i kliknij „Zaawansowane”. Tam w zakładce TCP/IP zobaczysz adres IP routera.
Po podaniu loginu i hasła uzyskasz dostęp do ustawień Twojego routera.
Następnie przejdź do
Forwarding -> Add New
Wypełnij kolejno pola wg poniższego schematu:
- port zdefiniowany dla SSH
- adres IP serwera
Po każdorazowym restarcie routera, każdemu urządzeniu przypisywany jest nowy adres IP za pomocą DHCP, co dzieje się niedeterministycznie. Dlatego warto przypisać stały adres IP do komputera co jest możliwe w oknie ustawień routera DHCP -> Address Reservation, gdzie paruje się numer MAC karty sieciowej oraz adres IP. Adres MAC karty sieciowej można sprawdzić wpisując w terminalu polecenie
ifconfig
Na wyświetlonej liście wszystkich dostępnych interfejsów znajdź ten którym łączysz się z internetem. Dla wifi, będzie to przeważnie en0. Numer podany przy pozycji ether to adres MAC karty sieciowej.
Podsumowanie
Do przesyłania plików polecam aplikacje Transmit oraz Cyberduck, które pozwalają wygodnie przeszukiwać i przesyłać pliki pomiędzy urządzeniami za pomocą intuicyjnego interfejsu graficznego. Nic nie stoi na przeszkodzie, aby dostęp do plików uzyskać z poziomu iPhone’a lub iPad’a. Do tego polecam aplikację Documents. Jeśli dotrwałeś aż do tego momentu i wszytko działa poprawnie – GRATULUJĘ!
Jeśli nie udało Ci się ustanowić połączenia, pisz w komentarzach, w miarę możliwości postaram się pomóc.