In continuare voi enumera „cateva“ comenzi linux, in ordine alfabetica. Am scris „cateva“ deoarece sunt „suficient“ de multe si o parte din ele poate ca sunt foarte rar folosite sau chiar deloc. Voi incepe cu prezentarea comenzilor in ordine alfabetica si cu cele care sunt cele mami semnificative.
„a“
apropos
apropos string
comanda va cauta in baza de date argumentul dat (string), afisand toate posibilele apartenente ale valorii stingului la anumite comenzi
arp
arp [options]
este ocomanda TCP/IP. Sterge, scrie sau blocheaza in modulele kernel ARP (address resolition protocol) cache (/proc/net/arp). ARP se utilizeaza la translatarea protocolului hardware a interfetei de retea pentru utilizare. Adresa de ARP poate sa aiba cateva valori predefinite: C (complet), M (permanent), P (publish). Ca si optiuni prezinta urmatoarele:
-a [hosts] afiseaza adresele arp ale ultimelor hosturi accesate (utilizare de forma arp -a)
-d host [pub], --delete host [pub] stergere pentru intrarile specificate
-D, --user-device stergerea adresei pentru o interfata specificata
-f file, --file file citeste intrarile din fisierul file si adauga
-H type, --hw-type type, -t type cauta intrarile dupa type pentru interfata de internet considerata implicita
-i interface, --device interface selectarea interfetei de catre utilizator
-n, --numeric afisarea tuturor adreselor de IP pentru numele de domeniu specificat
-v, --verbose utilizare in mod verbose
acpi
acpi [options]
afisarea informatiilor despe ACPI (advanced configuration and poer interface) ale sistemului care se gaseste in fisierul /proc/acpi. De la versiunile superioare ale kernel 2.4 este suportat hardware. Cateva din optiuni ar fi:
-b, --battery fisarea informatiilor despre baterie
-B, --without-battery nu afiseaza informatii despre baterie
-t, --thermal afisarea informatiilor despre temperatura
-T, --without-thermal nu afiseaza informatii despre temperatura
-a,--ac-adapter arata informatii depre adaptorul de alimentare
-A, --without-ac-adapter nu afiseaza informatii despre adaptorul de alimentare
-V, --everything afiseaza toate informatiile disponibile
apt
apt
comanda pentru managementul pachetelor software instalate. Acest pachet este disponibil pentru mai multe distributii avand o mare raspandire in cadrul distributiei Debian, Fedora, etc.
„b“
banner
banner [option] [characters]
printare a sirului de caractere specificat. Daca nu este specificat este afisat promptul de comanda in cazul in care se refera la logarea pe sistem. Optiuni:
-w width selectarea inaltimii caracterelor
bash
bash [options] [file] [arguments] sh [options] [file [arguments]]
comanda ne specifica interpretorul de comenzi bash in acest caz (in cele mai multe distributii de linux este interpretor de comenzi implicit)
bc
bc [options] [files]
bc este un limbaj (si compilator) cu sintaxa a limbajului C. cateva optiuni ar fi:
-h,--help printare a mesajelor si iesire
-i, --interactive mod interactiv
-l, --mathlib utilizarea librariilor math disponibile
-s,--standard ignorare a extensiilor si procesare exact ca in POSIX
-w,--warn utilizare a extensiilor POSIX
-q,--quiet nu afiseaza mesajul de intampinare
-v,--version afisarea versiunii
bzip2
bzip2 [options] filenames bunzip2 [options] filenames bzcat [option] filenames bzip2recover filenames
utilizare pentru compresia si decompresia fisierelor (similara comenzii gzip), utilizand algoritmi diferiti de compresie si codare). cateva optiuni ar fi:
19 noiembrie 2007
Comenzi linux (I)
Publicat de hadrian popescu la 08:26 0 comentarii
Etichete: bash
3 octombrie 2007
Putin „bash shell scripting”
Cum sa scriem primul script !!!
Problema de a scrie un fisier care sa contina “ceva” si care sa fie executat in anumite momente din timp este imperios necesara (la actionarea unei taste, a unei comenzi sau automat). Dar pana sa ajungem acolo cred ca va trebui sa stim si cum se face acel fisier si multe alte chestii (vom incepe cu lucrurile de baza).
Deci cred ca o sa tratez doar sistemul de operare LINUX (cu doua componente:server si statie de lucru). Si de ce nu sa nu facem si reclama pentru server folosesc CentOS 5.0 si statie de lucru SuSE 10.3. Gata cu filozogia........... sa trecem si la treaba.
In primul rand va trebui sa editam un fisier sau sa scriem in fisier deja existent. Va trebui sa stim ce editor de text avem al dispozitie sau ce fel de interpretor etc etc. Sunt multe aspecte si care pe parcursul textelor scrise “isi vor arata” coltii.
Ca si editoare de text vom gasi pe distributiile de linux sau unix urmatoarele:
- vi, un editor “greoi” sau cum vreti voi sa ziceti dar nu este chiar asa;
- emacs, care este un editor imens dar dare acopera aproape tot ce dorim de la un editor;
- pico, un editor foarte mic si care este foarte intuitiv de utilizat;
- gedit, editor pentru interfata Gnome;
- kedit, editor pentru interfata Kde;
- mcedit, un editor foarte intuitiv si foarte usor de utilizat;
- joe, un editor foarte mult utilizat.
Si acum sa incepem. Avem doua cai de urmat:
- sa screeam un fisier “gol” si apoi sa-l editam;
- sa editam direct fisierul cu editorul de text.
In cazul primei variante vom folosi: touch script1.txt, urmand sa il editam cu unul din editoarele de mai sus. Alegand varinata a II-a vom utiliza ca ex. joe script1.txt si gata este ok si asa.
Ca in toate exemplele din literatura de specialitate vom folosi si noi aceleasi continuturi, mai precis:
#!/bin/bash
# acesta este primul fisier script
echo "Hello World!"
Prima linie din continutul fisierului este foarte importanta deoarece specifica interpretorul care este folosit, in cazul nostru fiind bash (dar poate sa fie awk, perl sau un alt interpretor). Linia a II-a este un comentariu, orice este scris dupa # va fi ignorat de bash. Linia a III-a este o comanda simpla care “tipareste” afiseaza pe ecran ceea ce este intre caracterele '' '' , in acest caz Hello World! .
Urmatorul pas in a face ca acest fisier sa poata fi executat este setarea permisiilor de executie asupra fisierului. In cazul nostru vom folosi: chmod 755 script1.txt . Pentru executarea acestui fisier vom avea nevoie doar ca sa scriem ./script1.txt . Dupa lansarea in executie vom primi ca si mesaj afisat pe ecran textul care a fost scris intre ghilimele.
O problema care se poate in acest moment sa apara este imposibilitatea executarii comanzii !!! Problema poate sa provina din faptul ca: calea de executie a script-ului sa nu fie cunoscuta de sistemul de operare. Problema se poate corecta din doi pasi. Primul ar fi sa stim ce avem definit in setarile de PATH si pasul doi ar fi trecerea noului sau noilor cai de access la fisier sau director in setarile globale ale PATH. Pentru a vedea toate setarile pentru PATH vom folosi urmatoarea comanda:
echo $PATH
Aceatsa comanda ne va returna toate caile pe care sistemul de operare le cunoaste. Daca dorim sa modificam acestora folosim:
export PATH=$PATH:director unde director este calea noua pe care o dorim
A doua optiune este ca aceasta noua cale sa fie trecuta in fisierul global de configurare. Daca utilizam directorul personal de lucru acesta este trecut implicit de sistemul de operare, sistemele de operare actuale fiind foarte flexibile ramane la latitudinea utilizatorului sa efectueze setari asupa mediului personal de lucru sau asupra mediului global.
Publicat de hadrian popescu la 10:34 0 comentarii
Etichete: bash
1 octombrie 2007
linux firewall (2)
In linux firewall (1) am facut o scurta prezentare pentru un firewall care se preteaza pentru o legatura spre Internet si o legatura spre LAN (intern). Cred ca este bine sa discutam si structura prin care dorim realizarea legaturii la interent. Aceasta structura depinde ne necesitatile/cerintele organizatiei care va realiza acest tip de lageatura. Mai departe voi prezenta cateva modele "generale" prin care se vor face aceste legaturi la INTERNET.
Figura urmatoare (fig.1)prezinta o topologie simpla de legare la INTERNET.
Am realizat o structura simpla de conectare cu urmatoarele elemente:
a. router
b. firewall
c. hub/switch
Urmatoarea structura (fig.2) prezinta in plus zona demilitarizata cu un servere care poate sa aiba diferite functii.

Realizare fizica este asemanatoare fig.1 doar ca prezinta in zona DMZ serverul care asigura anumite servicii.
Urmatoare structura devine mai complexa, deoarece in zona DMZ sunt prezente serverele care vor asigura anumite servcii. Acesta structura (fig.3) este cel mai utilizata, avand unele modificari in functie de necesitati.

Mergand mai departe vom avea structura mai complexa care o vom gasii aplicata la asigurarea serviciilor de catre organizatii specializate. Acesta structura (fig.4) reprezinta o structura tipica organizatiilor care vor asigura servicii pentru "terte" organizatii.

Publicat de hadrian popescu la 08:01 0 comentarii
Etichete: firewall
25 septembrie 2007
monitorizare partitii in linux
In general masinile unix pot creea probleme foarte mari in momentul in care spatiul pe discurile (sau partitiile) alocate pentru utilizare este alocat cu date in proportie de 100%. In acest moment problemele aparute pot crea crea probleme cu o mare natura a diversitatii lor dar cea mai importanta problema este pierderea datelor, care de cele mai multe ori este ireversibila. Posibilitatea de recuperare a datelor in acest caz este de domeniul "uita de ele ca nu se mai poate face nimic".
Pentru a nu ajunge in aceasta "ipostaza" este nevoie de o "forma" de monitorizare a sapatiului fizic care poate sa fie utilizat pe discurile din sistem sau partitiile acestuia.
Comanda "df -k" ne ajuta in acest sens sa aflam spatiu fizic liber care se gaseste pe partitiile pe care sistemul de operare le foloseste. Nu voi insista aici pentru partitiile montate/nemontate care sunt folosite in scopuri mult mai dedicate. Un output al comenzii df -k poate arata de forma:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 30833736 5195932 24071468 18%
/udev 128160 116 128044 1% /dev
/dev/sda1 798476 25236 732680 4% /boot
/dev/sdb1 15820524 389608 14627268 3% /squid_1/
/dev/sdb2 19457392 2354440 16114556 13% /squid_2
Problema ca cineva sa realizeze aceasta operatie la o anumita perioada de timp cred ca este de domeniul trecutului. Am facut o scurta "radiografie" a serviciilor pe care ni le ofera crontab si cred ca este timpul ca o mare parte a operatiilor care necesita sa zicem "mentenanta" sa fie folosite cu aceste unelte.
Mai jos prezint un mic "programel", cred ca-i putem zice si "script" care ne va spune modul de utilizare a discurilor/partitiilor.
#!/bin/sh
# script de monitorizare a spatiului de pe disk
# dupa rrealizarea operatie se va trimite un mail la contul de administrator
# implicit valoarea de monitorizare este de 90% a spatiului ocupat
# la fel va trebui sa scriem explicit adresa de mail a administratorului (am folosit adresa mea de mail)
ADMIN=hadrian.popescu@gmail.com
# alegem valorea "pragului de alerta" implicit este de 90%
ALERT=90
df -H grep -vE '^Filesystemtmpfscdrom' awk '{ print $5 " " $1 }' while read output;
do
#echo $output
usep=$(echo $output awk '{ print $1}' cut -d'%' -f1 )
partition=$(echo $output awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
mail -s "PROBLEME : depasire spatiu pe disk $usep" $ADMIN
fi
done
Nu cred ca va avea rost sa insist la modul de functionare interna. Este foarte simplu in momentul in care spatiul pe disk/partitii depaseste 90% din procentul maxim de 100% a spatiului disponibil se va trimite un mail de avertizare la contul de mail specificat.
Cam asta ar fi totul despre acest mic subiect. Cum facem sa fie "automatizat" cu ajutorul lui cron cat de curand..........
Publicat de hadrian popescu la 18:51 0 comentarii
Etichete: monitorizare
24 septembrie 2007
crontab (1)
In general (dupa cum stie lumea) este pentru executarea periodica a unor sarcini sau chiar rerpetitiva.
Comanda pentru editarea este: # crontab -e
Sintaxa comenzii este de forma:
1 2 3 4 5 /calea/catre/comanda arg1 arg2
—1 valoare minute (0-59)
—2 valoare ora (0-23)
—3 valoare zi (0-31)
—4 valoare luna (1-12, 12=decembrie)
—5 valoarea zilei din saptamana (0-7, 7 sau 0 = duminica)
/calea/catre/comanda calea catre numele comenzii care urmeaza sa fie executata
Forma explicita (care o veti gasi in orice sistem de operare linux) este de forma:
* * * * * /calea/catre/comanda
-------valoarea zilei din saptamana (0-7, 7 sau 0 = duminica)
-----valoare luna (1-12, 12=decembrie)
---valoare zi (0-31)
--valoare ora (0-23)
-valoare minute (0-59)
Exemplu:
5 0 * * * ruleaza comanda la 5 minute dupa ora 24:00
15 14 1 * * ruleaza comanda la ora 14:15 in prima zi a lunii curente
0 22 * * 1-5 ruleaza comanda la ora 22 pentru zilele din saptamana de luni pana vineri
23 0-23/2 * * * ruleaza comanda la minutul 23 din 2 in 2 ore (ora 00:00, 02:00,04:00…)
Utilizarea operatorilor
—“*” reprezinta orice valoare posibila pentru pozitia curenta
—“,” reprezinta o lista a valorilor 1,5,10,15,20
—“-” reprezinta un interval al valorii (10-15 zilele 10 pana la 15, care este echivalentul 10,11,12,13,14,15)
Implicit rezultatul comenzii rulate este trimis contului de admninistrator local. Pentru dezactivarea aceteia implicit se foloseste: "appent > /dev/null 2>&1"
Pentru utilizarea comenzii folosim:
—crontab –l listare a fisierului de comenzi
—crontab –e pentru operatii de scriere/citire asupra fisierului de comenzi
O problema "majora" ar fi modul de editare al fisierului in sine care implicit se realizeaza cu utilitarul vi. Fiint pentru unii utilizatori mai usor sau mai greoi (asta nu avem de unde sa stiim) cred ca cel mai bine ar fi utilizarea editorului "joe" cu urmatoarea comanda:
$export EDITOR=joe urmat de $joe /etc/crontab
Si acum cateva exemple mai "intuitive" daca le pot numi asa:
—Utilizare script pentru prima sambata din luna curenta:
00 01 1-7 1-12 * if [ "$(date +%a) = "Sat" ]; then /path/to/script.sh; fi
—Rulare la ora 14:00 in data de 29 decembrie in ziua 4 a saptamanii (marti):
— 0 14 29 12 4 /path/to/command
Publicat de hadrian popescu la 18:35 0 comentarii
Etichete: monitorizare
23 septembrie 2007
linux firewall (1)
un firewall in cea mai simpla forma:
# 1 politici implicite
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# 2 lant definit de utilizator pentru pachetele tcp acceptate
iptables -N okay
iptables -A okay -p TCP --syn -j ACCEPT
iptables -A okay -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A okay -p TCP -j DROP
# 3 reguli pentur lantul de intrare
iptables -A INPUT -p ALL -i eth1 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 10.0.0.1 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 123.45.67.89 -j ACCEPT
iptables -A INPUT -p ALL -i eth1 -d 10.0.0.255 -j ACCEPT
# reguli pentru pachetele provenite din internet
# pachete pentru conexiunile stabilite
iptables -A INPUT -p ALL -d 123.45.67.89 -m state --state ESTABLISHED,RELATED -j ACCEPT
# reguli TCP
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 21 -j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 22 -j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 80 -j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 113 -j okay
# reguli UDP
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 53 -j ACCEPT
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 2074 -j ACCEPT
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 4000 -j ACCEPT
# reguli icmp
iptables -A INPUT -p ICMP -i eth0 -s 0/0 --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP -i eth0 -s 0/0 --icmp-type 11 -j ACCEPT
# 4 reguli pentru lantul de forward
# accepta pachete de forwardat
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -m -state --state ESTABLISHED,RELATED -j ACCEPT
# 5 reguli pentru lantul de iesire
# permite iesirea doar pentru pachetele din reteaua locala (pentru prevenire spoofing)
iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 10.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 123.45.67.89 -j ACCEPT
# 6 reguli pentru lantul de postroutare
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 123.45.67.89
# 7 reguli pentru lantul de preroutare
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000
iptables -t nat -A PREROUTING -p tcp -d 123.45.67.89 --dport 25 -j DNAT --to-destination 10.0.0.2
# interfata esterioara este eth0 123.45.67.89
# interfata interna este eth1 10.0.0.1
# statiile lan din retea au adresele intre 10.0.0.2 la 10.0.0.254
si acum explicatiile ar fi de forma:
Sectiunea 1 specifica politica implicita pentru lanturile prestabilite: orice pachet pentru care nu exista o regula definita in mod explicit va fi refuzat prin mecanismul DROP. Pentru ca un pachet sa trebuiasca sa treaca este necesar sa corespunda unei reguli de ACCPT-are.
Sectiunea 2 creeaza un lant definit de utilizator, numit okay, care va fi folosit pentru a realiza unele validari asupra pachetelor care solicita cerereri de conexiune si care se doresc acceptate. Astfel se permite trecerea pachetelor SYN (care solicita cereri de conexiune noua), a celor asociate cu o conexiune deja initiata (ESTABLISHED) si a celor care initiaza o conexiune legata de una aflata in desfasurare (RELATED). Ultima linie indica ca oricare pachet care nu indeplineste una din conditiile de mai sus va fi aruncata (DROP).
Sectiunea 3 stabileste regulile corespunzatoare lantului de intrare in firewall (input).
Aceasta sectiune este impartita in:
Pachetele cu origine in LAN. Prima linie precizeaza firewall-lului sa accepte pachetele destinate oricaror protocoale care isi au originea in LAN (10.0.0.0/8 in acest caz). Urmatoarele trei linii permit trecerea pachetelor care provin de la adresele valide ale firewall-lului, respectiv dispozitivele: lo, eth0, eth1. Ultima linie accepta pachetele difuzate in LAN.
Pachetele cu iriginea in internet (conexiuni deja realizate). Se stabileste ACCEPT-area pachetelor care sunt asociate unor conexiuni tip ESTABLISHER sau RELATED si care sunt solicitate la adresa IP externa a firewall-lului.
Reguli pentru TCP (conexiuninoi). In aceasta sectiune se dechid porturile pentru serviciile pe care le oferiti fiecarui utilizator din internet. FTP (port 21), Ssh (port 22), WEB (port 80) si IDENTD (port 113), acesta din urma fiind folosit pentru unele protocoaleprecum IRC. Pentru fiecare din acestea se face un salt la lantul okay, pe care l-am definit mai sus, pentru a verifica mai in profunzime daca pachetele s-au format corespunzator.
Reguli pentru UDP (conexiuni noi). Se definesc reguli de acceptare a pachetelor pentru serviciile UDP. De exemplu se accepta conexiuni pe portul 53 in cazul in care calculatorul este configurat ca si server DNS. Portul 2074 este necesar pentru unele aplicatii multimedia, iar portul 4000 este folosit de protocolul ICQ.
Reguli pentru ICMP. Mesajele ICMP sunt destinate pentru semnalarea unor circumstante in care se gaseste serverul. Am ales sa accepte doar pachetele de tipul 8 (necesare daca se doreste ca sistemul sa raspunda la comanda ping) si de tipul 11, folosit la comanda traceroute.
Sectiunea 4 defineste reguli pentru lantul FORWARD. Deoarece calculatorul indeplineste si functia de router, aici se definesc reguli cu privire la pachetele care vor trece sau nu vor trece prin acesta. Prima linie permite trecerea tuturor pachetelor cu originea in LAN, iar cea de-a 2 permite trecerea pachetelor cu originea in internet, dar asociate cu o conexiune stabilita.
Sectiunea 5 defineste regulile pentru lantul OUTPUT. Aceste reguli au rolul de a preveni un atac de tip spoofing (falsificarea adresei de ip), initiat de cineva de la sistemul firewall. Fiecare pachet care iese din firewall trebuie sa aiba drept adresa sursa una din interfetele: lo, eth0 sau eth1.
Sectiunea 6 defineste reguli pentru lantul de POSTROUTING din tabela nat. se aplica acelor pachete care au fost acceptate, dar care necesita unele operatii suplimentare. Aici se produce operatia de translatare a adreselor (nat): adresele tuturor pachetelor destinate internetului vor fi convertite in adresa placii externe de retea (eth0). Am folosit SNAT deoarece am o adresa publica alocata static. De asemenea, pentru a utiliza NAT este necesar sa activati IP forwarding-ul din kernel. Aceasta se poate realiza modificand valoarea net.ipv4.ip_forwarding in 1 in fisierul /etc/sysctl.conf, folosint orice editor de text.
Daca sunteti multumit de regulile existente la un moment dat le puteti salva folosind comanda iptables save > /etc/sysconfig/iptable.
Alte utilizari pentru iptables
Pe langa utilitatea sa de firewall, cu filtrarea pachetelor iptables poate avea si alte utilizari in cadrul unui sistem cu destinatie router/gateway. Astfel el poate fi folosit pentru:
Crearea unui intermediar transparent. Folosind REDIRECT puteti redirectiona traficul destinat unui anumit port al sistemului catre un alt port pe care “asculta” un serviciu proxy, si toate acestea fara ca utilizatorul sa remarce ceva. Comanda de mai jos redirecteaza traficul destinat serviciului WEB (port 80) catre portul 8000: iptables -t nat -A PREROUTING -p tcp - - dport 80 - - j REDIRECT - - to-ports 8000.
Realizarea operatiei de port forwarding. Aceasta este utila cand avem o singura adresa IP publica si aveti serverele pe care vreti sa le vedeti din exterior pe mai multe calculatoare, aflate in spatele firewall-lului. Exemplul de mai jos directioneaza toate cererile destinate portului 80 de pe sistemul firewall catre portul 80 al calculatorului cu IP 10.0.0.2 ,aflat in LAN: iptables - - t nat - - A PREROUTING - - p tcp - - d 123.45.67.89 - - dport 80 - - j DNAT - - to-destination 10.0.0.2.
Utilizarea consemnarii in jurnal. Folosind optiunea LOG puteti pastra in jurnalele sistemului informatii despre pachetele care indeplinesc anumite criterii (in general cele suspecte). Exemplu: iptables - - A FORWARD - - p tcp - - j LOG - - log-level info. Puteti folosi oricare din urmatoarele nivele de jurnal disponibile: emerg, alert, crit, err, warning, notice, info, debug.
Publicat de hadrian popescu la 10:31 1 comentarii
Etichete: firewall