====== Oprogramowanie do zdalnych zajęć ====== ++++ Programowanie niskopoziomowe | Do zajęć zdalnych koniecznie musicie mieć do dyspozycji: * system operacyjny GNU/Linux * dowolny współczesny kompilator C/C+''''+: * polecane: [[https://gcc.gnu.org/|GCC]] w wersji ≥9 lub [[https://clang.llvm.org/|Clang]] w wersji ≥ 9 * uwaga: proszę sprawdzić działanie kompilatora na [[https://gitlab.cs.put.poznan.pl/jkonczak/sk2_examples/raw/master/l4/l4_z1_lambda.cpp|przykładowym pliku]] - plik powinien się kompilować komendą ''c+''''+ -pthread --std=c+''''+2a l4_z1_lambda.cpp''((jeśli kompilator narzeka na ''--std=c+''''+2a'', to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z ''--std=c+''''+1z'', to na potrzeby zajęć wystarczy)) * IDE lub edytor tekstowy do pisania kodu: * przykładowe IDE: [[https://www.kdevelop.org/|kdevelop]], [[https://www.qt.io/product/development-tools|QtCreator]], [[https://www.jetbrains.com/clion/|CLion]] (wersja dla edukacji jest bezpłatna) * przykładowo edytory: VS Code, Geany, Code::Blocks, CodeLite * narzędzia: * do uruchamiania prostych połączeń sieciowych: ''nc''/''ncat''/''netcat''/''socat'' * do wyświetlania istniejących połączeń: ''netstat''/''ss'' Dodatkowo warto zainstalować: * strony podręcznika systemowego (''man'') * narzędzia: * ''gdb'' (debugger) * ''valgrind'' (narzędzie znajdujące błędy zarządzania pamięcią) * ''strace'' (narzędzie wyświetlające i tłumaczące wywołania systemowe) * ''wireshark'' * wygodny emulator terminala ++++ **Qt**\\ Proszę zainstalować program qtcreator oraz podstawowe biblioteki deweloperskie, dokumentację i narzędzia frameworku Qt (w wersji 5.15.X lub 6.X). \\ W zdecydowanej większości dystrybucji Linuksa pakiety są dostępne w domyślnych repozytoriach (np. dla Ubuntu: ''qtbase5-dev qt5-doc qtcreator''). \\ Proszę przetestować czy środowisko działa poprawnie kompilując przykładowy kod: {{:sk2:l6_z2_template.tar.xz|}}. \\ Uwaga: dla Qt6 trzeba w CMakeLists.txt zmienić wszystkie wystąpienia ''Qt5'' na ''Qt6'' **Java**\\ Proszę zainstalować JDK i swoje ulubione IDE do Javy (np. IntelliJ / Eclipse / NetBeans). ++++ DNS | Proszę zainstalować programy ''dig'', ''host'' i ''bind''. \\ W zależności od dystrybucji, programy mogą być w paczkach o nazwach: bind bind9 bind-tools bind9-tools bind-dnsutils bind9-dnsutils bind-utils bind9-utils Do sprawdzenia czy programy są dostępne, proszę użyć poleceń: named -v named-checkconf -v dig -v host -V //Uwaga:// named i named-checkconf mogą być dostępne tylko z roota (tzn. są w katalogu ''/usr/sbin'', który normalnie nie jest w ''$PATH'' zwykłego użytkownika) Proszę sprawdzić czy bind nie jest uruchamiany automatycznie. \\ Jeśli polecenie: ps -FA | egrep '(named|bind)' znajdzie działający program ''bind'' lub ''named'', proszę go wyłączyć, właściwą dla swojego systemu operacyjnego komendą, zapewne przez jedną z poniższych: systemctl stop bind && systemctl disable bind systemctl stop bind9 && systemctl disable bind9 systemctl stop named && systemctl disable named /etc/init.d/bind stop && rc-update delete bind /etc/init.d/bind9 stop && rc-update delete bind9 /etc/init.d/named stop && rc-update delete named ++++ ++++ Kształtowanie ruchu | Na zajęciach będziecie pracować na komputerach w laboratorium na Politechnice. Przed zajęciami proszę: * zalogować się na ''polluks''a (tzn. sprawdzić, czy pamiętacie hasło) * zalogować się z polluksa na wybrany z komputerów laboratoryjnych (lab-net-[1-16] lub lab-sec-[1-16]): * swoim kontem ''inf…'', a jeśli się nie da, to * na konto ''root'' ze standardowym hasłem * jeśli zalogowaliście się swoim kontem do VLABa, proszę wybrać ''Start local Linux'' i zalogować się po ok. 2 minutach ponownie (na konto root) \\ __Uwaga:__ jeśli na komputerze jest uruchomiona jakaś maszyna wirtualna, może to oznaczać że ktoś pracuje (np. w ramach innych zdalnych zajęć) na tym komputerach, więc proszę wtedy nie wybierać lokalnego linuksa i spróbować później / na innej maszynie. * uruchomić ponownie (''reboot'') maszynę po sprawdzeniu że udało Wam się zalogować na konto roota. Zachęcam do przypomnienia sobie jak korzysta się z SSH i narzędzi takich jak screen i tmux ([[https://github.com/zolrath/wemux|wemux]]), korzystając np. [[sk1:ssh_screen_tmux|z tych materiałów]] (materiały były przedstawione [[https://emeeting.put.poznan.pl/playback/presentation/2.0/playback.html?meetingId=74d51a8d51ffe7dd7d66f8eaa6ffeffc725c5060-1585652713066|na początku jednych z zajęć z SK1]]).\\ Na tych zajęciach będę sprawdzać stan Waszej pracy logując się na maszyny w laboratorium, więc nie musicie udostępniać mi ekranu. Zachęcam do używania screen/tmux żebym np. mógł wskazać Wam gdzie jest błąd w komendach które wpisujecie a są traktowane jako niepoprawne. ++++ ++++ IPv6 | Podobnie jak na zajęciach z kształtowania ruchu (powyżej) w trakcie zajęć będą wykorzystywane komputery w laboratoriach. W trakcie tych zajęć będzie konieczność uruchomienia programu Wireshark na komputerach w laboratorium. \\ Dlatego proszę o przygotowanie się do używania programu wireshark, np: * wykorzystując X11 forwarding w SSH (opisane [[sk1:ssh_screen_tmux|tutaj]]); \\ jeśli korzystacie z Windowsa, X11 forwardig wymaga uruchomionego serwera [[https://en.wikipedia.org/wiki/X_Window_System|X]], np. [[https://sourceforge.net/projects/vcxsrv/|vcxsrv]] \\ Uwaga: z powodu [[https://github.com/PowerShell/Win32-OpenSSH/issues/1088|błędu]] w windowsowej wersji ssh może być konieczne posiadanie pliku ''C:\dev\tty'', np. tworzonego przez: mkdir \dev echo x > \dev\tty a następnie ustawienie zmiennej DISPLAY na odpowiednią wartość przed wywołaniem ssh, np. w cmd.exe: \\ ''set DISPLAY=localhost:0'' * uruchomienie serwera VNC (lub rdesktop) na maszynie w laboratorium i połączenie się z tym serwerem, wykorzystując [[https://instrukcje.put.poznan.pl/category/vpn/|VPN politechniki]] lub tunelowanie po SSH (opisane skrótowo [[sk1:ssh_screen_tmux|tutaj]]). ++++ ++++ WLAN 1 | Podobnie jak na zajęciach z IPv6 (powyżej) w trakcie zajęć będą wykorzystywane komputery w laboratoriach. \\ Możliwe (zależy od tempa zajęć) że w trakcie zajęć będzie też potrzeba uruchomić Wireshark na komputerach w laboratorium. ++++ ++++ WLAN 2 | Zajęcia będą odbywać się na komputerach w laboratorium. \\ W zależności od ilości osób może wystąpić konieczność pracy w grupach – sprzętowych AP jest ograniczona ilość. Dlatego proszę o przećwiczenie pracy w jednej konsoli przez kilka osób (np. używając tmux/wemux lub współdzieląc ekran). ++++ ++++ WLAN 3 | Zajęcia będą odbywać się na komputerach w laboratorium. \\ Będziecie konfigurować sprzęt firmy MikroTik, który najłatwiej konfiguruje się z użyciem przeglądarki pod domyślnym dla sprzętu tej firmy adresem IP 192.168.88.1.\\ Dla wygody i sprawnego działania interfejsu konfiguracyjnego zalecam skonfigurować przekierowanie portów po SSH. Możecie albo: * użyć //local port forwarding// do przekazywania danych z połączeń nawiązywanych na podany port lokalnego komputera przez połączenie SSH do wskazanego adresu po stronie serwera SSH, np. przez: ssh -Y -J infXXX@polluks.cs.put.poznan.pl -L 8080:192.168.88.1:80 root@lab-sec-X Wtedy połączenie pod ''http://localhost:8080/'' z przeglądarki internetowej spowoduje nawiązanie połączenia z serwera ssh do adresu 192.168.88.1:80 i przekazywanie danych między tymi połączeniami, a więc wyświetlenie interfejsu konfiguracyjnego sprzętu. * użyć //dynamic port forwarding// do uruchomienia proxy SOCKS tunelujących połączenia na drugą stronę połączenia SSH i skonfigurować połączenie przeglądarki z siecią tak by używało tego proxy. Przykładowa komenda ssh: ssh -Y -J infXXX@polluks.cs.put.poznan.pl -D 8080 root@lab-sec-X Przykładowa instrukcja jak używać takiego proxy jest tutaj: https://linuxize.com/post/how-to-setup-ssh-socks-tunnel-for-private-browsing/ ++++ ====== Udostępnianie widoku swojego pulpitu ====== Proszę wybrać __jedną__ metodę na udostępnianie mi podglądu kodu który piszecie. ===== Metoda #1: Udostępnienie VNC prowadzącemu (Linuks) ===== ==== Skrócona instrukcja ==== Instrukcja skrócona (dla osób które chcą gotowe polecenia i nie chce im się czytać dalej): - zainstaluj openvpn, x11vnc i vncviewer - wykonaj: wget http://www.cs.put.poznan.pl/jkonczak/pub/sk2/sk2-vpn-ca.crt sudo openvpn --dev tap --client --ca sk2-vpn-ca.crt --auth-user-pass --daemon --remote ipv4.jprofesorek.mooo.com x11vnc -quiet -nopw -forever -display :0 & disown sleep 5 ip -4 addr show dev tap0 - sprawdź z drugiego komputera czy po połączeniu go identycznymi poleceniami do VPNa możesz zobaczyć swój ekran:vncviewer ==== Pełna Instrukcja ==== === Krok 1: dołączenie do VPNa === W trakcie zajęć wykorzystywany będzie OpenVPN. Należy zainstalować odpowiednią paczkę (zwykle o nazwie ''openvpn'') w systemie z którego będzie udostępniany ekran. //Uwaga:// VPN jest skonfigurowany tak, by była łączność między wszystkimi podłączonym osobami, co będzie wykorzystywane w trakcie zajęć, ale niesie za sobą dość oczywiste konsekwencje bezpieczeństwa. Do uruchomienia VPNa potrzebny jest: * plik CA: sk2-vpn-ca.crt, * adres: ''ipv4.jprofesorek.mooo.com'', * informacja że VPN pracuje na warstwie 2 modelu ISO/OSI, tzn. ''device tap'' * (port i protokół domyślne - 1194/udp) * nazwa użytkownika i hasło, przekazane innym kanałem przez prowadzącego. \\ Nazwę użytkownika i hasło można dla wygody wpisać do pliku o nieskomplikowanym formacie: theExampleUsername someIncorrectPasswordUwaga: plik z hasłem musi mieć uprawnienia zabraniające odczyt komukolwiek poza bieżącym użytkownikiem (do ustawienia uprawnień można użyć np. ''chmod go-rwx userPass.txt'') Polecenie uruchamiające VPNa, należy je uruchamiać z __roota__ (**wybierz jedno**): * Wersja 1 - wszystko w linii poleceń: openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com Uwaga 1: można pominąć podawanie pliku ''/somewhere/userPass.txt'', wtedy program pyta o nazwę użytkownika / hasło. \\ Uwaga 2: można dodać opcję ''--daemon'', która przenosi program w tło. Bez tej opcji program openvpn zajmuje konsolę (a zamknięcie okna z konsolą przerywa połączenie). * Wersja 2 - przygotuj plik konfiguracyjny: client remote ipv4.jprofesorek.mooo.com dev tap ca /somewhere/sk2-vpn-ca.crt auth-user-pass /somewhere/userPass.txt #daemon następnie uruchom polecenie: openvpn --config sk2-vpn.ovpn * Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. ''network-manager-openvpn-gnome''). \\ Uwaga: poza przeklikaniem wymienionych wyżej ustawień konieczne jest wyłączenie dodawnia domyślnej bramy przez VPN: \\ ''IPv4 options'' / ''Routes…'' / ''Use this connection only for resources on its network'' \\ Można to też zmienić z konsoli: ''nmcli c modify ipv4.never-default true'' **Sprawdzenie czy wszystko poszło dobrze:** po wykonaniu wybranej z komend, w wynikach komendy ''ip address'' powinien pojawić się interfejs ''tap0'' z adresem IP z sieci 10.0.9.0/24. Dodatkowo powinna działać komenda ''ping 10.0.9.1''. Dla zainteresowanych [[sk2:vpn_serwer_dla_zajec|konfiguracja serwera]] === Krok 2: uruchomienie VNC === Przykładowe polecenie używa serwer [[https://en.wikipedia.org/wiki/X11vnc|x11vnc]] aby udostępnić bieżącą sesję graficzną. \\ Możecie oczywiście użyć dowolnego innego serwera VNC, np. [[https://tigervnc.org/|TigerVNC]], który pozwala zarówno udostępnić bieżącą sesję (np. ''x0vncserver --SecurityTypes None'') jak i stworzyć nową wirtualną sesję Xów (bez konieczności wykorzystania Xvfb). Udostępnienie całej sesji graficznej: x11vnc -forever -display :0 & disown W powyższym poleceniu ''& disown'' wrzuca program w tło i odłącza program od bieżącego terminala. Oczywiście normalnie VNC pozwala na kontrolę myszy i klawiatury. W ''x11vnc'' można dodać opcję ''-viewonly'' żeby pozwolić tylko na podglądanie ekranu. \\ Inne przydatne opcje to ''-quiet'' która zmniejsza gadatliwość standardowego wyjścia i ''-nopw'' która pomija komunikat że serwer nie jest chroniony hasłem. Można poeksperymentować z udostępnieniem części ekranu (poniższe polecenia wymagają zainstalowania ''xwininfo'' do wyboru okna). \\ Udostępnienie jednego okna (nie udostępnia innych okien, np. oknien dialogowych czy okien menu): \\ ''x11vnc -forever -id pick -connect :0'' \\ Udostępnienie obszar jednego okna (uwaga: jeśli je coś zasłoni, x11vnc przesyła to co je zasłoniło): \\ ''x11vnc -forever -sid pick -connect :0'' \\ Udostępnienie jednej aplikacji (uwaga: u mnie nie działało prawidłowo): \\ ''x11vnc -appshare -id pick -connect :0'' Aby sprawdzić czy VNC działa prawidłowo, należy spróbować połączyć się do (z innego komputera) np. poleceniem vncviewer **Po uruchomieniu VPN i VNC należy na początku zajęć przesłać do prowadzącego swój adres IP z sieci 10.0.9.0/24.** ===== Metoda #1: Udostępnienie VNC prowadzącemu (Windows) ===== Do zajęć z Qt / Javy można korzystać z Windowsa, stąd krótka instrukcja jak uruchomić VPN+VNC pod Windowsem. === OpenVPN === Należy zainstalować openvpn: https://openvpn.net/community-downloads/ \\ Nie udało mi się (ale za bardzo nie próbowałem) skorzystać z GUI, stąd proponuję z __uruchomionego jako administrator__ cmd.exe lub powershella wykonać odpowiednią komendę: \\ "C:\Program Files\OpenVPN\bin\openvpn.exe" … Argumenty dla komendy wyglądają jak w Linuksie. ++++ Przykładowe screeny: | {{:sk2:win-vpn-1.png|}}\\ {{:sk2:win-vpn-2.png|}}\\ NB: plik z certyfikatem ''sk2-vpn-ca.crt'' nazywa się tutaj ''sk2-vpn-ca.cer'', bo MS Edge "wie lepiej" jakie ściągany plik powinien mieć rozszerzenie.\\ {{:sk2:win-vpn-3.png|}} ++++ === VNC === Przykładowy i dość bezproblemowy serwer VNC to [[https://www.tightvnc.com/download.php|TightVNC]]. \\ Inne popularne serwery VNC to np. [[https://archive.realvnc.com/download/open/|RealVNC]] czy [[https://tigervnc.org/|TigerVNC]]. \\ W każdym przypadku proszę o niewymaganie hasła (ewentualnie podanie hasła prowadzącemu). ++++ Przykładowy screen: | {{:sk2:win-vnc.png|}} ++++ ===== Metoda #2: Wtyczka 'Live Share' w VS code (tylko zajęcia z programowania C/C++) ===== ++++ Ten sposób nie nadaje się do tematów innych niż 5-10 (od "Wstęp do BSD sockets" do "Dobre praktyki w programowaniu") | Ta metoda jest prostsza do skonfigurowania, ale nie pozwala ona mi widzieć terminala, co utrudnia mi pomaganie w razie problemów z/podczas uruchomienia programów. Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia [[https://visualstudio.microsoft.com/pl/services/live-share/|Live Share]]. - pobrać i zainstalować VS Code, - zainstalować wtyczkę Live Share (menu view/extensions), - zalogować się, np. kontem Microsoft ([[https://instrukcje.put.poznan.pl/microsoft-office365-tworzenie-konta/]]), - wybrać 'live share' (1), wystartować współdzielenie (2), wybrać 'invite' (3) i przekazać link prowadzącemu (numery odnoszą się do ilustracji poniżej) - po pojawieniu się prośby o dołączenie osoby, zaakceptować tę prośbę. {{:sk2:vscode_ls.png|}} **Uwaga**: Osoby korzystające z tej metody powinny do zajęć 1 i 2 z BSD sockets: * uruchomić u siebie usługę daytime na TCP i UDP * lub wykonać z roota polecenie zastępujące daytime, np: \\ ''socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &'' ++++