Kompletan redoslijed komandi za više ishoda, složen točno po zadacima iz ispita, bez preskakanja i s uključenim realnim fixevima koje si otkrio tijekom vježbe.
DNS + resolv.conf + Postfix + telnet slanje maila
Idi na Ishod 5fdisk + PV/VG/LV + RAID1 + NFS + fix za permission denied
Idi na Ishod 7MySQL / MariaDB + PostgreSQL verzija
Idi na Ishod 8Regex, find, procesi, limits, Apache, SELinux, port 99 i VirtualHost
Idi na Ishod 9sudo dnf install dnsmasq -ysudo vim /etc/dnsmasq.d/ispit.confdomain=ispitna.local
local=/ispitna.local/
listen-address=0.0.0.0
address=/aplikacija.ispitna.local/172.25.250.11
address=/wiki.ispitna.local/172.25.250.11
address=/serverb.ispitna.local/172.25.250.11
mx-host=ispitna.local,serverb.ispitna.local,10listen-address=0.0.0.0 je važan zato da SERVERA odgovara drugim strojevima na portu 53, a ne samo lokalno.sudo systemctl enable --now dnsmasq
sudo systemctl restart dnsmasqsudo systemctl stop firewalldss -tuln | grep :53nslookup aplikacija.ispitna.local localhost
nslookup -type=mx ispitna.local localhostsudo chattr -i /etc/resolv.confsudo vim /etc/resolv.confnameserver 172.25.250.10nslookup aplikacija.ispitna.local
nslookup wiki.ispitna.local
nslookup -type=mx ispitna.local
nslookup serverb.ispitna.localsudo dnf install postfix -ysudo useradd ishod3sudo vim /etc/postfix/main.cfmyhostname = serverb.ispitna.local
mydomain = ispitna.local
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, 172.25.250.0/24
home_mailbox = Maildir/mydestination mora uključivati $mydomain, inače dobivaš Relay access denied za ishod3@ispitna.local.sudo systemctl enable --now postfix
sudo systemctl restart postfixss -tuln | grep :25postconf myhostname
postconf mydomain
postconf mydestination
postconf inet_interfaces
postconf mynetworkstelnet serverb.ispitna.local 25HELO workstation
MAIL FROM:<student@ispitna.local>
RCPT TO:<ishod3@ispitna.local>
DATA
Subject: Test
Ovo je test poruka.
.
QUITls -R /home/ishod3/Maildir
cat /var/spool/mail/ishod3# SERVERA
ss -tuln | grep :53
nslookup -type=mx ispitna.local localhost
# WORKSTATION
nslookup aplikacija.ispitna.local
nslookup -type=mx ispitna.local
# SERVERB
ss -tuln | grep :25
# BONUS
telnet serverb.ispitna.local 25lsblksudo fdisk /dev/sdbn
p
1
ENTER
+3G
t
8e
wsudo fdisk /dev/sdcn
p
1
ENTER
+3G
t
8e
wsudo fdisk /dev/sddn
p
1
ENTER
+3G
t
8e
wsudo pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1sudo vgcreate vg-grupa /dev/sdb1 /dev/sdc1 /dev/sdd1sudo vgchange -s 1M vg-grupapvs
vgssudo lvcreate -L 200M -n lvm-volume vg-grupasudo mkfs.xfs /dev/vg-grupa/lvm-volumesudo mkdir -p /lvm/ishod7sudo mount /dev/vg-grupa/lvm-volume /lvm/ishod7df -hsudo lvcreate --type raid1 -m 1 -L 1G -n raid1-volume vg-grupasudo mkfs.xfs /dev/vg-grupa/raid1-volumesudo mkdir -p /lvm/raid1sudo mount /dev/vg-grupa/raid1-volume /lvm/raid1lvs
df -hsudo dnf install nfs-utils -ysudo systemctl enable --now nfs-serversudo vim /etc/exports/lvm/ishod7 *(rw)
/lvm/raid1 *(ro)sudo exportfs -ravsudo systemctl stop firewalldshowmount -esudo mkdir -p /mnt/test-ishod7
sudo mount SERVERB:/lvm/ishod7 /mnt/test-ishod7sudo mkdir -p /mnt/test-raid1
sudo mount SERVERB:/lvm/raid1 /mnt/test-raid1touch /mnt/test-ishod7/test.txt
touch /mnt/test-raid1/test.txtsudo chown student:student /lvm/ishod7sudo chmod 775 /lvm/ishod7id studentsudo exportfs -ravno_root_squash pomaže samo ako pišeš kao root. U tvom slučaju pravi fix je bio ownership + chmod./lvm/ishod7 *(rw)
/lvm/raid1 *(ro)
/lvm/ishod7 *(rw,no_root_squash)
/lvm/ishod7 192.168.1.0/24(rw)
/lvm/ishod7 servera(rw)
/lvm/ishod7 *(rw,sync)
/lvm/ishod7 *(rw,anonuid=1000,anongid=1000)
/lvm/ishod7 *(rw,no_subtree_check)# Ako vidiš Permission denied:
ls -ld /lvm/ishod7
id student
cat /etc/exports
exportfs -ravlsblk
pvs
vgs
lvs
df -h
showmount -esudo dnf install mysql-server -y
sudo systemctl enable --now mysqld
systemctl status mysqld
ss -tuln | grep :3306mysql
CREATE DATABASE examDB;
CREATE USER 'dbuser'@'%' IDENTIFIED BY 'redhat';
GRANT ALL PRIVILEGES ON examDB.* TO 'dbuser'@'%';
FLUSH PRIVILEGES;
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'dbuser'@'%';sudo vim /etc/my.cnf
bind-address=0.0.0.0
sudo systemctl restart mysqldUSE examDB;
CREATE TABLE examTable1 (
id INT
);
CREATE USER 'tableuser'@'localhost' IDENTIFIED BY 'redhat';
GRANT ALL PRIVILEGES ON examDB.examTable1 TO 'tableuser'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'tableuser'@'localhost';EXIT;
sudo mkdir -p /db-backups
mysqldump examDB > /db-backups/examDB.sql
ls -l /db-backupsmysql
CREATE DATABASE newExamDB;
EXIT;
mysql newExamDB < /db-backups/examDB.sql
mysql
SHOW DATABASES;
USE newExamDB;
SHOW TABLES;
EXIT;# Problemi
ERROR 1410 → create user '%'
ne radi remote → bind-address
port → ss -tuln | grep :3306
firewall → systemctl stop firewalldsudo dnf install postgresql-server -y
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
systemctl status postgresql
ss -tuln | grep :5432sudo vim /var/lib/pgsql/data/postgresql.conf
# postavi:
listen_addresses = '*'
sudo vim /var/lib/pgsql/data/pg_hba.conf
# dodaj:
host all all 172.25.250.0/24 md5
sudo systemctl restart postgresqlsudo -u postgres psql
CREATE DATABASE "examDB";
CREATE USER dbuser WITH PASSWORD 'redhat';
GRANT ALL PRIVILEGES ON DATABASE "examDB" TO dbuser;
\qsudo -u postgres psql -d examDB
GRANT USAGE, CREATE ON SCHEMA public TO dbuser;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dbuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO dbuser;
\qsudo -u postgres psql -d examDB
CREATE TABLE "examTable1" (id integer);
CREATE USER tableuser WITH PASSWORD 'redhat';
GRANT CONNECT ON DATABASE "examDB" TO tableuser;
GRANT USAGE ON SCHEMA public TO tableuser;
GRANT ALL PRIVILEGES ON TABLE "examTable1" TO tableuser;
\qsudo mkdir -p /db-backups
sudo -u postgres pg_dump examDB > /db-backups/examDB.sqlsudo -u postgres psql -c 'CREATE DATABASE "newExamDB";'
sudo -u postgres psql newExamDB < /db-backups/examDB.sql\l
\du
\c examDB
\dt
\d examTable1
\z examTable1
\q# Problemi
ne radi remote → listen_addresses + pg_hba.conf
nema prava → GRANT na schema public
port → ss -tuln | grep :5432birdgrep -c '^bird' /usr/share/dict/words-c broji podudarne linije, a ^bird znači da linija mora početi s bird.food + broj redagrep -n 'food' /usr/share/dict/words-n dodaje broj reda, a food se može nalaziti bilo gdje u liniji.grep -E '^.{12}$' /usr/share/dict/words^ početak linije, . bilo koji znak, {12} točno 12 puta, $ kraj linije. Dakle, cijela linija mora imati točno 12 znakova.^ početak linije
$ kraj linije
. bilo koji jedan znak
* 0 ili više puta
+ 1 ili više puta
? 0 ili 1 put
{N} točno N puta
{N,} najmanje N puta
{N,M} između N i M puta
[a-z] raspon znakova
[^a] sve osim navedenog
| ili# Primjeri
grep -E '^pre' file
grep -E 'ing$' file
grep -E '^.{5}$' file
grep -E '^[0-9]+$' file
grep -E '^[a-zA-Z]+$' file
grep -E 'cat|dog' file.configfind / -name '*.config'
find / -name '*.config' 2>/dev/null'*.config' su važni da shell ne proširi wildcard prije naredbe find.sshdsystemctl status sshd
ps -C sshd -o pid,user,stat,cmdsystemctl status daje status servisa, a ps daje stvarni proces.ps -C mysqld -o pid,user,%cpu,%mem,stat,cmd
pgrep mysqld
ps aux | grep -v grep | grep mysqldS = sleeping, s = session leader, l = multithreaded. Primjer Ssl znači da je proces u normalnom idle stanju za server, glavni je proces svoje sesije i koristi više dretvi.# Česta zamka
ps aux | grep mysqld
# ako vidiš samo grep mysqld, to NIJE pravi MySQL procesmysqldpgrep mysqld
ps -C mysqld -o pid,ni,cmd
renice -n 19 -p PID
ps -p PID -o pid,ni,cmdnice raspon je od -20 do 19. Vrijednost 19 znači najniži prioritet.ishod3_remotesudo vim /etc/security/limits.d/ishod3_remote.confishod3_remote soft nofile 12000
ishod3_remote hard nofile 12000su - ishod3_remote
ulimit -nsoft je aktivni limit sesije, hard je gornja granica.sudo dnf install httpd -y
sudo systemctl enable --now httpd
systemctl status httpd
ss -tulpn | grep :80
sudo ss -tulpn | grep :80
curl http://localhosthttps://localhost, to ne znači da Apache ne radi. Za ispit je curl http://localhost bolji dokaz.getenforce
setenforce 1
sudo vim /etc/selinux/configSELINUX=enforcing
SELINUXTYPE=targetedsystemctl status httpd
curl http://localhost
reboot# nakon restarta
getenforce
systemctl status httpd
curl http://localhostDocumentRoot. Default /var/www/html već ima ispravan SELinux context.sudo vim /etc/httpd/conf.d/port99.confListen 99semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t -p tcp 99
# ako port već postoji s drugim tipom:
sudo semanage port -m -t http_port_t -p tcp 99sudo firewall-cmd --add-port=99/tcp --permanent
sudo firewall-cmd --reload
httpd -t
sudo systemctl restart httpd
systemctl status httpd
curl http://localhost:99
sudo ss -tulpn | grep :99semanage port./webapp + SELinuxsudo mkdir -p /webapp
echo 'OVO JE WEBAPP INDEX STRANICA' | sudo tee /webapp/index.html
ls -l /webapp
cat /webapp/index.htmlsudo semanage fcontext -a -t httpd_sys_content_t '/webapp(/.*)?'
sudo restorecon -Rv /webapp
ls -Zd /webapp
ls -Z /webappsudo vim /etc/httpd/conf.d/webapp.conf<VirtualHost *:99>
DocumentRoot "/webapp"
<Directory "/webapp">
Require all granted
</Directory>
</VirtualHost>httpd -t
sudo systemctl restart httpd
systemctl status httpd
curl http://localhost:99# Ako dobiješ default Red Hat page umjesto /webapp sadržaja
ls /etc/httpd/conf.d/welcome.conf
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
sudo systemctl restart httpd
curl http://localhost:99semanage fcontext + restorecon.grep -c '^bird' /usr/share/dict/words
grep -n 'food' /usr/share/dict/words
grep -E '^.{12}$' /usr/share/dict/words
find / -name '*.config' 2>/dev/null
systemctl status sshd
ps -C sshd -o pid,user,stat,cmd
ps -C mysqld -o pid,user,%cpu,%mem,stat,cmd
pgrep mysqld
ps -C mysqld -o pid,ni,cmd
renice -n 19 -p PID
sudo vim /etc/security/limits.d/ishod3_remote.conf
su - ishod3_remote
ulimit -n
sudo dnf install httpd -y
sudo systemctl enable --now httpd
getenforce
setenforce 1
sudo vim /etc/selinux/config
sudo vim /etc/httpd/conf.d/port99.conf
sudo semanage port -a -t http_port_t -p tcp 99
sudo firewall-cmd --add-port=99/tcp --permanent
sudo firewall-cmd --reload
sudo mkdir -p /webapp
echo 'OVO JE WEBAPP INDEX STRANICA' | sudo tee /webapp/index.html
sudo semanage fcontext -a -t httpd_sys_content_t '/webapp(/.*)?'
sudo restorecon -Rv /webapp
sudo vim /etc/httpd/conf.d/webapp.conf
httpd -t
sudo systemctl restart httpd
curl http://localhost
curl http://localhost:99
sudo ss -tulpn | grep :80
sudo ss -tulpn | grep :99