SSH Configuration Quick Start" Krzysztof Maj 4 stycznia 2002 roku Spis treści 1. Opcje konfiguracyjne pliku ssh config . . . . . . . . . . . . . . . . . . . . 2 1.1. Host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2. ForwardAgent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3. ForwardX11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4. RHostsAuthentication . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5. RHostsRSAAuthentication . . . . . . . . . . . . . . . . . . . . . . 3 1.6. RSARHostAuthentication . . . . . . . . . . . . . . . . . . . . . . . 3 1.7. PasswordAuthentication . . . . . . . . . . . . . . . . . . . . . . . . 3 1.8. FallBackToRsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.9. UseRsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.10. BatchMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.11. CheckHostIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.12. StrictHostChecking . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.13. IdentityFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.14. Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.15. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.16. Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.17. Przykład pliku ssh config . . . . . . . . . . . . . . . . . . . . . . . 4 2. Opcje konfiguracyjne pliku sshd config . . . . . . . . . . . . . . . . . . . 5 2.1. ListenAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. HostKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3. KeyRegenerationInterval . . . . . . . . . . . . . . . . . . . . . . . . 5 2.4. ServerKeyBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5. SyslogFacility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.6. LogLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.7. LoginGraceTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.8. PermitRootLogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.9. StrictModes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.10. RSAAuthentication . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.11. PubkeyAuthentication . . . . . . . . . . . . . . . . . . . . . . . . . 7 " Dotyczy OpenSSH 2.9.9p1, SSH protocols 1.5/2.0, OpenSSL 0x0090603f oraz Linux Mandrake 7.2. 1 2.12. PermitEmptyPassowrd . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.13. KeepAlive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.14. PrintLastLog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.15. X11Forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.16. AllowUsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.17. PrintMotd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.18. Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.19. Przykład pliku sshd config . . . . . . . . . . . . . . . . . . . . . . . 8 3. Zakończenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1. Opcje konfiguracyjne pliku ssh config Plik ten zwykle umieszczony jest w ścieżce/etc/ssh/ssh_config, ale tak z musu nie musi być. Gdzie zostanie on umieszczony określamy podczas kompilacji SSH. Odpowiedzialna jest za to opcja--sysconfdir=. Przykład opcji przekazywanych do skryptuconfigureOpenSSH: ./configure \ --prefix=/usr/local \ --sysconfdir=/etc/ssh \ --with-tcp-wrappers \ --with-pam \ --with-md5-passwords \ --with-ipv4-default \ --with-ssl-dir=/usr/local/openssl \ --with-ipv4-default Pamiętajmy, że używamy tutaj modułów PAM, a więc należy w pliku /etc/pam.d/sshd1 umieścić to, co ponieżej: #%PAM-1.0 auth required /lib/security/pam_pwdb.so shadow nodelay auth required /lib/security/pam_nologin.so account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so shadow md5 nullok use_authtok session required /lib/security/pam_pwdb.so session required /lib/security/pam_limits.so 1.1. Host Wprowadza odpowiednie restrykcje dla naszego hosta. Odpowiednie, zna- czy te które wprowadziliśmy poniżej w postaci dyrektyw. Dopuszczalne są parametry globalne w postaci znaku gwiazdki i wtedy odnoszą się do wszyst- kich komputerów. 1 Pisząc to korzystam z Linux Mandrake 7.2 2 1.2. ForwardAgent Wyznacza, czy połączenie do agenta uwierzytelniającego zastanie przeka- zane na odległą maszynę. Dopuszczalne opcje to yes lub no . Domyślnie jest no . 1.3. ForwardX11 Wyznacza, czy zdalne połączenia do serwera X11 zastaną automatycznie przekierowane przez bezpieczny kanał SSH i zmienną$DISPLAY. Domyślnie jest nie. 1.4. RHostsAuthentication Opcja dotycząca protokołu wersji pierszej. Zabrania ona lub pozwala na korzystanie z logowań przy wykorzystaniu plików.rhost. Wiele serwerów nie pozwala na tego typu uwierzytelnianie, ponieważ nie jest ono bezpieczne. My też zabrońmy takich praktyk. Domyślne ustawienie to yes , zmieńmy na no . 1.5. RHostsRSAAuthentication Dyrektywa dotycząca także protokołu wersji pierszej. Jej znaczenie jest takie samo jak wyżej, ale dla uwierzytelniania RSA. Domyślnie jest yes . 1.6. RSARHostAuthentication Tylko dla protokołu wersji pierszej. Określa, czy próbujemy logowania z użyciem RSA, czy nie. Takowe nastąpi, jeśli istnieją odpowiednie klucze lub agent uwierzytelniający jest uruchomiony. Domyślnie jest yes . 1.7. PasswordAuthentication Używamy logowania z hasłem oczywiście. Domyślnie jest yes . 1.8. FallBackToRsh Określa, czy jeśli zastaniemy odrzuceni przy próbie logowania z powodu błędu, np. jeśli demon sshd nie będzie uruchomiony, to czy automatycznie mają być użyte r-komendy (rsh). Domyślnie jest no i tak też zostawny. 1.9. UseRsh Podobnie jak wyżej. Określa, czy na naszym komputerku będą kiedykol- wiek wykorzystywane r-komendy (Brrr!). Ustawiamy na no . 1.10. BatchMode Wyłączamy tą opcją pytanie o hasło. Domyślnie jest no i tak zostawmy. Chyba, że korzystamy z jakiś plików wsadowym itp., to wtedy będziemy musieli ustawić na yes . 3 1.11. CheckHostIP Domyślnie jest yes i tak też zostawmy. Dyrektywa ta jest potrzebna ze względów bezpieczeństwa. Sprawdza adres IP hosta w pliku known_hosts. Pozwala wykryć ssh, czy taki adres się zmienił np. na skutek ataku na serwer DNS (DNS Spoofing). 1.12. StrictHostChecking Ważna z punktu bezpieczeństwa. Jeśli jest ustawiona na yes , to ssh nigdy nie doda kluczy hosta do plikuknown_hostsi odrzuci takie połą- czenie, którego klucze uległy zmianie. Jest to zabezpieczenie przed koniami trojańskimi. Może to być w pewnych przypadkach bardzo wkurzające, jeśli połączenia wykonywane są często. Klucze możemy dodawać ręcznie i wtedy zostaniemy o nie zapytani, ale pod warunkiem, że dyrektywę tą ustawimy na ask . Jeśli na własne ryzyko damy no to wszystkie nowe klucze będą automatycznie dodawane do plikuknown_hosts. Domyślnie jest ask , ale sugeruję ustawić na yes . 1.13. IdentityFile Określa, które pliki są używane przy uwierzytelnianiu przy użyciu kluczy RSA i DSA. Możliwe jest posiadanie kilku plków z takimi kluczami, wówczas sprawdzane są one sekwencyjnie. Przykład: IdentityFile ~/.ssh/identity IdentityFile ~/.ssh/id_dsa IdentityFile ~/.ssh/id_rsa 1.14. Port Coż, czyba nie ma wątpliwości. Domyślnie jest 22 i tak zostawiamy. 1.15. Protocol Określa protoków dla wersji ssh. Możliwe są ustawienia 1 i 2 oraz oba oddzielone przecinkiem. Domyślnie jest 2,1 , co oznacza, że najpierw pró- bujemy przy użyciu protokołu wersji 2., a jak ta nie jest osiągalna (saportowalna :-) ), to korzystamy z 1. 1.16. Cipher Określa rodzaj szyfrowania dla naszych sesji połączeniowych, ale tylko dla protokołu wersji 1. Nie wgłębiając się w szczegóły ustawmy na blowfish . 1.17. Przykład pliku ssh config Przykład typowej konfiguracji SSH. U mnie takowa działa z powodzeniem, jak odkryję coś ciekawego, to objaśnię. 4 Host * ForwardAgent no ForwardX11 no RhostsAuthentication no RhostsRSAAuthentication yes RSAAuthentication yes PasswordAuthentication yes FallBackToRsh no UseRsh no BatchMode no CheckHostIP yes StrictHostKeyChecking yes IdentityFile ~/.ssh/identity IdentityFile ~/.ssh/id_dsa IdentityFile ~/.ssh/id_rsa Port 22 Protocol 2,1 Cipher blowfish EscapeChar ~ 2. Opcje konfiguracyjne pliku sshd config Nie będę opisywał tych, które występują także w opisywanym wcześniej plikussh_config. Skupimy się na nowo występujących. Oto one: 2.1. ListenAddress Określa lokalne adresy, na których sshd powinien słuchać. Domyślnie słu- cha na wszystkich lokalnych adresach. Możemy tu podać jako argument adres naszego komputera, na którym uruchamiany jest sshd. 2.2. HostKey Określa plik zawierający prywatne klucze hosta używane przez SSH proto- kół wersji 1 i 2. Należy podkreślić, że sshd odrzuci te klucze, których prawa dostępu są ogólnie możliwe. Możliwe jest posiadanie kilku kluczy. Dla protokołu wersji 1. używane są klucze rsa1, a dla wersji 2. dsa lub rsa. Przykład: HostKey /etc/ssh/ssh_host_key HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key 2.3. KeyRegenerationInterval Dotyczy protokołu SSH wersji 1. (ephemereal?) Klucz servera jest auto- matycznie regenorowany po określonej ilości sekund. Zamiarem tej regenara- cji jest niedopuszczenie do odszyfrowania przechwyconej sesji. Klucz nie jest 5 nigdzie przechowywany. Jeśli ustawimy 0, klucz nie będzie nigdy regenero- wany. Wartością domyślną jest 3600 sekund. Tak też możemy zostawić. 2.4. ServerKeyBits Definiuje liczbę efemeralnego klucza hosta, dla protokołu wersji 1. War- tością minimalną jest 512 bitów, a domyślną 768. My ustawiamy na przykład na 1024 bity. 2.5. SyslogFacility Sposób w jaki będą logowane poczyniania demona sshd. Mozliwe wartości to: " DAEMON, " USER, " AUTH, " LOCAL0, " LOCAL1, " LOCAL2, " LOCAL3, " i tak do LOCAL7. Domyślnie jest AUTH (autoryzacja) i tak zastawiamy. 2.6. LogLevel Ustawia stopnień gadatliwości demona sshd przy logowaniu komunika- tów z jego działania. Domyślnie jest INFO i tak zastawiamy, chyba że zależy nam na debuggingu, to można tymczasowo ustawić na DEBUG. Tyma- czowo, bo zagraża to prywatności użytkowników. 2.7. LoginGraceTime Server rozłączy się po podanym czasie, jeśli użytkownik nie zalogował się poprawnie. Jeśli damy zero, taki czas zostanie wyłączony. Domyślnie jest 600 sekund i tak zostawiamy. 2.8. PermitRootLogin Czy administrator może się zdalnie zalogować na serwer przy użyciu SSH. Domyślnie jest yes , sugeruję ustawić na no . 2.9. StrictModes Określa, czy sshd sprawdzi prawa dostępu i właściciela plików oraz kata- logu domowego ludka, który się loguje zanim pozwoli na zalogowanie. Do- myślnie jest yes i tak zostawmy. 2.10. RSAAuthentication Tylko dla protokołu wersji 1. Czy logowanie z użyciem RSA jest dopusz- czalne. Domyślnie jest yes i tak zostawiamy. 6 2.11. PubkeyAuthentication Tylko dla protokołu wersji 2. Określa, czy uwierzytelnianie z użyciem kluczy publicznych jest możliwe. Domyślnie jest yes i tak zostawiamy. 2.12. PermitEmptyPassowrd Jeśli logowanie przy użyciu haseł jest dostępne, to czy można się zalogo- wać na konta z pustym hasłem. Domyślnie jest no i tak zostawmy. 2.13. KeepAlive Ustala, czy w przypadku kiedy klient lub trasa do niego zdechnie, to czy serwer przerwie połączenie dowiadując się o tym natychmiast. Zapobiego to tworzeniu się tzw. użytkowników-duchów, procesów, które niepotrzebnie zabierają zasoby serwera. Domyślnie jest yes i tak zostawmy. 2.14. PrintLastLog Można się domyśleć po nazwie. Ja preferuję ciche logowania, szczególnie w przypadku SSH, więc ustawiam tę dyrektywę na no . 2.15. X11Forwarding Określa, czy dozwolone jest przekierowanie X Window. Domyślnie jest no . Nie zwiększa to bezpieczeństwa, bo użytkownić może użyć własnego sposobu przekierowania, ale jeśli takowego nie potrzebujemy, to dajmy tu jasno no . Przekierowanie takie jest domyślnie wyłączone, jeśli ustalona jest dyrektywa UseLogin. 2.16. AllowUsers Ważna opcja, można się tego domyśleć po nazwie. Określa użytkownika lub użytkowników, którzy mogą się logować. Odziela się ich przecinkiem. Można też podać wyrażenie postaciuser@host, wówczas użytkownik i host są sprawdzane odzielnie. Wpiszmy tu swoich ludków. 2.17. PrintMotd Domyślnie jest yes . Określa, czy po zalogowaniu czytana i wyświetalana jest zawartość pliku/etc/motd. 2.18. Subsystem Dotyczy tylko protokołu wersji 2. i określa podsystem, który może być użyty przy wykorzystaniu SSH. Najczęściej jest to sftp, ale domyślnie dyrek- tywa ta nie jest pisana musimy ją więc dopisać: Subsystem sftp /usr/local/libexec/sftp-server 7 2.19. Przykład pliku sshd config # This is ssh server systemwide configuration file. Port 22 Protocol 2,1 ListenAddress 192.168.1.1 HostKey /etc/ssh/ssh_host_key HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key KeyRegenerationInterval 3600 ServerKeyBits 1024 SyslogFacility AUTH LogLevel INFO LoginGraceTime 600 PermitRootLogin no StrictModes yes RSAAuthentication yes PubkeyAuthentication yes RhostsAuthentication no IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PasswordAuthentication yes PermitEmptyPasswords no KeepAlive yes PrintLastLog no X11Forwarding no PrintMotd yes AllowUsers mkrzych Subsystem sftp /usr/local/libexec/sftp-server 3. Zakończenie Przedstawiłem w tym docu krótkie wprowadzenie w opcje konfiguracyjne Secure Shella. Po resztę odsyłam do podręcznika ekranowego tegoż oprogra- mowania oraz na stronęwww.openssh.com. Sukcesów i zadowolenia z Linux-a Krzysztof Siwy Maj 8