LPIC-1 - Kaku konspekt 2016, 2. osa
JÄTKUU....
LPIC-1 - Kaku konspekt 2016, 1. osa
Käsukestad
Peamiselt siin bash.
Kest pannakse kirja /etc/passwd-i (kui ei ole, tuleb bash).
Sisselogimise blokeerimine: panna shelliks /bin/false või /sbin/nologin (viimane annab vastava teate).
tühikutega teksti võib panna jutumärkidesse või panna tühiku ette \
TERVITUS="Tere tere!" on sama mis TERVITUS=Tere\ Tere!
vaikimisi defineeritakse vaid samale kestale, mitte tuletistele - seetõttu ./programm -käivitamisel need edasi ei lähe (avatakse uus kest)!
lahendus on muutuja eksport - siis antakse edasi "lastele".
Vastassuunalise protsessi jaoks ("lapse" defineeritud muutuja kasutamine "vanemas") tuleb "laps" käivitada mitte täitmise, vaid pöördumisega (source - sarnaselt kesta häälestusfailidega): source ./skript või . ./skript
muutujate väärtustamine ja nullimine
lihtsal tasemel set ja unset - NB! unset ilma dollarimärgita!
set ilma parameetriteta näitab kõiki muutujaid.
set +/- omadus - kesta omaduste seadmine. - on seadmine, + on tühistamine!
Näiteks:
set -x või set -o xtrace - käskude kuvamine ekraanil (kasulik skriptide silumisel) set -C või set -o noclobber - ei luba suunamistel olemasolevaid faile üle kirjutada
saab määrata ka positsioonilisi parameetreid. Näiteks
set a b c d e f echo $1 // väljastab a echo {4} // väljastab d
Alamkesta kasutamine
Alamkesta avamiseks tuleb vastavad käsud panna sulgudesse, käskude vahele semikoolonid.
Näide:
echo "Algne kest: tase $BASH_SUBSHELL, kesta PID $$" FOO=bar echo "Muutuja väärtus $FOO" (FOO=boo; echo -n "Alamkest: tase $BASH_SUBSHELL."; echo "Muutuja väärtus $FOO"; echo "PID: $$") echo "Uuesti algne kest, muutuja väärtus $FOO"
NB! PID jääb samaks!
BASH_SUBSHELL - bashi muutuja, näitab alamkesta taset $$ - jooksva protsessi PID
env kasutamine skriptides (vaikimisi kuvab kõik muutujad)
shebang ehk #!/interpretaator - määrab, millega tuleb skript käivitada (N: /usr/bin/ruby, /usr/bin/python, /bin/bash)
kui aga interpretaatori asukoht ei ole täpselt teada, saab seda env-iga PATH-ist otsida: #!/bin/env ruby
env -i - keskkonnamuutujate algväärtustus
Sisselogimise häälestusfailide poole pöördumine
1. /etc/profile (ja kui on, siis /etc/profile.d/ sisu) 2. ~/.bash_profile - kui ei ole, otsitakse .bash_login või .profile -faile 3. ~/.bashrc - pöördutakse .bash_profile-ist 4 ~/.bash_logout - väljalogimisel viimasena. Peamine mõte on clear-käsk ehk ekraani puhastamine
Muu kestakasutus (ilma sisselogimata) - ainult ~/.bashrc (Red Hatil kutsub see omakorda välja /etc/bashrc)
PATH
vaikimisi otsitavate kataloogide kogum. Muutuja PATH, eri kataloogid eraldatud koolonitega
Näide: /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin; /home/sean/bin:/home/sean/cxoffice/bin:/opt/IBMJava2-142/jre/bin/
Enamasti lisatakse kasutaja kodukataloog olemasolevale PATH-ile: export PATH=$HOME/bin:$PATH.
Jooksva kataloogi lisamine: export PATH=$PATH: Turvarisk! Võimaldab luua kurja programmi, nimetada see näiteks ls-iks ja käitada prioriteediga päris ls-i ees!
aliased - käskude lühikujud. Alias on suurema prioriteediga kui PATH-i käsud! Aliasest möödapääsus tuleb kas anda käsk koos täis-kataloogiteega (bin/rm) või panna ette paosümbol \ (\rm).
funktsioonid - üldkuju: function nimi(){ käsud } . Näide:
function dircp () { tar -cf - * | ( cd $1 && tar -xf - ) }
Parameetrid $1, $2 jne. Kõik parameetrid korraga - $*
PS1 - prompti muutmine
$ PS1="\h:\w\$ " bob:~/tmp$
h - hostname w - jooksev kataloog $ - dollar (tavaprompt)
NB! Makrod algavad \ -ga!
PS2 - lisaprompt, mida näidatakse rohkem kui 1-realiste käskude puhul (vaikimisi on see >)
uue kasutaja loomise vaikimisi info
useradd kasutab vaikimisi /etc/skel väärtusi muudetav failist /etc/default/useradd .
Minu Minti läpaka /etc/skel:
kakk@aragorn:~$ ls -la /etc/skel/ kokku 32 drwxr-xr-x 4 root root 4096 okt 9 2014 . drwxr-xr-x 177 root root 12288 märts 30 10:54 .. -rw-r--r-- 1 root root 220 märts 30 2013 .bash_logout drwxr-xr-x 5 root root 4096 dets 9 23:25 .config drwxr-xr-x 3 root root 4096 dets 6 14:51 .mozilla -rw-r--r-- 1 root root 675 märts 30 2013 .profile kakk@aragorn:~$
I18n ja l10n
Tsitaat: ---> Internationalization is the feature that allows a system to display information in different ways. Localization is the process that bundles up all the regional changes for a single location into a locale. <---
Unixi ajatempel - sekundite arv epohhi algusest (01.01.1970) GMT/UTC aja järgi
Aega näitab date (kuupäev + kellaaeg)
Saab määrata eri vorminguid:
$ date +"%Y-%m-%dT%H:%M:%z" 2015-03-08T21:19:-0500
z - Zulu time (ehk GMT lennunduses ja sõjanduses)
Ajavööndi sätted asuvad /usr/share/zoneinfo alamkataloogides ja failides (N: /usr/share/zoneinfo/Europe/Tallinn) NB! Binaarid!!!
Süsteemi kellaaeg: /etc/localtime - enamasti sümlink vastavale zoneinfo-failile või selle koopia (vt eelmine)
Kasutajad saavad seda muuta TZ-keskkonnamuutuja määramisega
tzselect - aitab leida ajavööndi tzconfig ja dpkg-reconfigure tzdata (debianlastel) väärtustavad /etc/localtime-i.
Lisaks salvestatakse ajavöönd veel failidesse /etc/timezone (debianlased) või /etc/sysconfig/clock (redhatlased)
Märgikodeeringud
ASCII - 7 bitti
laiendatud - 8 bitti, eri koodilehed
Üks levinud standard - ISO-8859 ja selle alamstandardid (eesti keelel ISO-8859-15).
Unicode, algselt 2 baiti, esimesed 127 väärtust kattuvad ASCIIga. Hiljem 4-baidine (UTF-16) ja varieeruvalt 1-6 baidine (UTF-8)
Locale:
Keelekood Riigikood Kodeering (kui vaja)
Näide: et_EE.utf8
Fallback-lokaat: C ehk POSIX, standardne 8-bitine ASCII
kui pole paigaldatud, saab luua locale-gen -käsuga (locale-gen et_EE.utf8)
paigaldatud lokaate näitab locale -a
i18n - GNU gettext -teek
Muutujad:
LANGUAGE - ainult printimisel LC_ALL - lokaadi sundimiseks - NB! sõidab teistest üle, kui ka need on määratud muudmoodi! LC_xxx - lokaadi elemendid (näiteks rahaühik LC_MONETARY) LANG - keele põhimuutuja
Failide tõlkimine kodeeringute vahel - iconv
N: iconv -c -f ASCII -t UTF-8 datafile.txt > datafile.utf8.txt
-c - kustutab tundmatud sümbolid -f - from -t - to -l - list, kõik kasutatavad kodeeringud (suur hulk)
Skriptimine
Käivitamine: a) ./skript - eeldab käivitusõigust ja shebang-rida alguses b) sh skript või bash skript - sel juhul tõlgendatakse shebang-i kommentaarina!
Kui shebangi pole, üritatakse käivitada vaikimisi kestaga (üldiselt bash)!
Hea skriptimise põhimõtted: 1. tee ühte asja korralikult 2. anna selgitusi nii õnnestumise kui ebaõnnestumise puhul 3. selge stiil, piisavalt kommentaare 4. selge ja ühemõtteline nimi 5. laiend näitab, millega seda käitada: kopeeri.sh, arvuta.pl, leiamaksimum.py
Asukoht: eraviisilised $HOME/bin, teistega jagatavad /usr/local/bin (või leida turvaline viis anda ligipääs kodukataloogi)
NB! SetUID - kernel eirab seda skriptide puhul! Tuleb sudo kasutada
Saab kasutada kõiki käsureakäske, toru, suunamisi, backticki...
Väärtuse arvutamine: $(()) N: PROCS=$(($PROCS-1)) (ühekordsete puhul on tegu muutujanime asendusega)
N: PROCS=$(( `ps -ef | wc -l` - 1 ))
bc - minikeel reaalarvude töötlemiseks (bash toetab vaikimisi vaid täisarve!)
N: RADIUS=3 echo "3.14 * $RADIUS ^ 2" | bc
Tingimuslause:
if ps -ef | grep -q [n]agios; then echo Nagios is running fi
Märkus: grep -q on vait (ei väljasta tulemusi) - meid huvitab vaid lõppväärtus (0 või mitte)! regulaaravaldis [n]agios aitab välistada "iseenda nägemist" grepi poolt (grep nagios)
NB! Enamasti on programmeerimises 0 väär ja 1 tõene. Bashis on sisuliselt vastupidi - 0 tähendab jah/tõene/veatu, 1 ja rohkem vastupidist.
Täielik if:
if ps -ef | grep -q [n]agios; then echo Nagios is running elseecho Nagios is not running. Starting service nagios start fi
else if:
if ps -ef | grep -q [h]ttpd; then echo Apache is running elif ps -ef | grep -q [n]ginx; then echo Nginx is running else echo No web servers are running fi
faili olemasolu kontroll - test -f
if test -f /etc/passwd; then echo "password file exists" fi
test on paljude võimalustega!
Teine variant - kantsulud loetakse test-iks:
if [ -x /usr/bin/nginx ]; then echo nginx is executable fi
uuemad bashi versioonid toetavad ka topelt-kantsulgu:
if -x /usr/bin/nginx ; then echo nginx is executable fi
NB! Tühik kantsulgude ees ja järel on oluline!
Input:
echo -n "Say something: "
read STRING
if [[ -z $STRING ]]; then
echo "You didn't say anything"
else
echo Thanks for that
fi
-z - nullstring
-n - pole nullstring
stringivõrdlus: = ja !=
Täisarvuvõrdlused:
X -eq Y -võrdub X -ne Y - ei võrdu X -gt Y - X > Y X -ge Y - X >= Y X -lt Y - X < Y X -le Y - X <= Y
ja/või:
ühekordsete kantsulgude puhul -a ja -o kahekordsetel && ja ||
case:
case $1 in start) echo "Starting the process"
stop) echo "Stopping the process"
- )
echo "I need to hear start or stop" esac
- case-bloki lõpp
- ) default/else
for:
for variable in collection; do
- Do something on $variable
done
seq - loeb numbreid: - seq 1 5 1,2,3,4,5 (algus, lõpp - seq 1 2 5 1 3 5 (algus, samm, lõpp) - seq -w 8 10 08 09 10 (-w lisab ette nulli)
while:
while -f /var/lock/script1 ; do echo waiting sleep 10
until:
until [ -f /var/tmp/report.done ]; do
- Waiting until the report is done
sleep 10 done rm /var/tmp/report.done
stdin-ist lugemine:
while read LINE; do echo $LINE done
$? - töö tulemus (0 või rohkem)
$# - argumentide arv
$0 - skripti enda nimi
shift - argumentide nihutamine ühe võrra ettepoole: $5 saab $4-ks, $4 $3-ks jne
exec - asendab kestas jooksva programmi uuega
exit - skriptist väljumine ilma veata exit 1 - veaga
SQL
Andmebaaside tüübid: 1. võti-väärtus (sõnastik) - RPM, BerkeleyDB, otsing kiire, täiendamine aeglane (indeksite ringiarvutamine) 2. relatsioonilised (kirje-tabel-baas) - mitu-ühele ja mitu-mitmele suhted. MySQL, Oracle, PostgreSQL 3. schemaless (??) - NoSQL (MongoDB, ElasticSearch, Couchbase). Ei sobi transaktsioonidele, sobivad väga suurtele võrguamdmebaasidele
SQL
sqlite3 või mysql
semikoolon lõpetab kommentaar: -- rea alguses Andmed ja tabelinimed on tõstutundlikud, muu tõstutundetu
SELECTi võib kasutada ka printi rollis: SELECT "teretere"; SELECT 1 + 1;
Tabeleid on kombeks nimetada ainsuses (raamat ja isik, mitte raamatud ja isikud)!
WHERE
=, >, <, <>
BETWEEN - NB! Kaasa arvatud piirväärtused
IN (väärtus1, väärtus2, ..., väärtusN).
LIKE: _ - üks märk (nagu ? mujal) % - 0 või enam märki (nagu * mujal) SELECT title FROM book WHERE title LIKE '%Exam Cram 2'; -- kõik, mille pealkiri lõpeb selle tekstiga
Järjestamine:
SELECT * FROM book ORDER BY written, year; -- võib ka mitu kriteeriumit panna järjest
SELECT title from book ORDER by title DESC; -- kahanevalt
SELECT title from book ORDER by 2 DESC; -- järjestuse võib määrata ka veerunumbri järgi
Piiramine: LIMIT SELECT title, year from book DESC LIMIT 2; -- kaks viimasena ilmunud raamatut SELECT title, year from book DESC LIMIT 2, 2; -- jäta kaks vahele, näita kahte järgmist SELECT title, year from book DESC LIMIT 2 OFFSET 2; -- sama
Normaliseerimine - tabelite jagamine eraldi tabeliteks andmete dubleerimise vähendamiseks (lingitakse kokku)
Ühendamine: JOIN
N: SELECT * FROM author JOIN book ON book.author_id = author.id;
Tabelialiased: AS
N: SELECT * FROM author AS a JOIN book AS b ON b.author_id = a.id; AS-sõna ei ole kohustuslik - sama on SELECT * FROM author a JOIN book b ON b.author_id = a.id;
Sisemine vs vasak vs parem JOIN
Sisemine: ühisosa; SELECT * FROM vasak JOIN parem ON vasak.id = parem.id vasak: ühisosa + kogu vasak; SELECT * FROM vasak LEFT JOIN parem ON vasak.id = parem.id parem: ühisosa + kogu parem; SELECT * FROM vasak RIGHT JOIN parem ON vasak.id = parem.id
NULL - tühi väärtus; IS NULL, IS NOT NULL
Alamvalik (subselect): SELECT title FROM book WHERE author_id IN (SELECT id FROM author WHERE first_name = "Sean");
Enamasti WHERE...IN -konstruktsioonis
Grupeerimine: SELECT first_name, last_name, COUNT(title) AS books FROM author LEFT JOIN book ON author_id=author.id GROUP BY first_name, last_name;
Veel funktsioone: AVG, MIN, MAX, SUM
Lisamine: INSERT INTO book (title, year, author_id) VALUES ('Sketch of the Analytical Engine', 1842, 3);
Võtmeväli suureneb automaatselt! Osa väärtusi võib panna NULLiks või jätta lisamata (paneb ise)
Uuendamine: UPDATE book SET year=2015 WHERE id=6;
Kustutamine: DELETE FROM book WHERE author_id IS NULL;
Loomine: CREATE TABLE book (id integer primary key, title varchar(255), year integer, author_id integer, written integer);
Kasutajaliidesed
X tegeleb
- baastaseme akendega
- riistvaraga suhtlemisega
X ei tegele
- sisselogimisega (seda teeb DM)
- töölauaga (taust, menüüd, tööriistariba - seda teeb töölauasüsteem)
- akende detailidega (seda teeb aknahaldur ehk WM)
klient-server süsteem - klient võib asuda nii samas kui teises masinas
Aknahaldur varustab X-i akna "tooriku" elementidega nagu nupud, päis, menüüd jne
Töölauasüsteemis võib olla
- failihaldur
- juhtpaneel
- aknahaldur
- meediamängija
- ühtne kujundus
- erinevad rakendused (K*)
/etc/X11/xorg.conf
- Files - moodulid, kirjastiilid
- Module - glx (sarnane draiverite laadimisele mujal)
- InputDevice - klaver ja hiir
- Monitor - kuvar (seadmena - mudel ja tüüp)
- Screen - kuvasätted
Konfi pole alati vaja, osa distrosid tuvastab automaatselt. xorg.conf'i uuesti genereerimiseks: X -configure või Xorg –configure
uuemates süsteemides võib kirjastiilide jaoks olla üldasukoht /etc/X11/fontpath.d/, kus on sümlingid edasi
Osa süsteeme kasutab kirjastiiliserverit xfs - sel juhul peab olema konfis rida: FontPath "unix/:7100" [või "unix/:-1")
X-i seadistus
xvidtune - ainult CRT monitoridele, LCD või LED-iga ei tööta õieti. NB! Suudab kineskoobi õhku lasta!
xwininfo - akna geomeetriainfo, värvipalett jne.
sisselogimishaldurid
- XDM - /etc/X11/xdm
- KDM - /etc/kde/kdm
- GDM - /etc/gdm
- LightDM - /etc/lightdm, näidis-konfifaili leiab /usr/share/doc/lightdm alt
Võimaldavad ristkasutust - gdm->KDE, lightdm->GNOME jne
konsoolid: reeglina Ctrl-Alt-F1 kuni F6 (/dev/ttyX), Ctrl-Alt-F7 on GUI, Red Hatil on F1 GUI ja järgmised tekstikonsoolid
tekstikonsoolilt tagasi ka Alt-F7
Ctrl-Alt-Bksp (tänapäeval tihti ei toimi!)
Ligipääsetavus
Sticky (klahvid "jäävad sisse", aitab sisestada kombinatsioone ükshaaval vajutustena) Repeat (klahvikorduse rakendumise aja muutmiseks) Slow (klahvi reaktsiooniaja muutmiseks) Bounce (väldib topeltvajutusi) Toggle (annab märku juhtklahvide vajutamisest) Mouse (numpad)
kontrastsed teemad (High Contrast)
Ekraanilugejad: Orca, emacspeak, espeak, festival Luup: KMagnifier virtuaalklaviatuur: GOK
Kaugligipääs
xhost
Ligipääsu lisamine xhost +host1 host2
Seejärel võivad lubatud masinad tulla telneti või ssh-ga külge ja käivitada kliendi Võimalik, et klient peab andma lisaks käsu: setenv HOST "server1:0.0"
xhost + lubab kõiki ligi - turvarisk!
Ligipääsu keelamine: xhost -host3 host4
ssh-ga ühendumise võtmed: -Y (ilma turvakontrollita) ja -X (arvestab X-i turvaseadeid)
Kasutajahaldus
UID ja GID, omavahel seostab /etc/passwd UID 0 - root UID 1 - bin (mõne süsteemse tegevuse juures) UID 48 - apache UID 99 - nobody (kasutaja on olemas, kuid ei saa sisse logida)
Tavakasutajad tüüpiliselt 500 ja edasi Soovitus: kohalikud kasutajad 500-9999, võrgukasutajad 10000 ja edasi Üle 100 kasutaja korral tasub LDAPi kasutada
/etc/passwd:
ross:x:500:100:Ross Brunson:/home/ross:/bin/bash
kasutaja vanasti parool, nüüd näitab /etc/shadow kasutamist UID primaarne GID kirjeldus - tänapäeval enamasti nimi, vanasti oli rohkem infot (vrdl. finger) kodukataloog kest
kest /bin/false - ei saa sisse logida kest /etc/nologin - sama, aga annab teate ja veakoodi; kui leidub /etc/nologin.txt, kuvatakse see teatena peale sisselogimist kuvatakse /etc/motd sisu .hushlogin-fail kodukataloogis - ei tee tavapäraseid sisselogimistegevusi (meilikontroll, lastlogin, MOTD) /etc/login.defs - vaikimisi sätted kasutaja loomisel useradd-iga (UID vahemik, paroolipiirangud...) /etc/securetty - määrab, kust root võib sisse logida. Kui puudub, võib kõikjalt /etc/usertty - slsselogimispiirangud (ainult siis, kui ei kasutata PAM-i)
Grupid - ei saa asuda üksteise sees. a) primaarne - kirjas /etc/passwd-is, ei pea olema /etc/group-is b) sekundaarne - kirjas /etc/group-is, määrab täiendavad ligipääsuõigused
0 - root (ligipääs kõigele, millele root-kasutaja ligi saab) 1 - bin (sarnane bin-kasutajaga) 100 - tavakasutajate täiendav ligipääs objektidele
BSD-s on grupp wheel, mille liikmed saavad ainsatena anda su-käsku
Red Hat jm kasutavad UPG-d (user private group) - kasutajale tehakse samanimeline grupp Debian paneb vaikimisi tavakasutajad gruppi users (GID 100)
/etc/group: users:x:100:ross,snuffy
grupp, shadow, GID, liikmed (komadega eraldatud)
chgrp
newgrp - ajutine uus kest teise grupiga (saavad vahetada gruppi, mille sekundaarliikmed nad on)
gpasswd - grupi ühisparool, sel juhul küsib newgrp ka seda
useradd nimi
- loob uue kasutaja järgmise vaba UID-ga (tüüpiliselt üle 500)
- loob samanimelise grupi (GID=UID) ja määrab selle kasutaja primaargrupiks
- loob kodukataloogi (reeglina samanimelise)
- kopeerib /etc/skel uude kodukataloogi ja annab kasutajale sinna õigused
Debian loob vaikimisi kasutaja esimese vaba UID-ga, grupiks paneb users (100) ja kodukataloogi ei tee - kodukataloog tuleb luua useradd -m -d -ga, skel-i lisamiseks -k /etc/skel ja uue primaargrupi jaoks -g. Red Hat paneb kestaks vaikimisi /bin/bash, Debian jätab tühjaks ja eeldatakse /bin/sh (see on aga bashi sümlink)
useradd -d - määrab kodukataloogi -D - kuvab vaikimisi sätted failist /etc/default/useradd -e - lisab konto aegumistähtaja -f - päevade arv, mille järel saab veel aegunud parooliga sisse -g - primaargrupp -G - sekundaargrupp -k - skeletifailid -m - loob kodukataloogi, kui seda pole -o - lubab dubleerida UID-i (MITTESOOVITAV) -s - kesta asukoht täisteena
Red Hat lubab useradd -D -ga ka sätteid muuta. Näiteks kest: useradd -D -s /bin/bash
groupadd
usermod -c - muudab kirjelduse/nime välja -d - muudab kodukataloogi -e - muudab aegumistähtaega -f - muudab parooliaegumissätteid (kui kaua veel sisse saab) -g - muudab primaargruppi (nime või GID järgi) -G - muudab sekundaargruppi -s - muudab kesta -u - muudab UID-i (ohtlik) -L - lukustab konto (kirjutab /etc/shadow krüpteeritud paroolile hüüumärgi ette) . Sama teeb passwd -l -U - võtab lukust lahti (hüüumärk maha). Sama teeb passwd -u
groupmod - peamiselt nime ja GID-i muutmiseks
Linux võimaldab kustutada kasutaja (ilma kodukataloogi kustutamata), luua hiljem uue samanimelise ja võtta kodukataloog jälle kasutusse!
userdel - kustutab ainult kasutaja userdel -r - kustutab kodukataloogi ja meilifaili, ei kustuta aga kasutaja faile mujal süsteemis
Kasutaja jõhker väljaviskamine: leia ps-iga login shell, usermod -L, kill -9 shell_PID, userdel -r kasutaja
groupdel - enne kustutamist tuleks otsida find-iga kõik sinna kuuluvad failid ja omistada ringi
/etc/shadow
- kasutaja
- krüpteeritud parool
- viimati muudetud (Unix days)
- järgmine lubatud muutmine päevades (0 lubab kohe)
- järgmine kohustuslik muuutmine (99999 sisuliselt lülitab välja - 273 aastat)
- mitu päeva enne kohustuslikku hoiatatakse
- mitu päeva peale kohustusliku saab veel sisse
- aegumiskuupäev (Unix days)
Eraldajad on koolonid
Mõni väli võib olla tühi (::), väljadega on võimalik tekitada vastuolu ja paras jama
Failiõigused:
- /etc/passwd - Red Hat ja Debian 644
- /etc/shadow - Red Hat 400, Debian 640
passwd - enda parool passwd kasutaja - teise parool
chage
chage -option value username - mõjutab /etc/shadow -faili Valikud (EI KÜSITA) -m miinimum (lubatud) -M maksimum (kohustuslik) -d lastchange -E aegumine -I armuaeg -W hoiatus
chage kasutaja - küsib ise interaktiivselt
chage -l endakasutaja - info enda kohta
passwd -d - eemaldab parooli ja lukustab konto -m - miinimum -x - maksimum -w - hoiatus -i - armuaeg -S - info (N: kakk P 12/24/2013 0 99999 7 -1)
ulimit - kasutaja piirangud
-c - core dump failid
-d - protsessiandmete maht
-f - kestas loodud failide suurus
-n - avatud failide arv
-t - protsessoriaeg
-u - protsesside arv
-v - virtuaalmälu maht
ulimit -a näitab kõike
pannakse kas kasutaja .bashrc-sse või .profile-sse, või samadesse süsteemifailidesse /etc all
/ETC/SHADOW VÄLJADE JÄRJEKORD PEAB PEAS OLEMA!
kui ls -l näitab kasutajanime asemel UID-i, siis on kasutaja kustutatud!
uute failide loomisel ei võeta vanu UID-sid kasutusele (loodi 501-510, siis kustutati 501 ja 504, viimaks loodi veel üks - see saab 511)
Töödehaldus
cron crond crontab
Vaatamine: crontab -l
muutmine: crontab -e
Üldine rida: minutid tunnid kuupäev kuu nädalapäev täidetav_käsk
Redigeerimiseks kasutatav redaktor sõltub EDITOR-süsteemimuutujast - .bash_profile-s export EDITOR=/bin/nano. Vaikimisi on vi
Teiste crontabi saab vaadata ja muuta vaid root: crontab -l (või -e) -u kasutaja
Tunnid on 24-sed, nädalapäev 0-7, 0 ja 7 on pühapäev
Kõik positsioonid tuleb täita, tühja asemel on tärn (*). N: 30 5 * * 1 - iga esmaspäev kell 5.30
Üldiselt peavad kõik tingimused olema täidetud - erandiks on olukord, kui täidetud on nii kuupäev kui nädalapäev, sel juhul emb-kumb.
N: 30 5 3 * 1 - iga kuu 3. päeval JA igal esmaspäeval kell 5.30
Kuu ja nädalapäeva võib anda nii numbrina kui kolmetähelise lühendina - jan,feb,mar ning sun,mon,tue
Klassikaline variant ei luba sündmuse kordamist. Kui seda on vaja, siis
a) kirjutada komadega eraldatult mitu väärtust: 0 15 25 apr,sep,dec * igal 25. aprillil, septembril ja detsembril
b) anda vahemik: 0 15 * * mon-fri - igal tööpäeval kell 15.00
Perioodiliselt - võib lugeda kõik ajad komadega ette, aga lihtsam on kaldkriipsuga:
0 */2 * * * iga kahe tunni takka 0 1-23/2 * * * paaritud tunnid
Käivitatav võib olla mistahes programm või ka kohalik skriptijupp:
0 0 * * * if ! -f /var/lock/maintenance ; then /usr/local/bin/backup.sh; fi käivitab backupi, kui maintenance-faili pole olemas
NB! cron ei arvesta .bashrc-d ega teisi, seetõttu seal defineeritud kataloogiteed ei kehti!
crontabis võib määrata omaenda keskkonnamuutujad (nagu mujal skriptides):
PATH - kataloogitee MAILTO - kõik ekraanile minev saadtakse ka sellele e-postiaadressile
jpt
Mõned "jutukad" tööd võib saata kommentaaridega pikalt: 25 * * * * /usr/bin/php /home/sean/fof/update-quiet.php > /dev/null 2>&1
Paljudes distrodes saab kasutada aliasi: @reboot - peale iga taaskäivitust @yearly - iga aasta 1. jaanuari keskööl @annually - sama mis @yearly @monthly - iga kuu esimesel keskööl @weekly - iga pühapäeva keskööl @daily - igal keskööl @hourly - igal täistunnil
N: 0 0 * * * /usr/local/bin/backup.sh on sama kui @daily /usr/local/bin/backup.sh
crontab-iga redigeeritud failid asuvad füüsiliselt /var/spool/cron-is (root only). Saab redigeerida ka muuga, soovitav on aga läbi crontabi
Lisaks kasutajate crontab-ile on ka süsteemi oma: sätted /etc/crontab ja /etc/cron.d/ Erinevus - kuues veerg nädalapäeva ja käsu vahel - kasutaja, kellena käsk täidetakse
Veel üks lihtne variant: paigutada käitatav skript vastavasse kataloogi: /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
N: cron.daily all on apache2, apt, dpkg, locate, spamassassin...
On ka valge ja must nimekiri: /etc/cron.allow ja /etc/cron.deny kasutajanimedega (root on erand ja ei kuulu süsteemi). Vrdl host.allow/host.deny
Anacron - harvemate ja mitte väga täpsete tööde jaoks (max täpsus 1 päev)
/etc/anacrontab. Kõik root-kasutajana
Mintil: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/root LOGNAME=root
- These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily 7 10 cron.weekly run-parts --report /etc/cron.weekly @monthly 15 cron.monthly run-parts --report /etc/cron.monthly
ühekordsete tööde jaoks:
at - nii interaktiivne kui skriptina:
midnight - kesköö noon - keskpäev teatime - kell 16 pärast lõunat kellaaeg - 5:00 a.m. kuupäev/kellaaeg - 2pm jul 23, 4am 121504. now + kellaaeg - mingi aja pärast: now + 30 minutes
atq või at -l - ootel tööde loend atrm või at -d - töö kustutamine numbri järgi
/etc/at.allow ja /etc/at.deny
batch - sarnaneb eelmisega, kuid ei käivita tööd kella järgi, vaid kui süsteemi koormus langeb piisavalt madalale
atrun -l 1.6 (käivitub, kui töökoormus langeb alla 1.6 - vt w-käsuga)
Printimine
cupsenable
spooler - trükijärjekorra haldur; /var/spool/cups
Algne Unixi daemon: lpr (BSD oma; SysV-l oli lp) LPRng IPP - HTTP-põhine võrguprintimisprotokoll CUPS - kasutab IPP-d, LPR tõlgitakse IPP-ks - /etc/cups pildid jäetakse rastergraafikaks, muud failid tõlgitaks PostScripti
draiveriprojektid Foomatic ja Gutenprint
CUPS haldusliides: http://localhost:631
PPD-fail - Postscript Printer Definition, printeri tuvastamiseks
testimiseks võltsprinteri loomine: lpadmin –p FakePrinter –E –v /dev/null –m raw
lp ja lpr mõlemad töötavad käsurealt
suunamine mujale kui vaikimisi printer: lp -d Hewlett-Packard_HP_LaserJet_Pro_MFP_M127fn või lpr -P Hewlett-Packard_HP_LaserJet_Pro_MFP_M127fn
kaks koopiat: lp -n 2 või lpr -#2
lpstat -a - trükijärjekorra listing veel: lpstat -d—Displays the name of the default printer lpstat -r—Indicates whether CUPS is running lpstat -s—Provides a status summary of how the system is configured lpstat -t—Provides a more detailed summary of how the system is configured
lpq - trükijärjekorra päring (staatus ja tööd)
lprm töönumber - töö kustutamine (võib ka cancel töönumber)
Mujalt kui vaikimisi printerist kustutamine: cancel Hewlett-Packard_HP_LaserJet_Pro_MFP_M127fn-9 (printerinimi-töönumber)
cupsreject ja cupsaccept - järjekorra välja-sisse lülitamine
cupsdisable ja cupsenable - printeri välja-sisse lülitamine (võimaldab koguda töid endiselt trükijärjekorda)
cupsctl
/etc/cups (tsitaat): ---> classes.conf - Contains the classes, which can also be created in the web interface. A class is a group of printers, and printing to a class queues the job to the first available printer. cupsd.conf - The main configuration file, which can also be edited in the web interface. This contains default settings such as timeouts, rules about what can be done by different people, and logging settings. cupsd.conf.default - A default configuration file that you can use if you really break your production cupsd.conf. Editing the configuration file on the Web also gives you an option to revert to the default file. printers.conf - Configuration for each printer that you configured on the system. ppd - A directory containing the PPD files for each configured printer. <---
E-post
MUA (Mail User Agent) - sisuliselt klienttarkvara (T-bird, Evolution) MTA (Mail Transfer Agent) - Postfix, Qmail, Exim, Sendmail. NB! Sendmail ja Qmail on monoliidid, Postfix ja Exim komponentidega (vrdl kernel) MDA (Mail Delivery Agent) - võtab vastu ja viskab kasutaja postkasti SMTP
POP IMAP
DNS päring MX (mail exchange) kirje saamiseks
/etc/aliases ja newaliases
alias võib olla ka mõne teise serveri meiliaadress või ka kohalik fail
~/.forward
kui tahta jätta nii kohalikku kui saata edasi, tuleb kurakaldkriips panna: \isaac i.smith@example.com
mailq - MTA järjekord; /var/spool/mqueue
/var/log/maillog
Logimine
Kaks kella - riistvara (reaalajakell) - tarkvara (süsteemikell, juhib kernel)
Võivad aeg-ajalt erineda
date - kuupäev ja kellaaeg: P apr 3 11:19:15 EEST 2016 (kasutab lokaati!), Wed Apr 15 14:36:05 CDT 2015
-u - näitab UTC-d +%s - näitab Unixi aega
saab ka muuta: üldkuju date [MMDDhhmm[[CC]YY][.ss]] (mida ei sisestata, jäetakse muutmata)
date +formaat - saab väljastada eri komponente - NB! siin M on minut ja m kuu! A on nädalapäev
Saab kasutada failinimede koostamisel:
$ date +/var/backup/website.%Y%m%d%H%M%S /var/backup/website.20150418112516
Saab ka lisada teksti:
kakk@aragorn:~$ date +"Täna on %A" Täna on pühapäev
hwclock - adminikäsk riistvarakella jaoks. Sarnaneb date-iga, aga annab ka sekundid
/etc/adjtime näitab, kas riistvarakell on seatud kohaliku või UTC aja järgi - seal on kas LOCAL või UTC
Kui fail puudub või näitab nulle, on süsteem UTC peal ja hwclock ning hwclock -u näitavad sama aega
Sünkimine: - hwclock -w või --systohc - riistvarakell häälestatakse süsteemi järgi - hwclock -s või --hctosys - süsteemikell häälestatakse riistvara järgi
NTP
1 ringi kellad GPS järgi (reference clock), reeglina kasutatakse süsteemide häälestamiseks 3. või 4. ringi kelli
NTP-ga sünkimine (admin): ntpdate kellaserver
pool.ntp.org - üldkasutatavad ajaserverid Aliased 0.pool.ntp.org - 3.pool.ntp.org viitavad vabatahtlike käitatavatele kellaserveritele
ntpd - hoiab perioodiliselt sünkroonis (ntpdate on ühekordne). /etc/ntp.conf (Mintil pole, Ubuntu serveril ka mitte!)
Sätib riistvarakella iga 11 minuti järel
ntpq - interaktiivne päringukäsk - peers - näitab ühendatud kellaservereid - associations - näitab nende ühendust
Logimine - tänapäeval kaks kõrvuti asja - syslog ja SystemD journal
Syslogi logimine: - rakendusest - käsurealt logger-käsuga - üle võrgu, ühendudes logiserveriga
Logimistasemed (NEID KÜSITAKSE!): 0 - emerg 1 - alert 2 - crit 3 - err 4 - warn/ing 5 - notice 6 - info 7 - debug
Tüübid: - kern - user - mail - daemon - auth - syslog - lpr - cron - authpriv - local0-7
mailiteated alates info tasemest /var/log/maillog, kõik muu /var/log/messages
logger - aitab panna logisse vahepealkirju näiteks enne skripti testimist -i lisab ka protsessiinfo -p võimaldab logida etteantud tasemel ja tüübiga. N: logger -i -p mail.info Proovime meili
ksyslogd- või sysklogd-pakk - syslogd + klogd (viimast eriti ei konfita)
/etc/syslog.conf (mul ei ole!)
- This is a comment
authpriv.*
- .info;mail.none;authpriv.none;cron.none
mail.* /var/log/maillog cron.*
- .emerg
local7.* local4.*
Üldised logid:N
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/xferlog - FTP
Lisaks on veel olema rsyslogd (kiire ja laiendatav) ja syslog-ng (uuem variant)
SystemD journal
Systemd logifailid /var/log/journal
journalctl -e logi lõppu -r pööratud järjestus -f (follow) - jälgimine -o valikud - valikud, ntx -o verbose -u teenus - teenuse järgi?
Mingi teenuse logid: journalctl /usr/sbin/sshd
/etc/systemd/journald.conf
Rotatsioon
logrotate, /etc/logrotate.conf ja /etc/logrotate.d
weekly - kord nädalas rotate 4 - neli rotatsiooni enne kustutamist (säilitab 4 nädala logid) missingok - ei anna viga, kui logi puudub notifempty - kui logi on tühi, ei roteerita sharedscripts - käivitab skriptid kõigile valitud failidele delaycompress - ei paki logi enne roteerimist postrotate - käivitab peale roteerimist vastavad käsud
Käivitatakse cronist või anacronist igapäevaselt
Võrk
subnet - loogiline grupp (sarnased aadressid) segment - füüsiline grupp (sarnane asukoht, sama kaabel või kommutaatot)
IP - staatiline või dünaamiline mask - loogilise grupi (alamvõrgu) piire märkiv kombinatsioon lüüs - alamvõrgu värav (marsruuter)
IPv4 - 4 oktetti okteti positsioonid sees või väljas, seesolevad summeeruvad 128 64 32 16 8 4 2 1
Võrgu aadressiklassid: A - 1 kuni 126, seega max 126 võrku, üle 16M aadressi B - 128 kuni 191, max 16 382 võrku, igas 65 536 aadressi C - 192 kuni 223, max üle 2M võrgu, igas 254 aadressi D - 224 kuni 239, reserveeritud multicastile E - 240 kuni 254, reserveeritud tulevikuks
127 - loopback
A - okteti 1. bitt alati 0 B - okteti kaks esimest bitti alati 10 C - okteti kaks esimest bitti alati 11
IP koosneb võrgu- ja hostiosast
A - mask 255.0.0.0 ehk /8 - hostiosa kolm viimast oktetti B - mask 255.255.0.0 ehk /16 - hostiosa kaks viimast oktetti C - mask 255.255.255.0 ehk /24 - hostiosa viimane oktett
Protokollid
IP - adresseerimine ja kommunikatsioon seadmete vahel TCP - paketitransport - kindlam kui UDP oma veakontrollisüsteemi tõttu UDP - sama, kuid ei kontrolli vigu, ühenduse infot paketiga kaasa ei panda ICMP - veateadete ja päringute (ping) saatmiseks
Pordid
üldnimekiri: /etc/services Põhipordid 0-1023, tcp ja udp Reserveeritud pordid 1024-49151 Dünaamilised ehk privaatpordid 49152-65535
20 & 21—FTP 22—SSH 23—Telnet 25—SMTP 53—DNS 80—HTTP 110—POP3 123—NTP 139—NETBIOS 143—IMAP 161 and 162—SNMP 389—LDAP 443—HTTPS 465—SMTPS 514—SYSLOG 636—LDAPS 993—IMAPS 995—POP3S
IPv6
alates 90-ndate keskelt, aga 2015. aastaks kasutas seda ikka vaid 7% võrkudest
8 neljakohalist 16-ndnumbrit, koolonid vahel
NAT on aeglustanud v6 levikut, võimaldades alamvõrkudes privaataadresse dubleerida
Väljapakutud eelised: - ruutimine olevat parem kui v4-s - turvalisus sisse ehitatud - automaatkonfimine (jama staatilise vs dünaamilisega jääb ära) - paremad paketipäised
lo (loopback)
ifconfig - ether/HWaddr - MAC - inet - IP - broadcast - netmask
uuem käsk sama asja vaatamiseks on ip - vähem ülevaatlik, aga rohkem võimalusi
Võrguliidesed Red Hatis
utiliit system-config-network, konf /etc/sysconfig/network-scripts, näiteks /etc/sysconfig/network-scripts/ifcfg-eth0 RH konfinäide: DEVICE=eth0 ONBOOT=yes BOOTPROTO=static # DHCP puhul on siin dhcp IPADDR=192.168.1.73 NETMASK=255.255.255.0 GATEWAY=192.168.1.1
taaskäivitus: service network restart
Võrguliidesed Debianis
utiliit system-config-networking või netcardconfig, konf /etc/network/interfaces Debiani konfinäide:
- /etc/network/interfaces -- configuration file for
ifup(8), ifdown(8)
- The loopback interface
- automatically added when upgrading
auto lo eth0 iface lo inet loopback iface eth0 inet static # või dhcp address 192.168.15.5 netmask 255.255.255.0 network 192.168.15.0 broadcast 192.168.15.255 gateway 192.168.15.2
taaskäivitus: /etc/init.d/networking restart
Lüüsi näitab route või netstat -r (sama pilt!)
Lüüsi lisamine käsitsi: route add default gw 10.0.0.1 - PEAB TEADMA!
/etc/nsswitch.conf - kust otsitakse nime ja mis järjekorras - files - kohalik fail - dns - nimeserver - nis - kohtvõrgust
N: hosts: files dns networks: files
/etc/hosts - mis IP-d on selles masinas konfitud ja mis nimele vastavad
127.0.0.1 localhost.localdomain localhost
/etc/resolv.conf - nimeserverid nameserver 194.126.101.34 nameserver 194.126.115.18
Tavaline järjekord - nsswitch, hosts, resolv
/etc/hostname - täielik hostinimi
Utiliidid:
- ifconfig - IP ja mask
- ifup ja ifdown
- ip - peaks tulevikus asendama pea kõiki teisi siinseid
- route - ruuting ja lüüs
- dhcpcd, dhclient ja pump - DHCP klienttarkvara
- host, nslookup, dig - nimeserveriga suhtlemine
- hostname
- netstat - erinev võrguinfo
- ping
- traceroute
- tcpdump - paketisalvestus
ifconfig kasutamine seadmiseks:
ifconfig eth0 192.168.33.2 netmask 255.255.255.0 up
ifconfig -a näitab ka neid liideseid, mis ei tööta
DOS-ründe tõrjumine route-iga - route add 10.1.1.69 lo - suunab pahalase liikluse loopbacki, pahalane näeb timeouti
dhcpcd
/sbin/dhcpcd, client daemon
dhcpcd -k - pehme restart (SIGHUP)
dhclient ja pump - DHCP-aadressi saamiseks
getent: kakk@aragorn:~$ getent hosts 127.0.0.1 localhost 127.0.1.1 aragorn 127.0.0.1 ip6-localhost ip6-loopback kakk@aragorn:~$ getent hosts kakupesa.net 80.235.40.79 kakupesa.net kakk@aragorn:~$
netstat (tsitaat): ---> -t—Shows TCP statistics -r—Shows the routing table -a—Shows all the sockets on all functioning interfaces -c—Shows a refreshing (every 1 second) view of statistics for usage -p—Shows the name and PID of the program related to each socket (very useful!) <---
-s - statistika
ping6 - ping IPv6 jaoks traceroute6
Turvalisus
su - või -l - avab uue kesta (kui kasutajat ei määrata, eeldatakse root-i)
Susel on sux-käsk - graafiline su
sudo, /etc/sudoers ja /etc/sudoers.d/ , visudo redigeerib sudoers-i (täiendav veakontroll võrreldes tavaredaktoriga)
sudoers täisõigused: kasutajanimi ALL=(ALL) ALL
Käitatavad teenused - alati töötavad - nõudmisel - välja lülitatud (ISDN või modem)
Nõudmisel teenused - inetd, xinetd /etc/inetd.conf, /etc/xinetd.conf => /etc/xinetd.d/
teenuste näited: finger, imap, *talk, rlogin, telnet
TCP wrappers: hosts.allow, hosts.deny
ALL service daemon, daemon
except on ka lubatud
SUID, SGID - omaniku/omanikugrupi õigustes Sticky - ei luba mitteomanikel kataloogist faile kustutada
Eribittide otsimine find-iga: find / -user root -perm +7000
GPG
gpg --gen-key
gpg --list-keys
uue võtmepaari loomine: ssh-keygen -b 1024 -t rsa
ssh sshd scp ssh-agent - programm, mis annab võtmetega ligipääsu (ilma paroolita) ssh-add
/etc/ssh/ssh_knowh_hosts ja ~/.ssh/known_hosts
scp -r root@remote1:/data root@remote2:/data
KOGU LUGU!