<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.if.pw.edu.pl/~lgraczyk/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.if.pw.edu.pl/~lgraczyk/wiki/index.php?action=history&amp;feed=atom&amp;title=SK_Zadanie_6_Remote</id>
		<title>SK Zadanie 6 Remote - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.if.pw.edu.pl/~lgraczyk/wiki/index.php?action=history&amp;feed=atom&amp;title=SK_Zadanie_6_Remote"/>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~lgraczyk/wiki/index.php?title=SK_Zadanie_6_Remote&amp;action=history"/>
		<updated>2026-04-05T01:07:46Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.if.pw.edu.pl/~lgraczyk/wiki/index.php?title=SK_Zadanie_6_Remote&amp;diff=2627&amp;oldid=prev</id>
		<title>Lgraczyk: Created page with &quot;  {| align=&quot;right&quot;   | __TOC__   |}  ==Zadania== === Zadanie 1 === Wyłączyć logowanie &lt;code&gt;ssh&lt;/code&gt; dla użytkownika &lt;code&gt;foo&lt;/code&gt;.  ===Zadanie 2=== Zalogować się z ma...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~lgraczyk/wiki/index.php?title=SK_Zadanie_6_Remote&amp;diff=2627&amp;oldid=prev"/>
				<updated>2020-12-08T12:51:39Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;  {| align=&amp;quot;right&amp;quot;   | __TOC__   |}  ==Zadania== === Zadanie 1 === Wyłączyć logowanie &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; dla użytkownika &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.  ===Zadanie 2=== Zalogować się z ma...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;  {| align=&amp;quot;right&amp;quot;&lt;br /&gt;
  | __TOC__&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
=== Zadanie 1 ===&lt;br /&gt;
Wyłączyć logowanie &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; dla użytkownika &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
Zalogować się z maszyny matki na maszynę wirtualną za pomocą '''klucza ssh'''.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 3.A===&lt;br /&gt;
Proszę zainstalować firewall '''ufw''', a następnie korzystając z informacji z &amp;lt;code&amp;gt;man ufw&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Wyłączyć możliwość wykonywania połączeń przychodzących&lt;br /&gt;
* Zweryfikować brak możliwości podłączania się z serwerem ssh&lt;br /&gt;
* Umożliwić łączenie się na port 22 (port SSH)&lt;br /&gt;
* Zweryfikować że ssh działa&lt;br /&gt;
* Wyłączyć firewall ufw&lt;br /&gt;
&lt;br /&gt;
===Zadanie 3.B===&lt;br /&gt;
* Wykonać zadanie 3.A przy użyciu graficznej wersji '''gufw'''&lt;br /&gt;
* Użyć programu '''netstat''' do monitorowania obecnych połączeń. Następnie włączyć nasłuch na porcie 4444 (przy użyciu &amp;lt;code&amp;gt;ncat&amp;lt;/code&amp;gt;) i połączyć się przy użyciu programu &amp;lt;code&amp;gt;telnet&amp;lt;/code&amp;gt;. Przy użyciu ponownie wywołanego programu &amp;lt;code&amp;gt;netstat&amp;lt;/code&amp;gt; należy zaobserwować nowe połączenie.&lt;br /&gt;
* Użyć komendy '''last''' by zaobserwować ostatnie logowania.&lt;br /&gt;
* Włączyć logowanie w ufw, wykonać nieudaną próbę połączenia, obejrzeć plik z logami.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zmiana interfejsu sieciowego==&lt;br /&gt;
Włączamy maszynę wirtualną w trybie '''bridged adapter'''. Przypomnienie:&lt;br /&gt;
&lt;br /&gt;
Settings -&amp;gt; Network Adapters -&amp;gt; Attached to: Bridged Adapter, eth0&lt;br /&gt;
&lt;br /&gt;
==Serwer ssh==&lt;br /&gt;
Protokół SSH poznaliśmy po krótce już na poprzednich zajęciach. Jest to szyfrowany protokół komunikacyjny w architekturze klient-serwer, działający w niezabezpieczonej sieci, który umożliwia:&lt;br /&gt;
&lt;br /&gt;
* bezpieczną zdalną pracę na komputerze podłączonym do Internetu,&lt;br /&gt;
* bezpieczne logowanie za pomocą pary kryptograficznych kluczy,&lt;br /&gt;
* tworzenie bezpiecznych tuneli pozwalających np. na omijanie niektórych firewalli.&lt;br /&gt;
&lt;br /&gt;
===Konfiguracja serwera ssh===&lt;br /&gt;
Konfiguracja serwera ssh mieści się w katalogu &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt; ('''Uwaga!''' Proszę nie pomylić z &amp;lt;code&amp;gt;ssh_config&amp;lt;/code&amp;gt; — bez &amp;quot;d&amp;quot; w środku).&lt;br /&gt;
&lt;br /&gt;
Aby zapoznać się z możliwościami konfiguracyjnymi ssh za pomocą tego pliku, proszę przejrzeć stronę manuala: &amp;lt;code&amp;gt;man sshd_config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 1 ===&lt;br /&gt;
Proszę wyłączyć możliwość logowania ssh dla użytkownika &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Po wykonaniu zmian należy zrestartować serwer wykonując polecenie:&lt;br /&gt;
&lt;br /&gt;
 sudo service ssh restart&lt;br /&gt;
&lt;br /&gt;
==Logowanie za pomocą klucza==&lt;br /&gt;
&lt;br /&gt;
===Logowanie na zdalną maszynę===&lt;br /&gt;
Logowanie na zdalną maszynę:&lt;br /&gt;
&lt;br /&gt;
 ssh username@numer_ip&lt;br /&gt;
Przy pierwszym logowaniu pojawi się ostrzeżenie:&lt;br /&gt;
&lt;br /&gt;
 The server's host key is not cached in the registry. You&lt;br /&gt;
 have no guarantee that the server is the computer you&lt;br /&gt;
 think it is.&lt;br /&gt;
 The server's rsa2 key fingerprint is:&lt;br /&gt;
 ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:&lt;br /&gt;
Mówi ono że:&lt;br /&gt;
&lt;br /&gt;
Nie łączyliście się z tym serwerem do tej pory i sygnatura tego serwera nie znajduje się w rejestrze.&lt;br /&gt;
&lt;br /&gt;
System SSH nie ma pewności, że połączyliście się z właściwym serwerem - w pliku &amp;lt;code&amp;gt;~/.ssh/known_hosts&amp;lt;/code&amp;gt; zabrakło sygnatury serwera. W takim wypadku komputer zwykle pyta (1) czy na pewno chcemy się połączyć z nieznanym serwerem, oraz (2) czy od razu dodać jego sygnaturę do rejestru. Oczywiście, gdybyśmy ręcznie dodali sygnaturę serwera do tego pliku, ssh nie wyświetliłby tego komentarza nawet za pierwszym połączeniem.&lt;br /&gt;
&lt;br /&gt;
===Działanie logowania za pomocą klucza===&lt;br /&gt;
'''Kryptografia klucza publicznego''' (nazywana również '''kryptografią asymetryczną''') to rodzaj kryptografii, w którym używa się zestawów dwu lub więcej powiązanych ze sobą kluczy, umożliwiających wykonywanie różnych czynności kryptograficznych. Jeden z kluczy może być udostępniony publicznie bez utraty bezpieczeństwa danych zabezpieczanych tym kryptosystemem ([https://pl.wikipedia.org/wiki/Kryptografia_klucza_publicznego więcej]).&lt;br /&gt;
&lt;br /&gt;
Klient generuje parę kluczy, zwanych publicznym i prywatnym, klucze te (bez wchodzenia w szczegóły) pozwalają na wykonanie kryptograficznego podpisu wiadomości. Klucz prywatny pozwala na podpisanie wiadomości, a publiczny na weryfikację poprawności podpisu i jej otwarcie. Mając klucz publiczny nie da się ani podpisać wiadomości, ani uzyskać klucza prywatnego.&lt;br /&gt;
&lt;br /&gt;
Procedura logowania za pomocą klucza wygląda następująco:&lt;br /&gt;
* Klient i serwer negocjują połączenie 1-do-1, którego nikt nie może podsłuchać.&lt;br /&gt;
* Serwer udowadnia klientowi, że jest tym serwerem do którego klient chciał się połączyć (patrz wyżej).&lt;br /&gt;
* Klient wysyłą prośbę: chcę zalogować się jako użytkownik &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Serwer odpowiada: w takim razie podpisz mi ten losowy ciąg znaków.&lt;br /&gt;
* Klient swoim kluczem prywatnym podpisuje ów losowy ciąg znaków.&lt;br /&gt;
* Serwer znajduje odpowiedni klucz publiczny i sprawdza poprawność podpisu.&lt;br /&gt;
&lt;br /&gt;
Klucze mają następujące przewagi nad hasłami:&lt;br /&gt;
&lt;br /&gt;
* Bezpieczne hasła są bardzo trudne do zapamiętania (długi ciąg losowych znaków). Klucze są zapamiętywane przez komputer, więc mogą zawierać więcej “losowości”.&lt;br /&gt;
* Hasło jest wysyłane w tekście jawnym na serwer, w autoryzacji kluczem publicznym w komunikacji nie pojawiają się dane, które pozwalają na autoryzację.&lt;br /&gt;
* Hasło trzeba podawać przy każdym kolejnym logowaniu. Istnieją natomiast dość standardowe metody bezpiecznego przechowywania kluczy ssh w pamięci RAM komputera (hasło do klucza podaje się tylko raz przy logowaniu na komputer; my na zajęciach będziemy używali kluczy bez hasła)&lt;br /&gt;
&lt;br /&gt;
===Instalacja swojego klucza na serwerze===&lt;br /&gt;
By wygenerować klucz należy wykonać polecenie &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt;, można podać hasło do klucza, ale na dziś sobie to darujemy. Polecenie to wykonujemy na komputerze, z którego chcemy się zalogować.&lt;br /&gt;
&lt;br /&gt;
Polecenie &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; tworzy dwa pliki:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; — zawiera klucz publiczny&lt;br /&gt;
* &amp;lt;code&amp;gt;~/.ssh/id_rsa &amp;lt;/code&amp;gt;— zawiera klucz prywatny&lt;br /&gt;
Plik &amp;lt;code&amp;gt;$HOME/.ssh/authorized_keys&amp;lt;/code&amp;gt; zawiera listę kluczy publicznych, po jednym w każdej linii. Klucz prywatny powiązany z dowolnym z tych kluczy publicznych może posłużyć do logowania się do serwera.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Uwaga!''' Zarówno folder &amp;lt;code&amp;gt;$HOME/.ssh/&amp;lt;/code&amp;gt; oraz pliki w środku muszą mieć uprawnienia do czytania '''tylko''' przez użytnownika (np. &amp;lt;code&amp;gt;chmod 600&amp;lt;/code&amp;gt;).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Uwaga 2!''' Postępowanie:&lt;br /&gt;
* Generujemy na komputerze, z którego się logujemy, klucz prywatny i publiczny. &lt;br /&gt;
* Klucz publiczny wysyłamy na komputer, na który chcemy się zalogować (do folderu &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt;). &lt;br /&gt;
* Na komputerze, na który chcemy sie zalogować kopiujemy zawartość klucza publicznego do pliku &amp;lt;code&amp;gt;~/.ssh/authorized_keys&amp;lt;/code&amp;gt;. &lt;br /&gt;
* Przed pierwszym logowaniem, w nowszych wersjach Ubuntu, musimy również na maszynie, z której się będziemy logować, wykonać polecenie &amp;lt;code&amp;gt;ssh-add&amp;lt;/code&amp;gt; (komenda dodaje dane klucza prywatnego do specjalnego agenta ssh, &amp;lt;code&amp;gt;ssh-agent&amp;lt;/code&amp;gt;, który zarządza kluczami prywatnymi na danej maszynie).&lt;br /&gt;
&lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
Zalogować się z maszyny wirtualnej na maszynę-matkę za pomocą klucza ssh.&lt;br /&gt;
&lt;br /&gt;
==Instalacja firewalla==&lt;br /&gt;
Firewall to oprogramowanie pozwalające na kontrolę pakietów IP przetwarzanych przez maszynę.&lt;br /&gt;
&lt;br /&gt;
W systemach GNU/Linux firewall jest częścią jądra systemu i można go kontrolować za pomocą polecenia &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt;. Polecenie to jednak nie jest bardzo przyjazne, więc poznamy bardzo prostą nakładkę na &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt;, którą jes program &amp;lt;code&amp;gt;ufw&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 3.A===&lt;br /&gt;
Proszę zainstalować program &amp;lt;code&amp;gt;ufw&amp;lt;/code&amp;gt;, a następnie korzystając z informacji z &amp;lt;code&amp;gt;man ufw&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Wyłączyć możliwość wykonywania połączeń przychodzących&lt;br /&gt;
* Zweryfikować brak możliwości podłączania się z serwerem ssh&lt;br /&gt;
* Umożliwić łączenie się na port 22 (port SSH)&lt;br /&gt;
* Zweryfikować że ssh działa&lt;br /&gt;
* Wyłączyć firewall.&lt;br /&gt;
&lt;br /&gt;
==Firewall i bezpieczeństwo - ciąg dalszy==&lt;br /&gt;
* &amp;lt;code&amp;gt;gufw&amp;lt;/code&amp;gt; - graficzna nakładna na ufw&lt;br /&gt;
* &amp;lt;code&amp;gt;ufw logging on&amp;lt;/code&amp;gt; - zablokowane próby nawiązania połączenia będą zapisywane w katalogu &amp;lt;code&amp;gt;/var/log/&amp;lt;/code&amp;gt; w plikach o nazwach zaczynających się od &amp;lt;code&amp;gt;ufw&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;netstat&amp;lt;/code&amp;gt; - rozbudowany program wyświetlajacy informacje o połączeniach sieciowych&lt;br /&gt;
** Należy wypróbować: &amp;lt;code&amp;gt;netstat -atunp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Active Internet connections (servers and established)&lt;br /&gt;
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name&lt;br /&gt;
'''Port 53''': DNS&lt;br /&gt;
 tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               &lt;br /&gt;
'''Port 22''': SSH&lt;br /&gt;
 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               &lt;br /&gt;
'''Port 631''': IPP (Internet Printing Protocol)&lt;br /&gt;
 tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -               &lt;br /&gt;
 tcp6       0      0 :::22                   :::*                    LISTEN      -               &lt;br /&gt;
 tcp6       0      0 ::1:631                 :::*                    LISTEN      -               &lt;br /&gt;
 udp        0      0 0.0.0.0:5353            0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 0.0.0.0:59398           0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 127.0.1.1:53            0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 0.0.0.0:68              0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 194.29.175.249:123      0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 127.0.0.1:123           0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 0.0.0.0:123             0.0.0.0:*                           -               &lt;br /&gt;
 udp        0      0 0.0.0.0:631             0.0.0.0:*                           -               &lt;br /&gt;
 udp6       0      0 :::5353                 :::*                                -               &lt;br /&gt;
 udp6       0      0 :::51224                :::*                                -               &lt;br /&gt;
 udp6       0      0 fe80::15a4:1221:4cd:123 :::*                                -               &lt;br /&gt;
 udp6       0      0 ::1:123                 :::*                                -               &lt;br /&gt;
 udp6       0      0 :::123                  :::*                                -    &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;last&amp;lt;/code&amp;gt; - komenda wyświetlająca informacje o ostatnich logowaniach na komputer/serwer&lt;br /&gt;
&lt;br /&gt;
===Zadanie 3.B===&lt;br /&gt;
* Wykonać zadanie 3.A przy użyciu &amp;lt;code&amp;gt;gufw&amp;lt;/code&amp;gt;&lt;br /&gt;
* Użyć &amp;lt;code&amp;gt;netstat&amp;lt;/code&amp;gt; do monitorowania obecnych połączeń. Następnie włączyć nasłuch na porcie 4444 (przy użyciu &amp;lt;code&amp;gt;ncat&amp;lt;/code&amp;gt;) i połączyć się przy użyciu programu &amp;lt;code&amp;gt;telnet&amp;lt;/code&amp;gt;. Przy użyciu ponownie wywołanego programu &amp;lt;code&amp;gt;netstat&amp;lt;/code&amp;gt; należy zaobserwować nowe połączenie.&lt;br /&gt;
* Użyć komendy &amp;lt;code&amp;gt;last&amp;lt;/code&amp;gt; by zaobserwować ostatnie logowania.&lt;br /&gt;
* Włączyć logowanie w &amp;lt;code&amp;gt;ufw&amp;lt;/code&amp;gt;, wykonać nieudaną próbę połączenia, obejrzeć plik z logami.&lt;/div&gt;</summary>
		<author><name>Lgraczyk</name></author>	</entry>

	</feed>