# pingwinowanie $3\cdot 2 + 1$
# zad 1

**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

## 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

**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
```

Czy działa
```bash=
su jantest
##############
ssh jantestowy
##############
sudo -u jantest ls
```
Blokowanie użytkownika
```bash=
sudo chage -E 1 jantest
```
from man usermod

## 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

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

## Co to VT?
https://medium.com/@tech_18484/linux-virtual-console-terminal-cc7166ed3cdb

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

## 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

## 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