====== 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
someIncorrectPassword
Uwaga: 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 &''
++++