# pingwinowanie 5+1 # zad 1 ![image](https://hackmd.io/_uploads/H1E9S4be0.png) Na oko to: 1. pobieramy balenaEtcher [link](https://github.com/balena-io/etcher/releases/download/v1.18.11/balenaEtcher-1.18.11-x64.AppImage) 2. `chmod +x ~/Downloads/balenaEtcher-*.AppImage` 3. ~/Downloads/balenaEtcher*.AppImage 4. pobierz iso jakiegoś systemu 5. Reszte wyklikasz # zad 3 ![image](https://hackmd.io/_uploads/BylGto0k0.png) ## rwx - co to jest Spróbujmy najpierw wyświetlić sobie parę plików (spoiler): ```bash ll /media/my_precious/ total 16K -rw------- 1 kabanok kabanok 36 04-05 12:45 asd drwx------ 2 kabanok kabanok 4.0K 04-05 12:49 asd123/ drwx------ 2 kabanok kabanok 4.0K 04-05 12:49 asd124/ -rw------- 1 kabanok kabanok 0 04-06 11:11 elo -rw------- 1 kabanok kabanok 0 04-06 11:22 elo2 drwx------ 2 kabanok kabanok 4.0K 04-06 11:23 elo23/ ``` Jak widać - w pierwszej kolumnie są - na pierwszy rzut oka - jakieś dziwne znaczki. Tak na prawdę są to tryby dostępu dla odpowiednio właściciela pliku, grupy która ma dostęp do pliku oraz dla reszty. Mamy 3 tryby dostępu - `rwx` oznaczające odpowiednio: - r (read) - Prawo do odczytu zawartości katalogu. Użytkownik posiadający to prawo może wyświetlić listę plików i podkatalogów znajdujących się w katalogu. - w (write) - Prawo do zapisu w katalogu. Użytkownik posiadający to prawo może tworzyć, usuwać lub zmieniać pliki i podkatalogi wewnątrz katalogu. - x (execute) - Prawo do wykonywania katalogu. W przypadku katalogów oznacza to, że użytkownik może używać tego katalogu jako elementu ścieżki (np. cd), aby uzyskać dostęp do jego zawartości. Bez tego prawa, użytkownik nie będzie w stanie przejść do tego katalogu ani wykonać na nim żadnych operacji. Jak nimi manipulować (chmod), np: ```bash= chmod +rx plik # dodaje do pliku prawa do odczytu i odpalania (dla właściciela, grupy i reszty) chmod 755 plik # dodaje do pliku prawa rwxr-xr-x (wszystko dla właściciela, brak możliwości zapisu dla grupy i reszty) ``` **Jak liczyć te 755?** Każda cyfra to osobny poziom dostępu: pierwsza-właściciel, druga-grupa, trzecia-reszta. Jak liczymy gdy mamy już wybrane kogo chcemy? Zapisujemy to w postaci bitowej: 5 = 101 i and-ujemy z rwx, więc 5 = r-x. żeby z kodu zamienić na liczbę to po prostu uznajemy że `-` to 0 a `r/w/x` to 1. Wtedy np `-wx` to będzie `011 = 3` Katalog musi mieć prawa `-wx` żeby można było tworzyc pliki ale nie wolno było czytać. ```bash= > chmod 300 kat/ > ll total 12K d-wx------ 2 kabanok kabanok 4.0K 04-06 13:24 kat/ -rw-r--r-T 1 kabanok kabanok 0 04-06 13:08 sticky -rw-r--r-- 1 kabanok kabanok 1.8K 04-06 12:42 zad3.md -rw-r--r-- 1 kabanok kabanok 1.8K 04-06 11:43 zad4.md > touch kat/siema > ls kat/ ls: cannot open directory 'kat/': Permission denied ``` ## sticky bit Sticky bit to specjalne uprawnienie dla plików, które pozwala na usuwanie pliku, tylko jego właścicielowi. Dla katalogów - tylko właściciel pliku, właściciel katalogu oraz administrator systemu mogą usuwać lub zmieniać pliki w tym katalogu, nawet jeśli inni użytkownicy mają uprawnienia zapisu do tego katalogu. Operacje: ```bash= chmod +t plik # dodaje sticky bit w pliku/katalogu chmod -t plik # odejmuje ``` Jak zobaczyć czy jest ustawiony? ```bash > ls -l sticky -rw-r--r-T 1 kabanok kabanok 0 04-06 13:08 sticky ``` Jak widać jest to na ostatniej pozycji (tam gdzie było x! ![image](https://hackmd.io/_uploads/ByJBT3Ay0.png)) Na szczęście znaleziono sposób jak temu zaradzić - `małe t = t+x, a duże T = samo t` ## setgid Na katalogu - oznacza że nowe pliki dziedziczą grupę po grupie głównej katalogu a nie użytkownika. Na pliku - oznacza że pliki utworzone podczas wywołania tego pliku będą dziedziczone po grupie głównej pliku a nie użytkownika. Jak ustawić? ```bash= mkdir 3zad chmod g+s 3zad/ sudo chgrp git 3zad touch 3zad/elo ``` I widzimy że ``` > ll 3zad/ total 0 -rw-r--r-- 1 kabanok git 0 04-06 15:52 elo ``` ## /tmp i /usr/local **/tmp:** ``` > ll /tmp -d drwxrwxrwt 16 root root 560 04-06 16:05 /tmp/ ``` Ma to sens, bo chcemy zeby wszyscy użytkownicy mogli zapisywać pliki do tmp, ale ustawiamy sticky bit żeby nikt nie mógł innemu użytkownikowi usuwać plików/katalogów **/usr/local:** ``` > ll /usr/local -d drwxr-xr-x 11 root root 4.0K 2022-08-16 /usr/local/ ``` Ma to sens - w tym folderze są zainstalowane pakiety i chcielibyśmy, żeby paczki mógł instalować tylko administrator, ale chcemy również żeby inni użytkownicy mogli korzystać z plików w środku i je odpalać # zad 4 ![image](https://hackmd.io/_uploads/S1kQYjRy0.png) ## setup pendrive ``` sudo fdisk -l sudo fdisk /dev/sda ``` *zrobić dobrze pendriveowi* ``` sudo mkfs.vfat -n MY_PRECIOUS /dev/sda1 ``` ## czy wyszło ``` lsblk -o NAME,FSTYPE,LABEL ``` ## zamianki w /etc/fstab `mkdir -p -m0 /media/my_precious/` ``` blkid | grep MY_PREC ``` *kopiujemy UUID* ``` sudo vim /etc/fstab ``` dodajemy na dole: `UUID=*skopiowane* /media/my_precious vfat opcje 0 0` I opcje to są: `noauto,user,noexec,dmask=077,fmask=177` **noauto**: Ta opcja powoduje, że partycja nie jest automatycznie montowana podczas uruchamiania systemu. **user**: Ta opcja umożliwia zwykłym użytkownikom montowanie i odmontowywanie partycji. **noexec**: blokuje odpalanie programów **dmask=077**: dmask=077 oznacza że od domyślnych uprawnień (chyba 755) odejmujemy 077 czyli dostajemy 700 (hehe). **fmask=177**: to samo tylko dla plików (dla plików domyślne jest 644 chyba) Ostatnie dwa zera oznaczają: - pierwsze: określa, czy system plików powinien być uwzględniany w kopii zapasowej przez narzędzie dump. Zazwyczaj, gdy ta wartość wynosi 0, system plików nie będzie uwzględniany w kopii zapasowej, podczas gdy 1 oznacza, że powinien. - drugie: określa kolejność w jakiej sprawdzane są systemy plików (fsck) podczas uruchamiania systemu. - `0`: System plików jest pomijany (brak sprawdzania). - `1`: System plików jest sprawdzany jako pierwszy. - wyższe: System plików jest sprawdzany sekwencyjnie po sprawdzeniu systemów plików o priorytecie `1` (`2`->`3`->...). więc do fstaba dodajemy: `UUID=... /media/my_precious vfat noauto,user,noexec,dmask=077,fmask=177 0 0` I musimy zrobić reload: `sudo systemctl daemon-reload` ## Montowanie i demontaż Montowanie: `mount /media/my_precious` Demontażowanie: `umount /media/my_precious` # zad 5 ![image](https://hackmd.io/_uploads/Hkn_AJyg0.png) ## Nie wiem czy to co robie ma sens ## Jak stworzyć ramdysk ```bash sudo mkdir /mnt/ramdisk -p sudo mount -t ramfs ramfs /mnt/ramdisk ``` ## Porównanie ### Nwm czy jednak nie o to chodziło??? #### ramdysk 1. tworzymy obraz w ramdysku: `dd if=/dev/zero of=/mnt/ramdisk/encrypted_container bs=2M count=2048` 2. szyfracja: `sudo cryptsetup luksFormat /mnt/ramdisk/encrypted_container` 3. otwieranie szyfracji: `sudo cryptsetup luksOpen /dev/loop0 enc_cont` 4. napierdalamy dane: `sudo dd if=/dev/urandom of=/dev/mapper/enc_cont bs=1M count=1024 conv=fsync` ```bash sudo dd if=/dev/urandom of=/dev/mapper/enc_cont bs=1M count=1024 conv=fsync 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.54661 s, 322 MB/s ``` 5. oczyszczanie: ```bash sudo cryptsetup luksClose enc_cont ``` #### dysk 1. tworzymy obraz w ramdysku: `dd if=/dev/zero of=~/studia/lin/lista6/encrypted_container bs=2M count=2048` 2. szyfracja: `sudo cryptsetup luksFormat ~/studia/lin/lista6/encrypted_container` 3. otwieranie szyfracji: `sudo cryptsetup luksOpen /dev/loop0 enc_cont` 4. napierdalamy dane: `sudo dd if=/dev/urandom of=/dev/mapper/enc_cont bs=1M count=1024 conv=fsync` ```bash sudo dd if=/dev/urandom of=/dev/mapper/enc_cont bs=1M count=1024 conv=fsync 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.97807 s, 180 MB/s ``` 5. oczyszczanie: ```bash sudo cryptsetup luksClose enc_cont ``` ### Odczyt #### ramdysk ```bash > sudo dd if=/dev/mapper/enc_cont of=/dev/null bs=1M 4080+0 records in 4080+0 records out 4278190080 bytes (4.3 GB, 4.0 GiB) copied, 2.17428 s, 2.0 GB/s ``` #### dysk ```bash > sudo dd if=/dev/mapper/enc_cont of=/dev/null bs=1M 4080+0 records in 4080+0 records out 4278190080 bytes (4.3 GB, 4.0 GiB) copied, 2.22449 s, 1.9 GB/s ``` # zad 6 ![image](https://hackmd.io/_uploads/BJp18zbxC.png) ## Enable (wtf jak to jest po polsku) zram ```bash= sudo modprobe zram ``` ## Co to zram Zram to moduł jądra pozwalający na utworzenie skompresowanego ramdysku - taki ramdysk ale dane sa kompresowane przy zapisie i dekompresowane przy odczycie. ## Jak stworzyć device zram? - tworzenie ```bash= sudo zramctl --find --size 4G sudo mkfs.ext4 /dev/zram<X> ``` - usuwanie ```bash= sudo zramctl --reset /dev/zram<X> ``` ## Staty ```bash= sudo dd if=/dev/zero of=/mnt/zram/enc bs=3M count=1024 conv=fsync sudo cryptsetup luksFormat /mnt/zram/enc sudo cryptsetup luksOpen /mnt/zram/enc enc sudo dd if=/dev/urandom of=/dev/mapper/enc bs=1M count=1024 conv=fsync sudo cryptsetup luksClose enc ``` ```bash= > sudo dd if=/dev/urandom of=/dev/mapper/enc bs=1M count=1024 conv=fsync 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.40304 s, 199 MB/s ``` Jest znacznie szybsze od normalnego dysku, więc czymuby nie zrobić w tym swapa??? (:DDD) # zad 7 (sic!) ![image](https://hackmd.io/_uploads/ByPhsGblR.png) ## Szybki tutorial ### Tworzenie urządzenia zram ```bash= sudo zramctl --find --algorithm zstd --size 4G ``` ### tworzymy swapka ```bash= sudo mkswap -U clear /dev/zram0 sudo swapon --priority 100 /dev/zram0 ``` ### cleanup ```bash= sudo swapoff /dev/zram0 sudo echo 1 > /sys/module/zswap/parameters/enabled ``` ## Automatyczne mountowanie Do pliku `/etc/udev/rules.d/99-zram.rules` dodajemy: ``` ACTION=="add", KERNEL=="zram1", TTR{comp_algorithm}="zstd", ATTR{disksize}="4G", RUN="/usr/bin/mkswap -U clear dev/%k", TAG+="systemd" ``` ```bash= sudo vim /etc/udev/rules.d/99-zram.rules ``` I oczywiście trzeba dodać nową pozycję w `fstab`: `/dev/zram0 none swap defaults,pri=100 0 0` ```bash= sudo vim /etc/fstab ```