# pingwinowanie $3\cdot 2 + 1$ # zad 1 ![image](https://hackmd.io/_uploads/Hys4pKUgA.png) **Na archopodobnych** ## Dodanie użytkownika ```bash= sudo useradd -m -G <grupy np. wheel> -s <powłoka np. /bin/bash> <username> ``` użyteczne opcje: - `-m` - tworzy automatcznie floder `/home/<username>` - `-G` - dodaje grupy - `-p` - tworzy hasło - `-s` - tworzy shell który będzie dostępny po zalogowaniu - `-e` - na ile czasu konto jest tworzone - `-U` - utwórz grupę o takiej samej nazwie jak `<username>` ```bash= sudo useradd -m -s /bin/bash jantest sudo passwd jantest ``` ## Modyfikacja użytkownika ```bash= sudo usermod -aG <groups> <username> ``` ciekawsze opcje: - `-a`: Dodaje użytkownika do grupy, nie usuwając go z innych grup. - `-G g1[,g2,...[,gn]]]`: dodaje użytkownika do podanych grup usuwając poprzednie - `-l <new-username>`: Zmienia nazwę użytkownika na nową - `-d <path>`: Zmienia katalog domowy użytkownika - `-s, --shell <path>`: Zmienia powłokę użytkownika - `-e <exp-date>`: Ustawia datę wygaśnięcia konta użytkownika. Po tej dacie użytkownik nie będzie mógł się zalogować. - `-L`: Blokuje konto użytkownika, uniemożliwiając mu logowanie się. - `-p, --password PASSWORD`: Ustawia hasło użytkownika na podany hasz. ```bash= sudo usermod -aG optical,video,audio,bluetooth jantest ``` (bluetooth może nie być tak jak u mnie. Wtedy blef że nie łączyłeś się nigdy przez bluetooth czy coś może przejdzie) (żeby zobaczyć wszystkie `cat /etc/group`) ## Dodanie do sudo i ip bez hasła ```bash= sudo visudo ``` I dopisujemy pod sobą ```= jantest ALL=(ALL) NOPASSWD: /usr/bin/ip ``` ## Strzel se byczq nową grupkę  ```bash= sudo groupadd projekt ``` i dodaj jana i siebie ```bash= sudo usermod -aG projekt kabanosk sudo usermod -aG projekt jantest ``` ## Pliczek pierdoliczek ```bash= touch opis.txt chmod 660 opis.txt sudo chown :projekt opis.txt ``` ```bash= vim opis.txt su jantest vim opis.txt ``` ## Sprawdzanie (nie mam pomysłu na fajny tytuł, ale to jest zadanie dla ciebie @Noobkins) ```bash= groups groups jantest ``` ## Dziwne pierdy z whoami ```bash= sudo visudo # Dopisać: # jantest ALL=(kabanosk) NOPASSWD: /usr/bin/whoami sudo -u kabanosk whoami ``` ## GECOS (prawie GECON) To jest wsm tylko jakiś sposób reprezentacji użytkowników, ale mózg odpływa więc można sprawdzić. ```bash= sudo visudo # dodajemy: # jantest ALL=(ALL) NOPASSWD: /usr/bin/chfn ``` ```bash= su jantest sudo chfn -f "Jan Testowy" jantest cat /etc/passwd | grep jan ``` # zad 2 ![image](https://hackmd.io/_uploads/Bk5A_BdgC.png) ## Wtf is RCS? **RCS** - Revision Control System, to system kontroli wersji, który swój szczyt popularności miał gdy Tomek przystępował do Komunii (na oko - lata 80/90). Dzięki swojej lekkości przetrwał do lat dzisiejszych, bo nie zawsze potrzeba takiego BIG narzędzia jakim jest Git ```bash= sudo apt install rcs sudo pacman -S rcs yay -S rcst ``` ```bash= # tworzymy folder do projektu do pracy z Janem mkdir zad2 chgrp projekt zad2 # ustawiamy setgid na projekcie chmod +s zad2 chmod g+w zad2 cd zad2 # utwórz folder RCS i plik opis.txt mkdir RCS chmod +s RCS chmod g+w RCS touch opis.txt # zapisz coś i wpierdol do repo byq vim opis.txt ci opis.txt # log na jana su jantest # odpakuj, zapisz, zapakuj, powtórz co -l opis.txt vim opis.txt ci opis.txt su kabanosk co -l opis.txt vim opis.txt ci opis.txt su jantest co -l opis.txt vim opis.txt ci opis.txt # żeby sprawdzic hiustoriw zmian rcs log opis.txt ``` No i super. no i idziemy do spanka @Noobkins popraw to potem czy coś # zad 3 ![image](https://hackmd.io/_uploads/ByoeYH_lA.png) **Archowe** ## Mama mi mówiła że mogę być kim chcę, więc zostałem serwerem ssh używając poniższych opcji Sprawdzanie czy już czasem nie jesteśmy: ```bash= sudo pacman -S openssh sudo systemctl start sshd sudo systemctl enable sshd sudo systemctl status sshd ``` ## Pierdolnij sobie klucza byq ```bash= ssh-keygen -t rsa -b 4096 -f dojana ``` Teraz mamy kluczson w pliku: `./dojana`(prywatny) i `./dojana.pub`(publiczny) ## Napierdalamy kluczem do janowego hosta ```bash= ssh-copy-id -i dojana.pub jantest@localhost ``` ## ssh-config? ```bash= vim ~/.ssh/config ``` I dodaj: ```= Host jantestowy HostName localhost User jantest IdentityFile ~/studia/lin/lista7/zad3/dojana ``` Teraz możesz się zalogowaś na serwer jantest@localhost z użyciem: ```bash= ssh jantestowy ``` Przydatne rzeczy które mogą się znaleźć w pliku ssh-config: - Host - nazwa określająca kofigurację hosta lub grupy hostów(można używać regexów żeby dopasować więcej niż jeden adres) - HostName - adres/nazwa do której będziemy się łączyć - User - nazwa użytkownika - Port - na którym porcie się łączymy (w komendzie ssh opcja `-p`) - IdentityFile - ścieżka do klucza prywatnego którego klient ssh ma użyć do autoryzacji - Compression - włącza/wyłącza kompresję poczas połączenia (ustawiamy za pomocą yes/no) Komenda ssh po ustawieniu tych wszystkich rzeczy wyglądała by tak (jeśli Compression jest ustawione na yes): ```bash= ssh User@HostName -p Port -i IdentityFile -C ``` ## Wtf is ssh-add(1) jak mamy ssh-agenta odpalonego to on spamiętuje klucze prywatne na jakiś czas i wtedy nie musimy podawać ich jako identity file czyli jeśli nie mamy klucza w `.ssh/` to możemy spamiętać klucz tak: ```bash= # odpalenie agenta ssh eval $(ssh-agent) # dodaj klucz prywatny na 3600s ssh-add -t 3600 dojana # śmiało można się logować ssh jantestowy # do usunięcia ssh-add -d dojana ``` ## O kurwa zgubiłem hasło do jana ```bash= # zablokuj hasło jana sudo passwd -l jantest # Spróbuj się zalogować su jantest # (PS nie da się) # spróbuj się dostać przez ssh ssh jantestowy # (PS da się) ``` ## Wielki bezhasłowy admin jano ```bash= sudo visudo # I dopisujemy # %wheel ALL=(ALL) NOPASSWD: ALL # dodajemy jana do wheel sudo usermod -aG wheel jantest ``` I jak można sprawdzić ```bash= ssh jantestowy ############## sudo ls ``` ## Blokowanie konta (wtf nigdzie tego nie widzę) (dobra jednak dopytałem i ziomo znalazł jeden na stacku że trzeba ustawić exipre date) Odblokowanie hasła ```bash= # raczej chodzi o to (nie musimy robić nowego hasła) sudo passwd -u jantest ``` ![image](https://hackmd.io/_uploads/ryP1YLdlR.png) Czy działa ```bash= su jantest ############## ssh jantestowy ############## sudo -u jantest ls ``` Blokowanie użytkownika ```bash= sudo chage -E 1 jantest ``` from man usermod ![image](https://hackmd.io/_uploads/HypXYIdgC.png) ## false / nologin Odblokowanie ```bash= sudo chage -E "" jantest ``` Zmiana powłoki ```bash= sudo chsh -s /bin/false jantest ``` Czy działa ```bash= su jantest ############## ssh jantestowy ############## sudo ls #(jako zalogowany jantest w innej karcie) ``` Działa! false zwraca komunikat błędu, nologin wypisuje na komunikat na ekran i dopiero potem konczy się niepowodzeniem. nologin lepiej używać dla kont systemowych i usługowych lub po prostu dla wiekszej przejrzystości (użytkownicy wiedzą jaki jest błąd) ## jprd ile to jest podpunktów ```bash= sudo vim /etc/ssh/sshd_config ``` I zmieniamy wartość `PermitRootLogin` na `no` ```bash= sudo systemctl restart sshd ``` ## I czemu te na końcu są tak niepodobne do tych na początku ```bash= sudo vim /etc/ssh/sshd_config #-> PasswordAuthentication no sudo systemctl restart sshd ssh jantestowy ``` # zad 4 ![image](https://hackmd.io/_uploads/ByoXpYIx0.png) newusers(8) - komenda służąca do szybkiego dodawania użytkowników. Podaje się do niej plik z danymi tak jak w pliku `/etc/passwd`. Przykład pliku: ``` anowak:polska123:::Anomalia Nowak:: kko::::Katarzyna Kowalska:: jann:qwerty:::Jan Niezbędny::/bin/rbash motiond::::Motion Daemon::/bin/false ``` potem robimy: ```bash= sudo newusers plik.txt cat /etc/passwd ``` ## rbash rbash - restricted bash Jak sama nazwa wskazuje - bash ale bez funkcji które mogą coś zepsuć: - nie ma `cd` - nie może być `/` w komendzie wywoływanej np. `/usr/bin/mkdir elo` - nie działa, a `mkdir elo` - działa - i wiele więcej - żeby poczytać `man bash` i wyszukać `RESTRICTED SHELL` ## Kataklizm/masowe wymieranie ```bash= sudo userdel anowak sudo userdel kko sudo userdel jann sudo userdel motiond ``` # zad 5 ![image](https://hackmd.io/_uploads/HJnf6YUeA.png) ## Co to VT? https://medium.com/@tech_18484/linux-virtual-console-terminal-cc7166ed3cdb ![image](https://hackmd.io/_uploads/By73hI_lR.png) No tak jak by nazwa wskazywała to są terminale które nie są fizyczne. Chodzi o to że możemy sobie uruchomić wiele niezależnych 'wirtualnych terminali', więc wielu użytkowników może korzystać z tego samego systemu równocześnie. Można się przełączać skrótem Ctrl+Alt+F[1-12] (u mnie domyślych jest 1-6, a reszta to jakieś wolne ale bez setupu) ## dev W dev są reprezentowane przez $/dev/tty_i$ ## getty The server side application that enables you to login using the serial interface is called getty, which stands for Get TTy. Most of the modern Linux distributions use a version of getty called "agetty": it is spawned by systemd and connected to a serial port. W skrócie oczekuje na tty i ogarnia logowanie/sesje ## Zwyczaje i użycie Chyba nie ma jakichś wielu rzeczy na ten temat, ale: * z reguły 1-6 są domyślne (bez interfejsu graficznego), a następne już mają (ale często nie są setupowane) * Jakieś użycie to głownie ludzie piszą o debugu/naprawianiu kiedy zwali się grafika * Często się z nich korzysta na serwerach, bo po co komukolwiek grafika na serwerze ## Rodzimy dzieci ```bash= sudo useradd -m -s /bin/bash user13 sudo useradd -m -s /bin/bash user42 ``` ## Setup ```bash= cd /etc/systemd/system sudo touch getty@tty8.service sudo nano getty@tty8.service #I wkeljamy tam # [Service] # ExecStart= # ExecStart=-/sbin/agetty --autologin user13 --noclear %I $TERM sudo touch getty@tty9.service sudo nano getty@tty9.service #I wkeljamy tam # [Service] # ExecStart= # ExecStart=-/sbin/agetty --autologin user13 --noclear %I $TERM sudo systemctl daemon-reload sudo systemctl restart getty@tty8.service getty@tty9.service ``` Dobra i krotko co się dzieje ```bash= [Service] ExecStart=-/sbin/agetty --autologin user13 --noclear %I $TERM ``` * ExecStart -> mowi jakie koemndy mają być odpalone przy uruchamianiu usługi * -/sbin/agetty -> Odpal agetty * --autologin user -> zaloguj się jako user * --noclear -> nie czyść terminala (żeby nie tracić tego co było przed zalogowaniem) * %I -> Id terminala np ty8 * $TERM to zmienna środowiskowa ## setup by skowi to ja ogólnie nie miałem terminali 8,9 (na 7 odpalają się X'y) więc zaczynam od zmienienia domyślnej liczby odpalanych TTY ``` /etc/systemd/logind.conf ``` zmieniamy NAutoVTs na 12 (albo 9 chodziaż) i ja stworzyłem wtedy w ``` /etc/systemd/system ``` odpowiedni folder w zależności jakie tty chce modyfikować ```getty@tty8.service.d/autologin.conf``` zawiera to co wyżej robił wojto/grzechu ``` [Service] ExecStart= ExecStart=-/sbin/agetty --noclear --autologin user13 %I $TERM ``` # zad 6 ![image](https://hackmd.io/_uploads/BkxwjBYxR.png) ## setup ```bash= sudo pacman -S openbox ``` W user13: ```bash= nano ~/.xinitrc # na końcu dopiszm exec openbox-session ``` No i cudo jak damy `startx` to uruchamia nam się co trzeba:>> ## Autologin Żeby dodać autologin to do .bash_profile dodajemy ```bash= if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 8 ]; then exec startx fi ``` # zad7 ![image](https://hackmd.io/_uploads/BkpIyFcxC.png) ## Komendy ```bash= #zmienia nazwę interfejsu enp0s3 na enp-loc0 ip link set enp0s3 name enp-loc0 # włącza interfejs ip link set up dev enp-loc0 #dodaje adres <ip>/mask do interfejsu ip addr add 192.168.0.1/24 dev enp-loc0 # czyści interfejs sudo ip addr flush enp-loc #pokazuje info o urządzeniu ip addr show dev device ``` # zad 9 ip link set interface up ip link show interface iw dev interface scan | less iw dev interface set type ibss iw dev interface connect "your_essid" iw dev interface link # zad 10 /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=/run/wpa_supplicant update_config=1 wpa_supplicant -B -i interface -c /etc/wpa_supplicant/wpa_supplicant.confv wpa_cli > scan > scan_results > add_network > set_network 0 ssid "MYSSID" > set_network 0 psk "passphrase" > enable_network <nr> > save_config > quit i teraz jeszcze dhclient i bajlandooo