Cunostinte avansate de drepturi (optional)
Bineinteles ca, in unele situatii, avem nevoie de drepturi specifice pentru mai multi utilizatori din sistem. De exemplu, sa presupunem ca avem un folder cu codul sursa al unei aplicatii. In acest caz, administratorii au nevoie de drepturi de citire si de executie, dar nu au nevoie de drepturi de scriere. Programatorii au nevoie de drepturi de scriere si de citire, dar nu au nevoie de drepturi de executie. Juniorii, care trebuie instruiti, au nevoie de drepturi de citire, dar nu este recomandat sa le dai drepturi de executie sau de scriere. Este deja evident ca treaba e complicata si un sistem de rwx pentru owner, group si others nu este suficient. Pentru cazuri de acest gen recomand FACL, respectiv File Access Control List, care permite configurarea individuala a drepturilor de rwx pentru fiecare utilizator si grup din sistem. Comanda care seteaza acest ACL este setfacl si comanda care afiseaza toate drepturile adaugate unui fisier este getfacl. Se poate observa usor ca unui fisier i-a fost atasat un ACL, deoarece are un + (plus) langa coloana drepturilor. Acest pachet trebuie instalat, deoarece nu face parte din distributie.
Drepturile rwxrwxrwx (read, write, execute pentru user, group, others) pot fi reprezentate si in forma binara, respectiv 111 111 111 sau 777 in acest caz. Pentru rw-r--r--, reprezentarea binara este 110 100 100 sau 644. De exemplu, daca dorim sa oferim pentru un fisier drepturi de executie proprietarului si nici un drept altor persoane, putem sa folosim comanda chmod 700 fisier, deoarece 700 reprezinta 111 000 000, adica rwx------.
Comenzi importante
sudo – super user do; permite executarea oricarei comenzi cu drepturi de root
cd – change directory
ls – list directory contents
ll sau ls -al – a inseamna all si afiseaza inclusive folderele hidden
mkdir – make directory
touch – make a file
mv – move
cp – copy
man – deschide o pagina de manual pentru orice comanda
stat – informatii despre un fisier (cand a fost ultima oara modificat, cand a fost creat)
chown – modificarea proprietarului unui fisier/dosar
chmod – modificarea drepturilor unui fisier/dosar
cat – printeaza in consola continutul unui fisier
tail – afiseaza ultimele randuri dintr-un fisier (util pentru log-uri)
head – afiseaza primele randuri dintr-un fisier
less – deschide un fisier pentru a vizualiza continutul lui
useradd – adauga un utilizator in sistem
userdel – sterge un utilizator din sistem
ps -ef – afiseaza toate procesele din sistem
grep – returneaza randurile dintr-un fisier care contine un string/regex
find – cauta fisiere si foldere in functie de nume
locate – find pe alte distributii
apt-get install – instaleaza o aplicatie in sistem (pe debian sau Ubuntu)
yum install – acelasi lucru pe redhat
kill -9 – omoara un process
top – afiseaza cat procesor si cat ram mananca fiecare serviciu din sistem si cat procesor si ram mai are sistemul disponibil
htop – un top mai smecher, dar trebuie instalat
uname -a – afiseaza numele distributiei sistemului, versiunea kernelului si alte informatii; este util pentru a afla daca sistemul de operare este Debian, Ubuntu, AIX, Solaris, Redhat, CentOS, Slackware etc
w – arata de cat timp este serverul deschis si utilizatorii autentificati in sistem
/etc/init.d/numele_serviciului start,stop,restart,reload – permite aceste operatiuni pentru majoritatea serviciilor din sistem (daca aveti pe sistem o aplicatie care nu are configurat acest script, cel mai probabil acea aplicatie trebuie stearsa si uitata)
mount – permite montarea (instalarea) unui drive (HDD, SSD, SAN etc)
df – afiseaza spatiul folosit pentru fiecare partitie din sistem
du – afiseaza spatiul pe care il ocupa un folder sau un fisier
nano – editor text pentru consola; echivalentul lui notepad pentru consola; presupune o lista simpla de comenzi care e afisata tot timpul pe ecran; recomand folosirea lui la inceput
vim – editor text foarte puternic, dar cu learning curve anevoios; echivalentul lui notepad++; presupune o lista lunga de comenzi care trebuie invatata pe derost si preferabil, printata si pastrata undeva langa laptop; contine foarte multe pluginuri si poate fi transformat intr-un mediu de programare foarte bun pentru scripturi Bash/PHP/Python/Perl; pentru barbati
wget – downlodeaza print HTTP/S o pagina web sau un fisier
curl – ca wget, dar mai smecher; stie PUT, POST, DELETE etc
netstat - conform man, afiseaza network connections, routing tables, interface statistics, masquerade connections, multicast memberships; foarte util in analiza legata de network
netstat -tlnp – TCP, LISTENING, NUMERIC, PID, adica afiseaza aplicatiile care asculta pe TCP
netstat -tanp – acelasi lucru, dar ACTIVE in loc de LISTENING; pentru conexiuni active
Pipe intre doua comenzi
In Linux este posibil sa filtram output-ul unei comenzi printr-o alta comanda. Un exemplu bun este cel cu grep, care trebuie cunoscut pentru folosirea cu usurinta a unui sistem Linux. De exemplu, daca dorim sa vedem PIDul serverului mysql, putem sa rulam comanda ps -ef si vom obtine un rezultat de acest gen:
distPoint ~ # ps -ef | grep mysql mysql 1024 1 0 Apr24 ? 00:02:54 /usr/sbin/mysqld root 18593 17699 0 18:59 pts/0 00:00:00 grep --color=auto mysql
In acest fel putem sa ne dam seama ca PIDul daemonului de mysql este 1024 si ca procesul a fost initiat de utilizatorul msyql si bineinteles vedem si ca utilizatorul root a folosit comanda grep mysql.
Servicii, procese, aplicatii, daemon-uri
Pana acum am discutat cum putem sa ne invartim pe un sistem Linux, dar nu am aratat cum putem sa facem ceva folositor cu el. In mare marte, la inceput este necesar sa cunoastem numele serviciilor si asta doresc sa acopar in acest capitol. Mai jos se gaseste o lista cu cateva servicii si procese care sunt foarte des regasite pe un sistem linux:
init – proces cu IDul 1, care este tatal tuturor celorlalte procese; practic, acest process deschide alte procese ca si copii ai sai
cron – echivalentul lui Task Scheduler de pe Windows; permite rularea unui anumit script la o anumita ora in fiecare zi, sau intr-o anumita zi din luna, sau o data pe an; este folosit des in operatiuni cum ar fi stergerea log-urilor, curatarea datelor invechite dintr-o baza de date, arhivarea anumitor documente care nu mai sunt accesate active; se opereaza cu ajutorul comenzii crontab
bash – versiunea default de Unix Shell, respective de interfata de tip consola (fara GUI)
sshd – SSH deamon este responsabil pentru oferirea serviciului SSH (Secure Shell), respectiv o conexiune criptata la bash
named sau bind – server de DNS
apache2 sau httpd – server web folosit pentru site-uri scrise in PHP, python, ruby, perl
nginx – server web, la fel ca apache2, dar cu un comportament usor diferit in situatii de load;
postfix sau master – server smtp
dovecot – server imap si pop3
mdadm – manage MD devices aka Linux Software RAID; ofera RAIDuri la nivel Linux (alternativa a RAIDurilor BIOS/hardware); se foloseste de obicei impreuna cu tehnologia LUKS (care este o specificatie de criptare a drive-urilor) si mount (care permite atasarea drive-ului)
proftpd, glfptd – servere de ftp
netfilter – un framework/modul din kernelul de linux care permite operatiuni de retea, care permite filtrare de pachete, NAT, port forwarding, firewall etc; nu apare ca process, deoarece face parte din kernel; nu poate fi apelat prin comenzi din bash si este folosit prin intermediul altor interfete sau de librariile aplicatiilor/serviciilor
iptables – o interfata care permite folosirea frameworkului netfilter; practic, de aici se fac toate setarile de firewall, de NAT si de port forwarding din linux; nu este un proces de linux, pentru ca este doar o interfata pentru netfilter; a fost inlocuit de nftables in ultimul kernel de linux, dar majoritatea distributiilor (de exemplu Ubuntu) inca il folosesc pentru ca este considerat stabil
nftables – proiect care doreste sa inlocuiasca iptables si arptables; are la baza tot netfilter, dar livreaza o versiune mai usor de folosit si mai rapida; este considera inca beta si instabil
ufw – Uncomplicated Firewall; este o interfata pentru iptables care permite configurarea unui firewall fara mult stres; este instalat by default pe cateva distributii (inclusiv Ubuntu) si recomand folosirea lui; nu apare ca proces
git sau svn – sisteme de versionare; sunt folosite pe orice proiect de programare
mysqld – deamon pentru o baza de date mysql; recomand studierea bazelor de date relationale, in cazul in care nu exista cunostinte in aceasta arie
nagios sau nrpe – server sau client de nagios (tool folosit pentru monitorizare)