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:
GCC w wersji ≥9 lub
Clang w wersji ≥ 9
uwaga: proszę sprawdzić działanie kompilatora na
przykładowym pliku - plik powinien się kompilować komendą
c+
+ -pthread --std=c+
+2a l4_z1_lambda.cpp
1)
IDE lub edytor tekstowy do pisania kodu:
narzędzia:
Dodatkowo warto zainstalować:
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: 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 (wemux), korzystając np. z tych materiałów (materiały były przedstawione 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
tutaj);
jeśli korzystacie z Windowsa, X11 forwardig wymaga uruchomionego serwera
X, np.
vcxsrv
Uwaga: z powodu
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
VPN politechniki lub tunelowanie po SSH (opisane skrótowo
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 <ip_komputera>
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:
-
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:
- userPass.txt
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:
- sk2-vpn.ovpn
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 <nazwa_połączenia> 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 konfiguracja serwera
Krok 2: uruchomienie VNC
Przykładowe polecenie używa serwer x11vnc aby udostępnić bieżącą sesję graficzną.
Możecie oczywiście użyć dowolnego innego serwera VNC, np. 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 <ip lub nazwa domenowa>
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:
VNC
Przykładowy i dość bezproblemowy serwer VNC to TightVNC.
Inne popularne serwery VNC to np. RealVNC czy TigerVNC.
W każdym przypadku proszę o niewymaganie hasła (ewentualnie podanie hasła prowadzącemu).
Przykładowy screen:
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 Live Share.
pobrać i zainstalować VS Code,
zainstalować wtyczkę Live Share (menu view/extensions),
-
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ę.
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 &