Dydaktyka:
FeedbackTo jest stara wersja strony!
Programowanie niskopoziomowe (zajęcia 1-6)
Do zajęć zdalnych koniecznie musicie mieć do dyspozycji:
+:c+
+ -pthread --std=c+
+2a l4_z1_lambda.cpp
1)nc
/ncat
/netcat
/socat
netstat
/ss
Dodatkowo warto zainstalować:
man
)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
Qt – 10.11 i 17.11 (grupy wtorkowe) / 25.11 i 2.12 (grupy środowe) (zajęcia 6 i 7)
Proszę zainstalować program qtcreator oraz podstawowe biblioteki deweloperskie, dokumentację i narzędzia frameworku Qt (w wersji 5).
W zdecydowanej większości dystrybucji Linuksa pakiety są dostępne w domyślnych repozytoriach (np. dla Ubuntu: qtbase5-dev qt5-doc qtcreator libclang-common-8-dev
2)).
Proszę przetestować czy środowisko działa poprawnie kompilując przykładowy kod: l6_z2_template.tar.xz.
Java - 24.11 (grupy wtorkowe) / 9.11 (grupy środowe) (zajęcia 8)
Proszę zainstalować JDK i swoje ulubione IDE do Javy (np. IntelliJ / Eclipse / NetBeans).
DNS - 1.12 (grupy wtorkowe) / 9.12 (grupy środowe) (zajęcia 9)
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 - 8.12 (grupy wtorkowe) / 23.12 (grupy środowe) (zajęcia 10)
Na zajęciach będziecie pracować na komputerach w laboratorium na Politechnice. Przed zajęciami proszę:
polluks
a (tzn. sprawdzić, czy pamiętacie hasło)inf…
, a jeśli się nie da, toroot
ze standardowym hasłemStart local Linux
i zalogować się po ok. 2 minutach ponownie (na konto root) 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 - 15.12 (grupy wtorkowe) / 13.01 (grupy środowe) (zajęcia 11)
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:
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
WLAN 1 - 22.12 (grupy wtorkowe) / 20.01 (grupy środowe) (zajęcia 12)
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 - 12.01 (grupy wtorkowe) / 27.01 (grupy środowe) (zajęcia 13)
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 - 19.01 (grupy wtorkowe)
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:
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.
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 ======
===== Metoda #1: Udostępnienie VNC prowadzącemu (Linuks) =====
# tl;dr (czyli dla osób które chcą gotowe polecenia i nie chce im się czytać dalej)
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
==== 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: <html><strong><a href="/jkonczak/pub/sk2/sk2-vpn-ca.crt">sk2-vpn-ca.crt</a></strong></html>,
* 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: <code - userPass.txt>theExampleUsername
someIncorrectPassword</code>Uwaga: plikz 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ń: <code>openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com</code> Uwaga 1: można pominąć nazwę 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: <code - sk2-vpn.ovpn>client
remote ipv4.jprofesorek.mooo.com
dev tap
ca /somewhere/sk2-vpn-ca.crt
auth-user-pass /somewhere/userPass.txt
#daemon</code> następnie uruchom polecenie: <code>openvpn --config sk2-vpn.ovpn</code>
* Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. network-manager-openvpn-gnome
).
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
.
<html></html>Dla zainteresowanych konfiguracja serwera
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.
Do zajęć z Qt / Javy można korzystać z Windowsa, stąd krótka instrukcja jak uruchomić VPN+VNC pod Windowsem.
Należy zainstalować openvpn: https://openvpn.net/community-downloads-2/
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ł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).
</del>
Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia Live Share.
Uwaga: Osoby korzystające z tej metody powinny:
socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &
--std=c+
+2a
, to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z --std=c+
+1z
, to na potrzeby zajęć wystarczylibclang-common-8-dev
jest wymagana w Ubuntu niezależnie od wersji clanga z niezrozumiałych przeze mnie powodów