APACHE (po labu)
#1 – Isključiti firewall,, instalirati Apache (httpd) i trajno ga uključiti
sudo systemctl stop firewalld.service
sudo dnf install -y httpd
sudo systemctl enable --now httpd.service
#2 - Kreirati dir sa HTML web stranicom (ime mape kao domena, a u index.html ubaciti bezveze)
sudo mkdir -p /var/www/www.mikro.local
sudo vim /var/www/www.mikro.local/index.html --> Ovo je test stranica!
#3 – Kreirati konfiguraciju za navedenu web stranicu:
sudo vim /etc/httpd/conf.d/www_mikro_local.conf -->
ServerName www.mikro.local
DocumentRoot /var/www/www.mikro.local
ErrorLog /var/log/httpd/www_mikro_local_err.log
CustomLog /var/log/httpd/www_mikro_local_access.log combined
#4 – U diru /etc/hosts ubaciti IP adresu apache servera i imena domena/webova
sudo vim /etc/hosts -->
172.25.250.10 www.mikro.local
#5 – Reset Apache i provjera kroz curl
sudo systemctl restart httpd.service
curl www.mikro.local
#6 – Arhiva/Backup
tar -cvzf arhiva_www_mikro_local.tar.gz /var/www/www.mikro.local/index.html /etc/httpd/conf.d/www_mikro_local.conf
tar -xvzf arhiva_www_mikro_local.tar.gz (ekstraktiranje tar-a)
NGINX (po labu)
#1 – Isključiti firewall,, instalirati nginx i trajno ga uključiti
sudo systemctl stop firewalld.service
sudo dnf install -y nginx
sudo systemctl enable --now nginx.service
#2 - Kreirati dir sa HTML web stranicom (ime mape kao domena, a u index.html ubaciti bezveze)
sudo mkdir -p /var/www/www.mikro.local
sudo vim /var/www/www.mikro.local/index.html --> Ovo je test stranica!
#3 – Kreirati konfiguraciju za navedenu web stranicu:
sudo vim /etc/nginx/conf.d/www_mikro_local.conf -->
server {
server_name www.mikro.local;
root /var/www/www.mikro.local;
access_log /var/log/www_mikro_local.log;
error_log /var/log/www_mikro_local_err.log;
}
#3.1 Potrebno je i SELinux isključiti, te provjera sintakse:
sudo nginx -t
sudo setenforce 0
#4 – U diru /etc/hosts ubaciti IP adresu apache servera i imena domena/webova
sudo vim /etc/hosts -->
172.25.250.11 www.mikro.local web.mikro.local
#5 – Reset Apache i provjera kroz curl
sudo systemctl restart nginx.service
curl www.mikro.local
#Ekstra – provjera SELinux postavki:
sudo ls -laZ /var/www/
LVM (po labu) (span na 2 PV-a, 3GB/PV, 512B, xfs, /lab05-volume/lvm, automount)
#1 – Izlistanje trenutnog stanja diskova/grupa/LV-a...:
sudo df -hPT sudo pvs sudo vgs sudo lvs
sudo lsblk -f sudo pvdisplay sudo vgdisplay sudo lvdisplay
#2 – Izrada fizičkog volume-a (PV) – može naredba u jedan red
sudo pvcreate /dev/vdb /dev/vdc
#3 – Izrada volume grupe (VG)
sudo vgcreate vg01 /dev/vdb /dev/vdc
#4 – Izrada logičkog volume-a (LV) koja spana na 2 diska
sudo lvcreate -n lv01 -i 2 -L 3G -I 512 vg01
#5 – Kreiranje direktorija za mount, izrada FS-a te mountanje diska na taj direktorija
sudo mkdir /lab05-volume/lvm
sudo mkfs.xfs /dev/vg01/lv01
sudo mount /dev/vg01/lv01 /lab05-volume/lvm
sudo lsblk -f
#6 – Kreiranje boot pers. – FSTAB (super brza FUCKYEAH metoda):
sudo echo "/dev/vg01/lv01 /lab05-volume/lvm xfs defaults 0 0" | sudo tee -a /etc/fstab
#DOPUNA (definiranje veličine PV-a)
Procedura je ista sve do kreiranja grupe diskova. Nakon toga je potrebno odraditi pvresize:
#3.1 – Promjena postojeće veličine (default je 5GB kod kreiranja diskova) na 3GB
sudo pvresize --setphysicalvolumesize 3G /dev/vdb
sudo pvresize --setphysicalvolumesize 3G /dev/vdc
sudo pvresize --setphysicalvolumesize 3G /dev/vdd
Nakon ovoga nastaviti sa korakom #4! (slika dolje je kako izgledaju mount-ovi sa ovom v.)
#3.1.1 – RAID-5 (prethodni koraci isti)
sudo lvcreate --type raid5 -l 100%FREE -n my_lv my_vg
Nakon ovoga nastaviti sa korakom #4! (slika dolje je kako izgledaju mount-ovi sa ovom v.)
STRATIS (po labu)
#1 – Kreiranje pool-a
sudo stratis pool create lab05pool /dev/vdb /dev/vdc
#2 – Kreiranje FS-a (fs1, fs2) za pool
sudo stratis filesystem create lab05pool fs1
sudo stratis filesystem create lab05pool fs2
#3 – Izrada 2x direktorija za mount (mogu u jedan red)
sudo mkdir -p /lab-05/stratis/fs1 /lab-05/stratis/fs2
#4 – Mountanje oba FS-a
sudo mount /dev/stratis/lab05pool/fs1 /lab-05/stratis/fs1
sudo mount /dev/stratis/lab05pool/fs2 /lab-05/stratis/fs2
#5 – Izrada boot pers. (također super brži FUCKYEAH mode)
sudo stratis filesystem list (kopirati UUID= )
echo "UUID=XXX-XX-XX /dev/stratis/lab05pool/fs1 /lab-05/stratis/fs1 xfs defaults 0 0" | sudo tee -a /etc/fstab
echo " UUID=XXX-XX-XX /dev/stratis/lab05pool/fs2 /lab-05/stratis/fs2 xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo lsblk -f
#6 – Kreiranje random datoteke za provjeru snapshota
echo "Probni zapis za FS1" | sudo tee /lab-05/stratis/fs1/testing_snapshots.txt
echo "Probni zapis za FS2" | sudo tee /lab-05/stratis/fs2/testing_snapshots.txt
#7 – Izrada snapshota za FS1
sudo stratis filesystem snapshot lab05pool fs1 fs1_snapshot
#8 – Brisanje prvog file-a za test i izrada recovery mape
sudo rm /lab-05/stratis/fs1/testing_snapshots.txt
sudo mkdir -p /lab-05/stratis/fs1-recovery
#9 – Mountanje snapshota na recovery mapu i sinkronizacija
sudo mount /dev/stratis/lab05pool/fs1_snapshot /lab-05/stratis/fs1-recovery
sudo rsync -av /lab-05/stratis/fs1-recovery/testing_snapshots.txt /lab-05/stratis/fs1/
#10 – Ispis
sudo cat /lab-05/stratis/fs1/testing_snapshots.txt
NFS (po labu)
1. dio – SERVER strana
#1 – Pokretanje NFS-a (trajno) i gašenje firewalla
sudo systemctl enable --now nfs-server.service
sudo systemctl stop firewalld.service
#2 – Izrada direktorija za dijeljenje
sudo mkdir –p /data/nfs/{share1,share2,share3,share4}
#3 – Popuna pravila dijeljenja za navedene mape
sudo vim /etc/exports
/data/nfs/share1 172.25.250.0/24(rw,sync,no_root_squash)
/data/nfs/share2 172.25.250.11(rw,sync,no_root_squash)
/data/nfs/share3 172.25.250.9(rw,sync,no_root_squash)
/data/nfs/share4 *(ro,sync,no_root_squash)
#4 – Ažuriranje NFS-a
sudo exportfs –rav
#5 – (OPCIONALNO) – Ubacivanje u firewall dozvole
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd –reload
2. dio – KLIJENTSKA STRANA
#1 – Kreirati direktorije za mount
sudo mkdir -p /mnt/share{1,2,4}
#2 – Mountanje diskova na serverb
sudo mount -t nfs 172.25.250.10:/data/nfs/share1 /mnt/share1
sudo mount -t nfs 172.25.250.10:/data/nfs/share2 /mnt/share2
sudo mount -t nfs 172.25.250.10:/data/nfs/share3 /mnt/share3
#3 – OPCIONALNO – trajni boot mount:
sudo vim /etc/fstab
172.25.250.10:/data/nfs/share1 /mnt/share1 nfs defaults 0 0
172.25.250.10:/data/nfs/share2 /mnt/share2 nfs defaults 0 0
172.25.250.10:/data/nfs/share4 /mnt/share4 nfs defaults 0 0
#4 – Provjera rada:
sudo touch /mnt/share1/testfile1.txt
sudo touch /mnt/share2/testfile2.txt
sudo touch /mnt/share4/testfile4.txt
AUTOFS (po labu):
#1 – Instalacija autoFS-a
sudo dnf install autofs nfs-utils
#2 – Podešavanje autoFS-a za putanju (auto demount nakon 10 minuta)
sudo vim /etc/auto.master
/shared-files /etc/auto.nfs --timeout=600
#3 – Podešavanje točnih putanja mounta:
sudo vim /etc/auto.nfs
share1 -rw,sync 172.25.250.10:/data/nfs/share1
share3 -rw,sync 172.25.250.10:/data/nfs/share3
share4 -rw,sync 172.25.250.10:/data/nfs/share4
#4 – Reset i uključenje servisa
sudo systemctl restart autofs
sudo systemctl enable autofs
#5 – Testiranje
ls -laZ /shared-files/share1
echo "Test file on share1" | sudo tee /shared-files/share1/testfile.txt
echo "Test file on share3" | sudo tee /shared-files/share3/testfile.txt
echo "Test file on share4" | sudo tee /shared-files/share4/testfile.txt
ls -laZ /shared-files/share1
mount | grep nfs
DATABASES (po labu i predavanjeima)
#1 – Instalacija mysql-a, apache-a
sudo dnf install -y mysql-server
sudo dnf install -y httpd
sudo systemctl enable --now mysqld.service
sudo mysql_secure_installation --> Sve odabrati YES!
#2 – Kreiranje baze db1 sa tablicom student i 4 stupca
sudo mysql -u root -p
show databases;
create database db1;
use db1;
create table students(id int, fname varchar(15), lname varchar(15), grade int);
show tables;
show columns in students;
#3 – Ubacivanje podataka (3 unosa) i ispis
insert into students values (1,'Pero','Peric',5);
select * from students;
#4 – Izrada kopije i povrat kopije
mysqldump -uroot -p db1 > db1-students-backup-2024-09-29.sql
mysql -u root -p
create database app_restore;
mysql -u root -p app_restore < db1-students-backup-2024-09-29.sql
#5 – Kreiranje korisnika (lokalni, remote) i provjera
create user 'app_local' identified by 'password123';
create user 'app_remote'@'%' identified by 'password123';
grant all privileges on db1.* to 'app_local';
flush privileges;
grant all privileges on *.* to 'app_remote'@'%';
show grants for 'app_remote'@'%';
#6 – Instalacija phpmyadmina (sa php-om) raditi sve u /var/www/html
sudo dnf install php php-mysqlnd php-json php-mbstring
sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
sudo tar -xvzf phpMyAdmin-latest-all-languages.tar.gz
sudo mv phpMyAdmin-*/ phpmyadmin
sudo cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
sudo nano /var/www/html/phpmyadmin/config.inc.php --> poslije „blowfish” ubaciti pass
sudo systemctl restart httpd
Kompletne upute:
https://www.tecmint.com/install-phpmyadmin-rhel-centos-fedora-linux/
POSTGRES
sudo dnf install -y postgres-server
sudo postgresql-setup --initdb
sudo systemctl enable –now postgresql.service
sudo su – postgres
psql
\l
create database app;
\c app;
create table users(id int, name varchar(15));
\dt \dt users;
insert into users(1,'Pero');
ZA PRISTUP SA KLIJENTSKE STRANE TREBA INSTALIRATI MYSQL PRVO
sudo dnf install -y mysql
mysql -u app_remote -p -h 172.25.250.10
SELinux & Firewall (po labu: dozvoliti samo SSH i HTTP trajno sa loggingom te provjera)
S obzirom da je uvjet ovog testa podešavanje web servera, pretpostavka je da je isti već podešen. Opaska! – Kod nginx-a sve van default putanje (root-a) neće raditi sa uključenim SEL-om i FW-om, te ih treba ili ugasiti ili promjeniti putanju u /etc/nginx/nginx.conf
#1 – Aktivacija firewall-a i SELinuxa
sudo systemctl enable --now firewalld.service
sudo setenforce 1
#2 – Provjera i dodavanje pravila u firewall (prije reload-a se ne vide)
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-service={http,ssh} --zone=public
sudo systemctl reload firewalld.service
sudo firewall-cmd --list-all
#3 – Aktivacija logginga
sudo firewall-cmd --set-log-denied=all
#4 – Provjera logova (na klijentu upisati sa krivim portom, i sa krivom putanjem tipa curl http:servera/banana
sudo grep 'IP-ADRESA' /var/log/nginx/stranica_error.log
sudo grep 'IP-ADRESA' /var/log/nginx/stranica_access.log
#1 – Aktivacija i postavka SELinuxa da dozvoli pristup van default putanje (rekurzivno)
sudo ls -laZ /app/website/
sudo semanage fcontext -a -t httpd_sys_content_t "/app(/.*)?"
sudo chcon -R -t httpd_sys_content_t /app/website (ovo je druga verzija za prethodnu naredbu)
sudo restorecon -Rv /app
#2 – Ubacivanje i dozvola drugog porta
sudo semanage port -a -t http_port_t -p tcp 95
sudo firewall-cmd --add-port=95/tcp --zone=public
sudo systemctl reload firewalld.service
sudo firewall-cmd –list-all
#3 – Konfiguracija web servera za drugi port
APACHE:
sudo vim /etc/httpd/conf/httpd.conf -->
Listen 95
Listen 80
NGINX:
sudo vim /etc/nginx/conf.d/selinux_mylab_local.conf -->
server {
listen 95;
... (ostale postavke)
}
REGEX & PROC (po labu)
#1 – Provjera procesa po servisu
ps aux | grep nginx
ps –ppid
#2 – Promjena PR procesa trenutno i trajno
sudo renice 8 -p process-id
sudo nano /etc/security/limits.conf --> @student hard nproc 10
ps -eo pid,user,ni,comm
#3 – Sortiranje procesa alpha, bez headera, sa args, bez %, CPU, RAM, najstariji
ps -u root -o comm --sort=comm
ps -u root -o comm --sort=comm | tail -n +2
ps -u root -o args --sort=comm
ps -u root -o args --sort=comm | sed 's/%/ /g'
ps -eo pid,comm,%cpu --sort=-%cpu | head -n 10
ps -eo pid,comm,%mem --sort=-%mem | head -n 3 | tail -n 1
ps -eo pid,comm,etime --sort=etime | tail -n 2
#4 – Regex:
sort po riječi:
grep "fish" /usr/share/dict/words
sort po riječi sa razmakom:
grep -C 2 "cat" /usr/share/dict/words
zbroj ponavljanja riječi:
grep -c "cat" /usr/share/dict/words
redni broj sa riječi:
grep -n "cat" /usr/share/dict/words
sve sa slovom „t”, samoglasnik nakon „t” i završava sa „sh”
grep -E "t[aeiou].*sh$" /usr/share/dict/words
isključivo navedene riječi
grep -E "^abominable$|^abominate$|^anomie$|^atomize$" /usr/share/dict/words
zbroji riječi sa „t”, samoglasnik nakon „t” i završava sa „sh”
grep -Ec "t[aeiou].*sh$" /usr/share/dict/words
sve riječi sa točno 14 znakova
grep -E "^.{14}$" /usr/share/dict/words
počinje sa „bl”, prati samoglasnik i bilo što poslije samoglasnika
grep -E "^bl[aeiou].*" /usr/share/dict/words
riječi koje sadrže 2-znamenkasti broj
grep -E "[0-9]{2}" /usr/share/dict/words
sve što počinje ILI sa slovom kojeg prati „e” ILI ako počinju sa brojem
grep -E "^[a-zA-Z]e.*|^[0-9]" /usr/share/dict/words
nađi točno navedene riječi
grep -E "^Bank$|^Banking$|^Flunking$|^Walking$" /usr/share/dict/words
PRONAĐI sve datoteke koje završavaju sa riječi „password”
find / -type f -name "*password" 2>/dev/null
Isto, ali koje počinju sa „password”
find / -type f -name "password*" 2>/dev/null
TOČNO sa imenom „password”
find / -type f -name "password" 2>/dev/null
Sve datoteke koje sadržavaju riječ „password”
find / -type f -name "*password*" 2>/dev/null
sa nastave:
Funkcija get req:
while true ; do curl servera ; sleep 3 ; clear ; done
Prikaži samo poruke poslije ',' do idućeg ','
sudo cat /var/log/lenjin_local_error.log | head -n 1 | cut -d ',' -f 2
Prikaži samo stupac nakon rezanja (cut -d je ',') te izvuci riječi sa razmakom (awk) te ih sortiraj i zbroji
sudo cat /var/log/lenjin_local_error.log | head -n 10 | cut -d ',' -f 2 | awk '{print $2}' | sort | uniq -c