Kiszolg´al´ok u¨ zemeltet´ese szerkesztette: Iv´anyi P´eter March 8, 2010
2
Tartalomjegyz´ek 1 Bevezet´es
7
2 Kezdeti be´all´ıt´asok
9
2.1
G´ep neve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2 2.3
Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . H´al´ozati be´all´ıt´asok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 9
2.3.1
9
DHCP konfigur´al´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Ind´ıt´as e´ s le´all´ıt´as 3.1
3.2
3.3
11
Boot manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.1.1 3.1.2
MBR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 11
3.1.3
LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.1.4
Bootloader megker¨ul´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.1.5
Egy´eb bootloader-ek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Bootol´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 initrd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16 16
3.2.2
Boot scriptek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
Le´all´ıt´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3.1 3.3.2
Azonnali le´all´ıt´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le´all´ıt´as adott id˝oben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16 16
3.3.3
A le´all´ıt´as visszavon´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
4 Felhaszn´al´ok e´ s csoportok
19
4.1
Alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2
/etc/passwd file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
4.3
4.2.1 Az /etc/passwd file m´odos´ıt´asa . . . . . . . . . . . . . . . . . . . . . . . . . . /etc/shadow file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 21
4.4
/etc/group file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
4.4.1
Els˝odleges csoport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4.5 4.6
/etc/gshadow file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Csoportok hozz´aad´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 24
4.7
Csoportok m´odos´ıt´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.8
Csoportok t¨orl´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3
19
4.9
Felhaszn´al´ok l´etrehoz´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
4.9.1
useradd parancs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
4.9.2
adduser parancs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.9.3
Amikor nincs seg´ıts´eg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.10 Felhaszn´al´ok t¨orl´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.11 Felhaszn´al´ok m´odos´ıt´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.12 Felhaszn´al´o e´ s csoport adminisztr´aci´o . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.12.1 Szabv´anyos felhaszn´al´ok e´ s csoportok . . . . . . . . . . . . . . . . . . . . . .
29
4.12.2 Korl´atozott felhaszn´al´oi fi´okok . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.13 Inicializ´al´o file-ok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.13.1 Rendszerszint˝u inicializ´al´o file-ok . . . . . . . . . . . . . . . . . . . . . . . .
31
4.14 login.defs file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.15 Jelszavak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.15.1 Jelszavak e´ s felhaszn´al´oi fi´okok . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.15.2 Jelsz´o o¨ reged´es, elavul´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.16 Jelszavak kital´al´asa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
5 PAM rendszer 5.1
35
Konfigur´aci´o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
5.1.1
Kontroll param´eterek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
5.1.2
Modul visszat´er´esi e´ rt´ek . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
5.1.3
P´eld´ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
5.2
Az “other” konfigur´aci´os file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.3
PAM modulok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.3.1
pam unix.so . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
Azonos´ıt´as USB eszk¨ozzel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ Osszegz´ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.4 5.5
42
6 Name Service Switch
43
7 FTP
45
8 MySQL adatb´azis
47
8.1
Bevezet´es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
8.2
MySQL architekt´ur´aja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
8.3
Alapfogalmak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
8.3.1
Z´arol´as, locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
8.3.2
Tranzakci´ok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
8.4
Adatb´azis t´ıpusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
T´arol´o motor v´alaszt´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
8.5
Manu´alis install´al´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
8.6
Install´al´as csomagb´ol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
8.7
Be´all´ıt´asok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
8.8
Adatb´azisok kezel´ese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
8.4.1
4
8.9
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
55 55 56 56 63 64 64 64 65 65 66 67 67 67
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
69 69 69 69 70 70 71 71 71 71 72 72 73 73 74 74 74 74 75 77 77 78 78 79 79
10 DNS szolg´altat´as 10.1 Domain nevek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 DNS adminisztr´aci´o alapjai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81 81 82
8.10 8.11 8.12 8.13 8.14
Biztons´agi k´erd´esek . . . . . . . . . . . . . . . . 8.9.1 Kezdeti konfigur´al´as . . . . . . . . . . . ´ felhaszn´al´o hozz´aad´asa egyszer˝uen . . 8.9.2 Uj 8.9.3 Hozz´af´er´es kontroll . . . . . . . . . . . . 8.9.4 Felhaszn´al´o a´ ltal szolg´altatott adatok . . 8.9.5 H´al´ozati v´edelem . . . . . . . . . . . . . 8.9.6 root jelsz´o helyre´all´ıt´asa . . . . . . . . . 8.9.7 N´eh´any biztons´agi k´erd´es o¨ sszefoglal´asa Adatb´azis ment´es e´ s vissza´all´ıt´as . . . . . . . . . 8.10.1 mysqldump program . . . . . . . . . . . Loggol´as . . . . . . . . . . . . . . . . . . . . . Replik´aci´o . . . . . . . . . . . . . . . . . . . . . Kluszterez´es . . . . . . . . . . . . . . . . . . . . Adatb´azis optimaliz´al´as . . . . . . . . . . . . . .
9 Apache web szerver 9.1 Bevezet´es e´ s alapok . . . . . . . . . . . . . . 9.1.1 Mit csin´al a web szerver? . . . . . . . 9.1.2 Mit csin´al a web kliens? . . . . . . . 9.1.3 Mi´ert az Apache? . . . . . . . . . . . 9.1.4 Az Apache web szerver . . . . . . . 9.2 Install´al´as . . . . . . . . . . . . . . . . . . . 9.3 Egyszer˝us´ıtett install´al´as forr´asb´ol . . . . . . 9.4 Manu´alis install´al´as forr´asb´ol . . . . . . . . . 9.4.1 Modulok kiv´alaszt´asa . . . . . . . . . 9.4.2 Egy´eb be´all´ıt´asok . . . . . . . . . . . 9.4.3 Ford´ıt´asi folyamat . . . . . . . . . . 9.5 Apache m˝uk¨odtet´es´enek alapjai . . . . . . . 9.5.1 Apache futtat´asa . . . . . . . . . . . 9.5.2 Apache le´all´ıt´asa . . . . . . . . . . . 9.5.3 A szervert futtat´o felhaszn´al´o . . . . 9.6 Apache be´all´ıt´asai, konfigur´aci´ok . . . . . . . 9.6.1 Alap be´all´ıt´asok . . . . . . . . . . . 9.6.2 Blokk direkt´ıv´ak . . . . . . . . . . . 9.6.3 Tov´abbi opci´ok . . . . . . . . . . . . 9.7 Virtu´alis host-ok . . . . . . . . . . . . . . . . 9.7.1 N´ev alap´u virtu´alis host-ok . . . . . . 9.7.2 IP c´ım alap´u virtu´alis host-ok . . . . 9.7.3 N´ev e´ s IP c´ım alap´u virtu´alis host-ok 9.7.4 Port alap´u virtu´alis host-ok . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
10.3 N´ev felold´as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
11 NFS e´ s NIS szolg´altat´asok 11.1 NFS alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 NIS alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Probl´em´ak az NFS-es e´ s NIS-el . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85 85 85 86
12 LDAP 12.1 C´ımt´ar szerkezete . . . . . . . . . . . . . . 12.1.1 S´em´ak . . . . . . . . . . . . . . . . 12.2 Szerver telep´ıt´es e´ s be´all´ıt´as . . . . . . . . 12.2.1 LDAP szerver be´all´ıt´asa . . . . . . 12.3 C´ımt´ar felt¨olt´ese . . . . . . . . . . . . . . . 12.3.1 Hozz´aad´o parancsok . . . . . . . . 12.3.2 Felhaszn´al´ok a c´ımt´arban . . . . . . 12.3.3 Egy´eb parancsok . . . . . . . . . . 12.4 LDAP egyszer˝u haszn´alata . . . . . . . . . 12.4.1 Keres´es a c´ımt´arban . . . . . . . . 12.5 Felhaszn´al´o azonos´ıt´as LDAP alapj´an . . . 12.5.1 LDAP kipr´ob´al´asa . . . . . . . . . 12.5.2 PAM be´all´ıt´asa LDAP haszn´alat´ara 12.5.3 Debian specialit´as . . . . . . . . . 12.6 Biztons´agosabb LDAP azonos´ıt´as . . . . . 12.7 phpldapadmin . . . . . . . . . . . . . . . .
87 88 88 88 89 91 92 92 92 93 93 94 95 95 96 97 97
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
A Felhaszn´alt irodalom 99 T´argymutat´o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6
1. Fejezet
Bevezet´es Ez a k¨onyv egy oktat´asi jegyzet e´ s a benne foglaltak t¨obb forr´asb´ol sz´armaznak. Igyekeztem minden olyan inform´aci´ot o¨ sszeszedni, amire egy rendszer adminisztr´atornak sz¨uks´ege lehet egy Linux rendszer eset´en. A jegyzet f˝oleg Debian alap´u Linux rendszerekkel foglalkozik. Rem´elem mindenki hasznosnak fogja tal´alni.
Iv´anyi P´eter
7
8
2. Fejezet
Kezdeti be´all´ıt´asok 2.1 G´ep neve 2.2 Root 2.3 H´al´ozati be´all´ıt´asok 2.3.1 DHCP konfigur´al´as A DHCP jelent´ese: Dynamic Host Control Protocol. A DHCP haszn´alat´ahoz a kliens g´epeken a dhcp3-common e´ s dhcp3-client csomagot kell felinstall´alni. A DHCP szerveren a dhcp3-server csomagot is fel kell install´alni. Szerver konfigur´al´as A szerver g´epnek egy statikus, fix IP c´ımmel kell rendelkeznie e´ s ez legyen m˝uk¨od˝o k´epes a´ llapotban. P´eld´aul az /etc/network/interface file tartalma lehet: auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 K´et fontos file-ban kell a be´all´ıt´asokat elv´egezni. El˝osz¨or is meg kell adni, hogy melyik interfacen fog hallgat´ozni a DHCP szerver. Ezt az /etc/default/dhcp3-server file-ban lehet megtenni, p´eld´aul: INTERFACES="eth0" Itt term´eszetesen t¨obb interface-t is megadhatunk SPACE-el elv´alasztva, p´eld´aul: "eth0 eth1". Ez a file l´enyeg´eben egy rendszerv´altoz´ot defini´al, amit majd az /etc/init.d/dhcp3-server ind´ıt´o script haszn´al. Az ind´ıt´o script-b˝ol n´ezz¨uk meg azt a r´eszletet, amelyik haszn´alja ezt a v´altoz´ot: start-stop-daemon --start --quite --pidfile $DHCPDPID \ --exec /usr/sbin/dhcpd3 -- -q $INTERFACES
9
A m´asik konfigur´aci´os file az /etc/dhcp3/dhcpd.conf, amiben azt kell megadni, hogy milyen c´ım tartom´anyt szolg´altasson a klienseknek. Ebben a file-ban p´eld´aul megadhatjuk a k¨ovetkez˝ot: subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.2 192.168.1.254 } Kliens konfigur´al´as A DHCP-t haszn´al´o kliens g´epeken az /etc/network/interface file tartalma a k¨ovetkez˝o kell legyen: auto eth0 iface eth0 inet dhcp Ha el akarjuk “dobni” a szervert˝ol kapott IP c´ımet, akkor a k¨ovetkez˝o utas´ıt´ast kell haszn´alni: $ dhclient -r Internet Systems Consortium DHCP Client 3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/00:00:25:55:bb:b5 Sending on LPF/eth0/00:00:25:55:bb:b5 Sending on Socket/fallback DHCPRELEASE on eth0 to 192.168.1.2 port 67 ´ IP c´ım k´er´esekor a k¨ovetkez˝o utas´ıt´as haszn´alhat´o: Uj $ dhclient -n
10
3. Fejezet
Ind´ıt´as e´ s le´all´ıt´as 3.1 Boot manager A Linux elind´ıt´as´ahoz sz¨uks´eg van egy bootloader-re. A bootloader ismerete szinte elengedhetetlen, f˝oleg akkor ha t¨obb oper´aci´os rendszert szeretn´enk haszn´alni a sz´am´ıt´og´ep¨unk¨on. T¨obbf´ele bootloader is l´eterzik, de ezekb˝ol a k´et legelterjedtebb a LILO e´ s GRUB. Ha Linux-ot Macintosh g´epen akarunk futtatni, akkor pedig a yaboot bootloadert lehet csak haszn´alni.
3.1.1 MBR Az MBR (Master Boot Record) 512 byte hossz´u r´esz a merev lemez legelej´en (a legels˝o szektorban). Az MBR k´et r´eszb˝ol a´ ll, egy 446 byte tartalmazza a “boot code”-ot e´ s a marad´ek 66 byte tartalmazza a part´ıci´os t´abl´at (egy 2 byte-os szignat´ur´aval egy¨utt). A lilo e´ s grub-install parancsok1 az els˝o 446 byte-ba ´ırnak, a particion´al´o programoka pedig a 66 byte-os ter¨uletre. FIGYELEM: Amikor az MBR ter¨ulet´ere ´ırunk legy¨unk rendk´ıv¨ul o´ vatosak. Egy hib´as byte e´ s a teljes part´ıci´ot vagy merev lemezt is t¨onkretehetj¨uk. Ha az MBR-t m´odos´ıtjuk, e´ rdemes elmenteni a teljes merev lemez a´ llapot´at! Az MBR elment´es´ere a k¨ovetkez˝o parancsot lehet haszn´alni root-k´ent: # dd if=/dev/hda of=/root/hda.mbr bs=512 count=1 Az 512 byte-ot a hda.mbr nev˝u file mentj¨uk el. Ha t¨or¨olni akarjuk az MBR ter¨ulet´et akkor a k¨ovetkez˝o parancsot haszn´alhatjuk: # dd if=/dev/zero of=/dev/hda bs=512 count=1 Mind a k´et esetben az els˝o merev lemezen tal´alhat´o az MBR. A /dev/zero eszk¨oz pedig arra val´o, hogy csupa null´at “bocs´asson” ki mag´ab´ol e´ s ezzel ´ırjuk fel¨ul a ter¨uletet. Amikor fel¨ul´ırjuk az MBRt akkor a lemezen tal´alhat´o adatok t¨obb´e nem e´ rhet˝ok el, ´ıgy a part´ıci´ok, az adatok e´ s az oper´aci´os rendszerek sem, de az´ert ne felejts¨uk el, hogy maga az adat a lemezen maradt. ´Igy ha t´enyleg mindent t¨or¨olni akarunk, akkor az adatokat is fel¨ul kell ´ırni.
3.1.2 GRUB A k´et bootloader k¨oz¨ul (LILO2 e´ s GRUB3 ) k´ets´egtelen¨ul a GRUB bootloader a nagyobb tud´as´u. (A legt¨obb Linux disztrib´uci´o GRUB bootloader-el jelenik meg.) P´eld´aul lehet˝os´eg¨unk van u´ j kernelt vagy 1 DOS
alatt a fdisk /mbr paranccsal lehet az MBR-t fel¨ul´ırni. LOader 3 GRand Unified Bootloader 2 LInux
11
param´etert megadni an´elk¨ul, hogy az MBR minden alkalommal friss´ıteni kellene. B´ar a GRUB flexibilis e´ s nagy tud´as´u bootloader, de az´ert e´ rdemes a boot szektort elmenteni, hogy katasztr´ofa eset´en k´es˝obb vissza lehessen a´ ll´ıtani. Ezt l´attuk a 3.1.1. fejezetben. A GRUB bootloader be´all´ıt´asait, konfigur´al´as´at, egy k¨ozponti file-on kereszt¨ul lehet megtenni. Debian rendszeren a konfigur´aci´os file a /boot/grub/menu.lst m´ıg egy Red Hat rendszeren: /etc/grub/grub.conf A file t¨obb bejegyz´est is tartalmaz, amelyek megadj´ak a kernel nev´et, a root part´ıci´ot, hol van a kernel e´ s ha van akkor az initrd param´etereit is. Egy tipikus bejegyz´es a file-ben a k¨ovetkez˝o lehet: title root kernel initrd
Ubuntu, kernel 2.6.8.1-2-386 (hd0,2) /vmlinuz-2.6.8.1-2-386 root=/dev/hda3 ro quiet splash /initrd.img-2.6.8.1-2-386
Fontos tudni, hogy a GRUB a merevlemez part´ıci´oival dolgozik e´ s egy kicsit m´ask´eppen hivatkozik r´ajuk mint a Linux. Linux alatt az els˝o merev lemezre a /dev/hda-val lehet hivatkozni. Linux alatt bet˝u jel¨oli a lemezeket: “a”, “b”, “c” e´ s ´ıgy tov´abb. Ha konkr´et part´ıci´ora akarunk hivatkozni, akkor pedig m´eg egy sz´amot is haszn´alunk, p´eld´aul: /dev/hda3. Ezzel szemben GRUB alatt a merev lemezeknek sz´amuk van, null´at´ol indulva: “0”, “1”, “2” e´ s ´ıgy tov´abb. A part´ıci´ok sz´ama is null´at´ol kezd˝odik ez´ert ha a Linux part´ıci´ot a GRUB sz´am´ara akarjuk megadni, akkor a bet˝ut sz´ammal kell helyettes´ıteni e´ s a part´ıci´o sz´am´ab´ol egyet ki kell vonni. P´eld´aul: a Linux part´ıci´o /dev/hda3 hd0,2 lesz GRUB alatt. A fenti p´eld´aban ez´ert van k´etf´ele megad´asi m´od. A root kezdet˝u sor a GRUB-nak sz´ol, m´ıg a kernel kezdet˝u sorban a root param´eter m´ar a Linux kernelnek sz´ol. Ha egy m´asik oper´aci´os rendszer is van a sz´am´ıt´og´ep¨unk¨on akkor azt is hozz´a kell adni a konfigur´aci´os file-hoz, hogy el lehessen ind´ıtani. P´eld´aul Windows eset´en egy lehets´eges be´all´ıt´as a k¨ovetkez˝o lesz: title root makeactive chainloader
Windows 95/98/NT/2000 (hd0,0) +1
Amikor nem Linux jelleg˝u oper´aci´os rendszert kell bet¨olteni, akkor a´ ltal´aban haszn´alni kell a makeactive opci´ot amivel az oper´aci´os rendszerhez tartoz´o opci´ot akt´ıvv´a tessz¨uk. A chainloader opci´oval azt tessz¨uk lehet˝ov´e, hogy a bootloader egy m´asik bootloader-t ind´ıtson el, p´eld´aul a Windows bootloadere´ t. Ha a sz´am´ıt´og´ep indul´asakor nem jelenik meg a bootloader men¨uje, az az´ert van mert a hiddenmenu opci´o szerepel a konfigur´aci´os file-ban. Kommentezz¨uk ki, ha szeretn´enk a men¨ut l´atni. A men¨uben az alapesetk´ent kijel¨olt oper´aci´os rendszert a default opci´oval adhatjuk meg. A konfigur´aci´os fileban szerepl˝o oper´aci´os rendszer defin´ıci´okat a GRUB automatikusan besz´amozza u´ gy, hogy az els˝oh¨oz a null´as sz´am van hozz´arendelve. ´Igy, ha az els˝o oper´aci´os rendszert akarjuk alapesetnek v´alasztani akkor a default
0
sort kell be´ırni a konfigur´aci´os file-ba. A timeout opci´o pedig azt adja meg, hogy h´any m´asodperc ut´an automatikusan boot-oljon a kiv´alasztott oper´aci´os rendszer.
12
Grafikus k´ep boot-ol´as sor´an A GRUB bootloader el´eg egyszer˝uen n´ez ki. Ugyanakkor lehet˝os´eg¨unk van egy h´att´erk´ep haszn´alat´ara, ami a men¨u m¨og¨ott jelenik meg. A k´epnek teljes´ıteni kell h´arom felt´etelt: • XPM form´atum´unak kell lennie, • 640x480 pixel m´eret˝u kell legyen e´ s • nem tartalmazhat 14 sz´ınn´el t¨obbet. Az XPM k´epet o¨ ssze kell t¨om¨or´ıteni: # gzip hatterkep.xpm majd be kell m´asolni a boot k¨onyvt´arba: # cp hatterkep.xpm.gz /boot/grub V´eg¨ul a GRUB konfigur´aci´os file-j´aba a k¨ovetkez˝o sort kell be´ırni: splashimage=(hd0,0)/boot/grub/hatterkep.xpm.gz felt´etelezve, hogy a boot part´ıci´o a /dev/hda1-nak felel meg.
3.1.3 LILO A LILO bootloader konfigur´aci´os file-ja a´ ltal´aban a /etc/lilo.conf. Az al´abb bemutatott minta file eset´en felt´etelezz¨uk, hogy egy Windows rendszer tal´alhat´o az els˝o part´ıci´on e´ s a Linux a m´asodik part´ıci´on van: boot=/dev/hda map=/boot/map install=/boot/boot.b compact prompt timeout=50 image=/boot/vmlinuz-2.0.36 label=linux root=/dev/hda2 read-only other=/dev/hda1 label=win boot=/dev/hda : A LILO bootloader az els˝o merev lemez master boot rekordj´aba lesz install´alva map=/boot/map : A map file-t a LILO gener´alja. Ne ny´uljunk hozz´a! install=/boot/boot.b : Ez a sor mondja meg, hogy a LILO mit haszn´aljon u´ j boot szektork´ent. Ez a file tartalmazza azt a k´odot, ami majd bet¨olti az oper´aci´os rendszert. compact : Az opci´o megad´as´aval a LILO gyorsabban fogja olvasni a merev lemezt. N´eh´any r´egebbi rendszer eset´en nem m˝uk¨odik. Ha a rendszer nem tud bebootolni, t¨or¨olj¨uk ezt a sort. prompt : Megadja, hogy egy men¨u jelenjen meg, amib˝ol oper´aci´os rendszert v´alaszthatunk illetve param´etert adhatunk meg.
13
timeout=50 : Ez az opci´o adja meg, hogy h´any m´asodpercig v´arjon a LILO, ami ut´an a bootloader az alap oper´aci´os rendszert t¨olti be. image : A kernel file nev´et adja meg. Maximum 16 f´ele kernel adhat´o meg. Az els˝o image szokott az alap be´all´ıt´as lenni, hacsak m´as opci´ot nem adunk meg. Az ut´ana k¨ovetkez˝o sorok a kernel param´eterei lesznek bet¨olt´eskor. label : Ez az opci´o adja meg, hogy mi jelenjen meg a men¨uben, illetve a bootloader parancssor´aban is ezt a nevet adhatjuk meg a kernel bootol´as´ahoz. root=/dev/hda2 : Megadja, hogy hol tal´alhat´o a root part´ıci´o. read-only : Az opci´o hat´as´ara a bootloader csak olvashat´o a´ llapotban t¨olti be a root file rendszert. K´es˝obb a bootol´as sor´an u´ jra bet¨olt˝odik a root file rendszer. (Nem szabad megv´altoztatni, hacsak nem tudod, hogy mit csin´alsz!) other=/dev/hda1 : Ez opci´o olyan mint az image opci´o, csak ez azt adja meg, hogy nem Linux rendszert fogunk bet¨olteni. A LILO egyszer˝uen az adott merev lemez boot rekordj´at fogja v´egrehajtani. B´armikor v´altoztat´ast v´egz¨unk a lilo.conf file-ban, ut´ane le kell futtatni egy friss´ıt´est: # /sbin/lilo Grafikus k´ep boot-ol´as sor´an LILO bootloader is k´epes a grafikus k´ep megjelen´ıt´es´ere a boot men¨u alatt. A grafikus k´ep megjelen´ıt´es´ehez a grafikus k´arty´anak t´amogatnia kell azt a VESA m´odot, melyben 640x480 m´eret˝u 255 szin˝u k´epet tud megjelen´ıteni. (A kernelnek nem kell t´amogatnia frame buffer m´odot, mivel amikor a LILO megjelen´ıti ezt a k´epet, akkor m´eg a kernel nincs bet¨oltve ´ıgy a LILO nem t´amaszkodhat a kernelre.) A k´epben egy 255 elem˝u sz´ınpalett´aval kell megadni a sz´ıneket. (Angolul, a k´epnek “Indexed”-nek kell lennie.) A LILO bootloader konfigur´aci´os file-j´aba (lilo.conf) a k¨ovetkez˝o sorokat be´ırva bekapcsoljuk a grafikus k´epek megjelen´ıt´es´et illetve konfigur´aljuk a megjelen´est: install=bmp bitmap=/boot/lilo-boot-tux.bmp bmp-table=48p,15p,1,12 bmp-colors=250,,,255,, bmp-timer=300p,184p,250,, A bitmap kezdet˝u sorban lehet megadni, hogy a k´ep hol tal´alhat´o. A bmp-table opci´o adja meg, hogy a k´eperny˝on hova ker¨ul a boot men¨u. Az opci´o form´atuma: bmp-table=<x>,
,,<sorok> ahol az x e´ s y koordin´at´ak a men¨u bal fels˝o pontj´anak a pixel koordin´at´ait adja meg. A sz´am ut´ani “p” bet˝uvel jel¨olj¨uk, hogy pixel koordin´at´akr´ol van sz´o. Az opci´oban megadhat´o, hogy h´any oszlop e´ s h´any sorb´ol a´ ll a men¨u. P´eld´aul egy hat soros men¨u eset´en: bmp-table=55,224,1,6 A bmp-timer opci´o adja meg, hogy a k´eperny˝on hova ker¨ul a stopper (id˝oz´ıt˝o) ami a visszasz´aml´al´ast v´egzi. Az opci´o form´atuma: ın> ek-sz´ arny´ ın>,<´ er-sz´ att´ ın>,,,<el}
14
Itt is a bal fels˝o pont koordin´at´ait kell megadni. Az id˝oz´ıt˝o sz´ınei a k´epb˝ol hat´arozhat´ok meg. A grafikus k´ep sz´ınpalett´aja 255 sz´ınt tartalmazhat. Az opci´o utols´o h´arom e´ rt´ek´et u´ gy lehet meghat´arozni, hogy az a´ ltalunk v´alasztott sz´ın index´et kikeress¨uk a palett´ab´ol e´ s azt ´ırjuk be a sorba. P´eld´aul ha a k´ep sz´ınpalett´aj´aban a 0 index˝u elem a feh´er e´ s a 254 index˝u elem a fekete, illetve nem akarunk a´ rny´ek sz´ınt megadni, akkor a k¨ovetkez˝o sort adhatjuk meg: bmp-timer=582p,455p,0,254, A bmp-colors opci´o a men¨u sz´ıneit adja meg. Az opci´o form´atuma: bmp-colors=<el} o-sz´ ın>,,<´ arny´ ek-sz´ ın>,<sel-fg>,<sel-bg>,<sel-sh> ahol <sel-fg> a kiv´alasztott sor el˝ot´er-sz´ıne, a <sel-bg> a kiv´alasztott sor h´att´er-sz´ıne e´ s a <sel-sh> a kiv´alasztott sor a´ rny´ek sz´ıne. A sz´ınek indexei itt is a k´ep sz´ınpalett´aj´ab´ol sz´armaznak. V´eg¨ul a boot rekord friss´ıt´es´ere futtassuk le a k¨ovetkez˝o parancsot: # /sbin/lilo
¨ ese 3.1.4 Bootloader megkerul´ El˝ofordulhat, hogy az MBR-t t¨onkretett¨uk, vagy valami´ert megs´er¨ult e´ s m´egis szeretn´enk bebootol-ni egy oper´aci´os rendszert. Az is el˝ofordulhat, hogy egy u´ j kernelt akartunk haszn´alni, de nem m˝uk¨odik e´ s a r´egi kernelt szint´en t¨or¨olt¨uk. Minden esetre szeretn´enk haszn´alhat´ov´a a sz´am´ıt´og´ep¨unket. A legt¨obb install´aci´os CD haszn´alhat´o a sz´am´ıt´og´epen lev˝o oper´aci´os rendszer megvizsg´al´as´ara e´ s helyre´all´ıt´as´ara. Az install´aci´os CD v´egrehajt´asa sor´an a sz´am´ıt´og´ep¨unk e´ rintetlen marad am´ıg el nem kezdj¨uk particion´alni a merev lemezt. Amikor aljutunk eddig a pontig, ne kezdj¨uk el a particion´al´ast, hanem pr´ob´aljuk ki a Ctrl-Alt-F(n) (p´eld´aul: Ctrl-Alt-F3) billenty˝u kombin´aci´ot. A billenty˝uk lenyom´as´aval egy virtu´alis termin´alra jutunk. (Lehet hogy n´eh´anyszor meg kell nyomni az Enter billenty˝ut, hogy “aktiv´al´odjon”. Az install´aci´os CD-ken a virtu´alis termin´alokban egy kis m´eret˝u shell a´ ll rendelkez´esre, BusyBox. A BusyBox shell egy szokv´anyos shell cs¨okkentett v´altozat´anak felel meg, de minden sz¨uks´eges parancsot tartalmaz. Miut´an a shell rendelkez´esre a´ ll, be kell mount-olni a merev lemez azon part´ıci´oj´at, ahol p´eld´aul a /boot k¨onyvt´ar van. P´eld´aul: # mkdir /bootmnt # mount /dev/hda1 /bootmnt Ha egy´eb m´odos´ıt´asra is sz¨uks´eg van, akkor a root part´ıci´ot is be kell mount-olni: # mkdir /rootmnt # mount /dev/hda3 /rootmnt A merev lemezen tal´alhat´o root part´ıci´o bet¨olt´ese ut´an ezt kell aktu´aliss´a tenni, hogy a merev lemezen lev˝o parancsok el´erhet˝ok legyenek: # chroot /rootmnt
3.1.5 Egy´eb bootloader-ek http://btmgr.sourceforge.net
15
3.2 Bootol´as 3.2.1 initrd ´ aban ezek Tegy¨uk fel, hogy olyan sz´am´ıt´og´ep¨unk van amiben SCSI vez´erl´es˝u merev lemez van. Altal´ a merev lemezek speci´alis meghajt´ot ig´enyelnek. A bootloader a BIOS megszak´ıt´asokon kereszt¨ul hozz´af´er a merev lemezhez e´ s be tudja t¨olteni a kernelt (rendszermagot). Ugyanakkor el˝ofordulhat, hogy a a kernelhez modulok tartoznak, vagyis bizonyos szolg´altat´asok csak k¨uls˝o, de bet¨olthet˝o modulk´ent a´ llnak rendelkez´esre. P´eld´aul az SCSI vez´erl˝o programja modulk´ent is ford´ıthat´o a kernelhez. Ez egy csapda helyzethez vezethet. A bootol´as sor´an a kernel m´ar a mem´ori´aban van, de nem tudja bet¨olteni a root file rendszert mivel ahhoz az SCSI vez´erl˝o modul kellene, ami viszont a root file rendszeren van. A probl´ema felold´as´ara k´et megold´as is l´etezik: 1. Az els˝o esetben a kernelbe van ford´ıtva az SCSI t´amogat´as e´ s ´ıgy a kernel hozz´af´er az SCSI merev lemezhez. 2. A m´asodik esetben initrd file rendszert haszn´alunk, ami egy el˝ozete gy¨ok´er k¨onyvt´arnak felel meg. Az initrd az “Initial RAM Disk” r¨ovid´ıt´ese. Ez egy kis file rendszer, amit a bootloader t¨olt be e´ s a kernel a vel´odi root file rendszer helyett t¨olt be. A kernel RAM lemezk´ent t¨olti be a file rendszert, v´egrehajtja a /linuxrc file-t, majd felcsatolja a val´odi root file rendszert.
3.2.2 Boot scriptek
3.3 Le´all´ıt´as A rendszer le´all´ıt´as´ahoz a shutdown parancsot haszn´aljuk. A parancs figyelmeztet minden felhaszn´al´ot, mindent processzust, hogy a rendszer le´all, blokkolja az u´ j bel´ep´eseket e´ s “tiszt´an” le´all´ıtja a rendszert. (Ha csak kih´uzzuk az elektromos k´abelt a falb´ol a rendszer “megfelel˝o” le´all´ıt´asa n´elk¨ul az k´es˝obb probl´em´akhoz e´ s adatveszt´eshez vezethet. A rendszer teljes le´all´ıt´as´ahoz a -h opci´ot haszn´aljuk, a rendszer u´ jraind´ıt´as´ahoz a -r opci´ot kell haszn´alni.
3.3.1 Azonnali le´all´ıt´as A le´all´ıt´asn´al azt is megadhatjuk, hogy mikor t¨ort´enjen meg. P´eld´aul, ha azonnal szeretn´enk le´all´ıtani a rendszert, akkor a now argumentumot is meg kell adni. P´eld´aul, az azonnali le´all´ıt´ashoz: # shutdown -h now parancsot kell megadni, m´ıg az azonnali u´ jraind´ıt´eshoza a k¨ovetkez˝ot kell beg´epelni: # shutdown -r now A shutdown parancs azt is lehet˝ov´e teszi, hogy figyelmeztet˝o u¨ zenet jelenjen meg minden termin´alon, ahol felhaszn´al´o be van jelentkezve: # shutdown -h now ’’A gep azonnal leall!’’
3.3.2 Le´all´ıt´as adott id˝oben Adott id˝oben t¨ort´en˝o le´all´ıt´ashoz az id˝ot 24 o´ r´as form´atumban kell megadni. P´eld´aul ha reggel 4:23-kor akarjuk le´all´ıtani a g´epet a k¨ovetkez˝ot kell beg´epelni:
16
# shutdown -h 4:23 m´ıg az este 8 o´ r´as le´all´ıt´ashoz # shutdown -h 20:00 a fenti parancsot kell beg´epelni. A rendszer “x” perc m´ulva t¨ort´en˝o le´all´ıt´as´ahoz egy plusz jelet (‘+’) e´ s a percet kell megadni a parancs ut´an. P´eld´aul ha a rendszert le´all´ıtjuk 5 perc m´ulva a k¨ovetkez˝ot gepelhetj¨uk be: # shutdown -h +5 Term´eszetesen az u¨ zenet k¨uld´esi argumentum ezekn´el a prancsokn´al is haszn´alhat´o: # shutdown -h 00:00 ’’A gep leall ejfelkor karbantartas miatt!’’
3.3.3 A le´all´ıt´as visszavon´asa El˝ofodulhat, hogy egy id˝oz´ıtett le´all´ıt´ast m´egsem szeretn´enk v´egrehajtani, vagyis szeretn´enk visszavonni. Ehhez a shutdown parancsot ism´etelten le kell futtatni: # shutdown -c Ez minden m´ar elind´ıtott le´all´ıt´asi folyamatot visszavon, “le´all´ıt”. Ebben az esetben is lehet u¨ zenetet k¨uldeni a felhaszn´al´oknak: # shutdown -c ’’Bocsanat, rossz gombot nyomtam le!’’
17
18
4. Fejezet
Felhaszn´al´ok e´ s csoportok A felhaszn´al´ok vagy felhaszn´al´oi fi´okok (user account) e´ s csoportok (group) kezel´ese, illetve a felhaszn´al´ok azonos´ıt´asa tal´an a legfontosabb feladat, amit a rendszergazd´anak el kell l´atnia. A felhaszn´al´oi fi´okokra az´ert van sz¨uks´eg, mivel ezeken kereszt¨ul f´er¨unk hozz´a a rendszerhez, ezekkel bizony´ıtjuk hogy kik vagyunk e´ s hogy jogunk van-e hozz´af´erni az inform´aci´okhoz e´ s az er˝oforr´asokhoz a sz´am´ıt´og´epen. ´Igy ez a fejezet t¨obb l´ep´esben e´ s t¨obb szempontb´ol foglalkozik a felhaszn´al´oi fi´okokkal.
4.1 Alapok A Unix e´ s ´ıgy a Linux is t¨obbfelhaszn´al´os oper´aci´os rendszer, vagyis egy id˝oben t¨obb felhaszn´al´o is dolgozhat a rendszeren. Az oper´aci´os rendszer szempontj´ab´ol a felhaszn´al´o nem felt´etlen¨ul egyetlen ember. A felhaszn´al´o tulajdonk´eppen egy olyan “entit´as” akinek/aminek joga van programokat futtatni a rendszeren, vagy file-okat birtokol a rendszeren. P´eld´aul vannak olyan felhaszn´al´oi fi´okok, melyek csak az´ert l´eteznek, hogy egy szolg´altat´ashoz tartoz´o programot lefuttassanak. Ezeket a felhaszn´al´oi fi´okokat “pszeudo felhaszn´al´oknak” nevezz¨uk. Term´eszetesen a legt¨obb esetben a felhaszn´al´oi fi´ok egy szem´elyhez k¨othet˝ok. Minden felhaszn´al´onak van egy felhaszn´al´oi neve (username) ami a rendszeren azonos´ıtja. Mint l´atni fogjuk, enn´el fontosabb, hogy minden felhaszn´al´ohoz tartozik egy felhaszn´al´oi azonos´ıt´o sz´am: user identification number or UID. Val´oj´aban az oper´aci´os rendszerben ez a sz´am azonos´ıtja a felhaszn´al´ot e´ s a felhaszn´al´oi n´ev csak hozz´a van rendelve. Ezen k´ıv¨ul minden felhaszn´al´o egy vagy t¨obb csoportba is tartozik. Egy csoportba olyan felhaszn´al´ok tartoznak, akik azonos feladatot v´egeznek, esetleg azonos szervezetben dolgoznak vagy valami egy´eb k¨oz¨os tulajdons´aguk van. Ebben az esetben is egy csoport azonos´ıt´o sz´am (group identification number, GID) jellemzi a csoportot az oper´aci´os rendszerben bels˝oleg, amihez a csoport neve csak hozz´a van rendelve. Az UID e´ s GID sz´amok k¨oz¨osen hat´arozz´ak meg, hogy milyen jogaink vannak a rendszeren, milyen file-okhoz f´er¨unk hozz´a. A Unix rendszereken a file-ok e´ s k¨onyvt´arak biztons´aga olyan strat´egi´aval val´osul meg ami k¨ozvetlen¨ul k¨othet˝o a felhaszn´al´oi azonos´ıt´okhoz e´ s csoport azonos´ıt´okhoz! A felhaszn´al´oi fi´okok e´ s a csoportok adatait a k¨ovetkez˝o file-ok t´arolj´ak: • /etc/passwd : felhaszn´al´oi fi´okok defin´ıci´oja • /etc/shadow : k´odolt jelszavak e´ s tulajdons´agaik • /etc/group : csoportok defin´ıci´oja e´ s csoport tagok • /etc/gshadow : csoport jelszavak (csak Linux-on)
19
4.2 /etc/passwd file Az /etc/passwd file minden felhaszn´al´or´ol tartalmaz egy bejegyz´est1 . Egy bejegyz´es egy sorb´ol a´ ll, melynek a´ ltal´anos szerkezete a k¨ovetkez˝o: username:x:UID:GID:gecos:home-dir:login-shell A bejegyz´esben a mez˝oket a kett˝ospont v´alasztja el e´ s a SPACE karakter csak a gecos mez˝oben megengedett! A kis e´ s nagy bet˝uk k¨ul¨onbs´ege fontos ebben a file-ban! A mez˝ok egyes jelent´ese: ´ aban 8 karakterben limit´alt, de username : Ez a mez˝o adja meg a sz¨oveges felhaszn´al´oi nevet. Altal´ bizonyos Unix rendszerek hosszabb nevet is megengednek. Ez az inform´aci´o mindig nyilv´anos, mivel t¨obb program is haszn´alja. x : Hagyom´anyosan a m´asodik mez˝o a k´odolt jelsz´ot tartalmazta, de a “shadow” jelszavak bevezet´ese o´ ta ez a mez˝o m´ar csak az x karaktert tartalmazza. B˝ovebb magyar´azat a 4.3. bekezd´esben. UID : A “user identification number” vagy felhaszn´al´oi azonos´ıt´o sz´am. Minden felhaszn´al´onak egyedi sz´ama van. A rendszer felhaszn´al´ok (“system account”) azonos´ıt´o sz´ama a´ ltal´aban 100 alatti. (Linuxon manaps´ag 500 alatti e´ s FreeBSD rendszeren az 1000 alatti azonos´ıt´o sz´amok tartozhatnak a rendszer felhaszn´al´okhoz.) Bizonyos rendszeradminisztr´atorok valamilyen s´em´at alkalmazn´ak az azonos´ıt´ok felhaszn´al´okhoz t¨ort´en˝o hozz´arendel´ese sor´an. P´eld´aul: Informatika ´ ıt˝om´ern¨oki tansz´ek: 500-599 e´ s ´ıgy tov´abb. tansz´ek: 200-299, Ep´ Fontos, hogy ha k´et felhaszn´al´onak ugyanaz az azonos´ıt´o sz´ama, akkor a rendszer szempontj´ab´ol egy felhaszn´al´onak sz´am´ıtanak! Ker¨ulj¨uk ezt a t´ıpus´u probl´em´akat. GID : A felhaszn´al´o els˝odleges csoportj´anak az azonos´ıt´o sz´ama. A csoport azonos´ıt´o sz´amnak megfelel˝o csoportnevet a /etc/group file-ban tal´alhatjuk meg. Az azonos csoportba tartoz´o felhaszn´al´ok megoszthatnak file-okat egym´as k¨oz¨ott ha a file csoport jogosults´aga megfelel˝oen ´ aban itt is igaz, hogy a 100 alatti sz´amok rendszer felhaszn´al´okhoz tartoznak. van be´all´ıtva. Altal´ gecos : Ez a mez˝o b´armilyen inform´aci´ot tartalmazhat a felhaszn´al´or´ol, pl. a felhaszn´al´o teljes nev´et, irod´aj´anak sz´am´at, stb. home-dir : A felhaszn´al´o home k¨onyvt´ara, vagyis a bel´ep´es ut´an a felhaszn´al´o ebbe a k¨onyvt´arba ker¨ul, illetve ebben a k¨onyvt´arban t´arolhatja a felhaszn´al´o a saj´at file-jait. login-shell : A bel´ep´es ut´an az oper´aci´os rendszer egy parancs e´ rtelmez˝ot, vagy angol nev´en “shell”-t ind´ıt el. Ez a bejegyz´es adja meg, hogy melyik parancs e´ rtelmez˝o induljon el, mivel t¨obbf´ele is l´etezik: Bourne shell : /bin/sh C shell : /bin/csh Korn shell : /bin/ksh Bash shell : L´enyeg´eben egy Bourne shell, de t¨obb hasznos kieg´esz´ıt´est tartalmaz. A Linux rendszereken szinte kiz´ar´olag ezt a shell-t haszn´alj´ak. A legt¨obb rendszeren az /etc/shells file tartalmazza a shell-ek list´aj´at. Egy tipikus bejegyz´es az /etc/passwd file-ban a k¨ovetkez˝o lehet: kovacs:x:222:120:Kovacs Istvan:/home/kovacs:/bin/sh 1 Ezt
a kijelent´est k´es˝obb m´eg m´odos´ıtjuk
20
4.2.1 Az /etc/passwd file m´odos´ıt´asa Mivel az /etc/passwd file egy egyszer˝u ASCII file, ez´ert b´armilyen sz¨ovegszerkeszt˝ovel m´odos´ıthat´o. Figyelem: Amikor az /etc/passwd file-t m´odos´ıtjuk legy¨unk o´ vatosak! P´eld´aul el˝osz¨or k´esz´ıts¨unk biztons´agi m´asolatot a file-r´ol. $ cd /etc $ cp passwd passwd.bak $ vi passwd Enn´el biztons´agosabb m´odszer, ha nem k¨ozvetlezn¨ul a /etc/passwd file-t m´odos´ıtjuk, hanem a m´asolatot majd miut´an v´egezt¨unk visszam´asoljuk a /etc/passwd file hely´ere: $ cd $ cp $ vi ... $ cp
/etc passwd passwd.new passwd.new passwd.new passwd
V´eg¨ul a legbiztons´agosabb m´odszer a vipw program haszn´alata. A program k´esz´ıt egy m´asolatot az adott file-r˝ol, majd egy sz¨ovegszerkeszt˝o programot elind´ıtva lehet˝ov´e teszi a file biztons´agos m´odos´ıt´as´at. A m´asolat file egy z´arol´o mechanizmusk´ent is szolg´al, mivel a vipw program nem indul el akkor ha a m´asolat file l´etezik. Ezzel a m´odszerrel kiz´arhatjuk, hogy egyszerre ketten szerkessz´ek ugyanazt a file-t. A vipw program azt a sz¨ovegszerszt˝ot v´alasztja, ami az EDITOR k¨ornyezeti v´altoz´oban van megadva. (Ha sem a VISUAL e´ s sem a EDITOR k¨ornyezeti v´altoz´o nincs megadva, akkor a vi sz¨ovegszert˝o indul el.) Miel˝ott a vipw program elmenten´e a file-t, n´eh´any ellen˝orz´est v´egez, majd ha nincs semmi probl´ema, akkor az eredeti file-t a´ tnevezi (Linuxon az u´ j file neve a´ ltal´aban /etc/passwd-) e´ s v´eg¨ul ki´ırja a m´odos´ıtott adatokat az eredeti file-ba. A vipw programnak megfelel˝oen van egy vigr program is, ami pedig az /etc/group file-t szerkeszti. Mindk´et programnak meg lehet adni a -s opci´ot ami lehet˝ove teszi a “shadow” file-ok szerkeszt´es´et. A vipw -s program az /etc/shadow file-t, a vigr -s program az /etc/gshadow file-t tudja szerkeszteni.
4.3 /etc/shadow file A legt¨obb Unix rendszer t´amogatja a “shadow” jelsz´o t´arol´asi m´odszert. Mi´ert kell ez? A Unix rendszereken az /etc/passwd file mindenki a´ ltal olvashat´o file-nak kell lennie, mivel b´armilyen programnak vagy szolg´altat´asnak sz¨uks´ege lehet arra, hogy a felhaszn´al´oi n´evb˝ol UID sz´amot kapjunk e´ s ford´ıtva (UID sz´amb´ol felhaszn´al´oi nevet). Ugyanakkor a mindenki a´ ltal olvashat´o file probl´em´at jelent, mivel mindenki, m´eg a “rossz” fi´uk is m´asolatot k´esz´ıthetnek r´ola. Ez azt jelenti, hogy ha a jelszavak a file-ban vannak, akkor azok is olvashat´ok mindenki a´ ltal. Gondolhatn´ank, hogy akkor el´eg lenne a k´odolt jelszavakat t´arolni a file-ben e´ s ez megoldja a probl´em´at. A helyzet az, hogy ´ıgy egy kicsit biztons´agosabbnak l´atszik a rendszer, de val´oj´aban nem az. A “rossz” fi´uk jelsz´o t¨or˝o (crack) programot haszn´alhatnak. A crack program a jelsz´o nagyon sok vari´aci´oj´at v´egigpr´ob´alja, mindegyik jelsz´ot k´odolja e´ s megn´ezi, hogy a k´odol´as eredm´enye ugyanaz-e mint ami a jelsz´o file-ban van. Ezzel a m´odszerrel a 80-as e´ vekben sok jelsz´ot siker¨ult felt˝orni e´ s a m´odszer angol neve “brute force” vagyis nyers er˝o m´odszer. (A m´odszer nem csak jelszavak megtal´al´as´an´al m˝uk¨odik, hanem minden olyan esetben amikor az o¨ sszes vari´aci´ot v´egig tudjuk pr´ob´alni.) A shadow file l´enyege, hogy az /etc/passwd file csak a sz¨uks´eges adatokat tartalmazza, de a jelsz´o a´ tker¨ul a shadow file-ba. A shadow file-t csak a root felhaszn´al´o olvashatja e´ s ´ırhatja, ´ıgy a k´odolt jelsz´o v´edve van az el˝obb le´ırt t´amad´asi m´odszerrel szemben. A shadow file a´ ltal´anos helye: /etc/shadow, e´ s a file form´atuma abban hasonl´o az /etc/passwd file-hoz, hogy minden felhaszn´al´ohoz egy sor tartozik, aminek a k¨ovetkez˝o a szintakszisa:
21
alt ar:nem-haszn´ alt:minlife:maxlife:warn:inactive:lej´ o-v´ o:utols´ username:jelsz´
A username adja meg a felhaszn´al´oi nevet (aminek a p´arja az /etc/passwd file-ban van) e´ s a jelsz´ o mez˝o tartalmazza a k´odolt jelsz´ot. A t¨obbi mez˝o a jelsz´o “¨oreged´esi” met´odus param´eterei e´ s a 4.15.2. bekezd´esben t´argyaljuk.
4.4 /etc/group file A felhaszn´al´oi csoportokat lehet megadni az /etc/group file-ban. Az egy csoportba tartoz´o felhaszn´al´ok file-okat e´ s rendszer er˝oforr´asokat tudnak megosztani. K´etf´ele m´odon lehet megadni, hogy felhaszn´al´o melyik csoportba tartozik: 1. az /etc/passwd file negyedik mez˝oje GID-el adja meg, 2. az /etc/group file-ban adjuk meg explicit m´odon. A legt¨obb Unix rendszeren egy felhaszn´al´o csak 16 csoportba tartozhat!2 Az /etc/group file minden sora k¨ul¨on bejegyz´esnek sz´am´ıt, aminek a form´atuma: n´ ev:*:GID:felhaszn´ al´ oi-nevek-list´ aja ahol az egyes mez˝ok jelent´ese: n´ev : Ez a mez˝o adja meg a csoport nev´et. * : Hagyom´anyosan a m´asodik mez˝o tartalmazta a csoport jelsz´ot, de ma m´ar csak egy helyettes´ıt˝o karaktert tartalmaz, mivel a csoport jelszavak a /etc/gshadow file-ban tal´alhat´ok. (Igaz´ab´ol, ma m´ar csak Linux haszn´alja a csoport jelszavakat.) GID : A csoport azonos´ıt´o sz´am. Itt is a´ ltal´aban igaz, hogy a 100 alatti e´ rt´ekek a rendszer csoportokhoz tartoznak. felhaszn´al´oi-nevek-list´aja : Ez a bejegyz´es a csoportba tartoz´o felhaszn´al´ok list´aj´at tartalmazza, ahol is a nevek vessz˝ovel vannak elv´alasztva. A csoportba nem csak azok a felhaszn´al´ok tartoznak, akik itt fel vannak sorolva, hanem azok a felhaszn´al´ok is akiknek a GID bejegyz´ese a /etc/passwd file-ban ennek a csoportnak az azonos´ıt´oj´aval egyenl˝o. A felsorolt felhaszn´al´oi nevek megfelelnek az /etc/passwd file-ban tal´alhat´o neveknek. Egy tipikus bejegyz´es az /etc/group file-ban a k¨ovetkez˝o lehet: gazdasag:*:123:kiss,nemeth,kovacs oktatas:*:222:nagy,jozsa,kovacs it:*:120: Fontos meg´erteni, hogy ha a felhaszn´al´oi n´ev e´ s a csoport ugyanaz is, e´ s esetleg az UID e´ s a GID is azonos, att´ol m´eg k´et teljesen kul¨ ¨ onb¨oz˝o dologr´ol van sz´o e´ s nincs semmi kapcsolat k¨oz¨ottuk! ¨ Az /etc/group file k¨ozvetlen¨ul is m´odos´ıthat´o, de a vigr program is haszn´alhat´o a biztons´ag kedv´ee´ rt. 2 Vannak olyan Unix rendszerek, amelyeken minden felhaszn´ al´o egy olyan csoportba tartozik, melynek csak az az egy felhaszn´al´o a tagja: “user private group” vagy UPG. Ilyen rendszer a Red Hat Linux e´ s a Debian is ezt a strat´egi´at alkalmazza alap esetben.
22
4.4.1 Els˝odleges csoport A Unix rendszerek nem tesznek k¨ul¨onbs´eget a k´et m´odszer k¨oz¨ott, ahogyan a felhaszn´al´okat csoportba soroljuk. A felhaszn´al´o egyszerre mindegyik csoportj´aba tartozik. Egy felhaszn´al´o csoportjainak ki´ırat´as´ara a groups parancs haszn´alhat´o: $ groups gazdasag vezetes Egy adott felhaszn´al´o csoportjainak a ki´ırat´as´ara a parancsnak a felhaszn´al´oi nevet is meg lehet adni: $ groups kovacs gazdasag oktatas it Mindezzel szemben van olyan eset, amikor fontos, hogy a felhaszn´al´onak mi az els˝odleges csoportja. P´eld´aul, amikor nyilv´antart´ast v´egz¨unk, hogy melyik kutat´ocsoport milyen m´ert´ekben haszn´alja az adott sz´am´ıt´og´epet, akkor fontos, hogy a megfelel˝o csoport legyen az els˝odleges csoport az adott felhaszn´al´on´al. Az els˝odleges csoport kiv´alaszt´as´ara a newgrp parancs haszn´alhat´o: $ newgrp kemia A parancs egy u´ j shell-t nyit meg, amiben a felhaszn´al´o els˝odleges csoportja a parancs argumentumak´ent megadott e´ rt´ek. Ha a parancsnak nem adunk meg argumentumot, akkor az /etc/passwd file-ban megadott, alap´ert´eket a´ ll´ıtja be a rendszer. Az els˝odleges csoport azonos´ıt´o lek´erdez´es´ere az id parancs alkalmas: $ id uid=222(kovacs) gid=120(it) groups=123(gazdasag),222(oktatas),120(it) A gid param´eter adja meg az els˝odleges csoportot.
4.5 /etc/gshadow file A Linux rendszereken egy extra file j´arul a hagyom´anyosan ismert /etc/passwd, /etc/shadow e´ s /etc/group file-okhoz, m´egpedig a /etc/gshadow file, ami a csoportok rejtett jelszavait t´arolja. A file szintakszisa: o-lista al´ o:csop-admin:felhaszn´ odolt-jelsz´ ev:k´ csop-n´ A csop-admin a csoportot fel¨ugyel˝o felhaszn´al´o, akinek joga van a jelsz´ot megv´altoztatni. A felhaszn´ al´ o-lista ugyanazokat a felhaszn´al´okat tartalmazza mint ami a csoport bejegyz´es mellett van az /etc/group file-ban. N´ezz¨unk n´eh´any p´eld´at: oktatas:xxxxxxxx:jack:joe,jim,anna vezetes:*:root:root,jack Fontos l´atni a fenti p´eld´ab´ol, hogy att´ol hogy egy felhaszn´al´o a csoport admin-ja, m´eg nem lesz a csoport tagja. Ezt k¨ul¨on meg kell adni, ahogy ez a m´asodik sorban l´athat´o. A m´asodik mez˝oben a csillag karakter (‘*’) azt jelenti, hogy a csoport blokkolt, vagyis egyetlen felhaszn´al´o sem tudja az els˝odleges csoportj´at erre a csoportra a´ ll´ıtani.
23
4.6 Csoportok hozz´aad´asa A csoportok l´enyege, hogy amikor a felhaszn´al´ok bizonyos k¨or´enek egy vagy t¨obb a´ llom´any vagy alkalmaz´as felett azonos jogosults´aggal kell rendelkeznie akkor ne kelljen a jogosults´agokat minden felhaszn´al´ora k¨ul¨on-k¨ul¨on be´all´ıtani, hanem egyszerre v´egezhess¨uk el a jogosults´ag kezel´est a csoportba tartoz´o minden felhaszn´al´ora. Egy csoport l´etrehoz´asa igen egyszer˝u, mert tulajdonk´eppen csak egy sor bejegyz´est kell ´ırni az /etc/group file-ba, a fent t´argyalt szintakszis alapj´an. Enn´el jobb megold´as a vigr program haszn´alata, de l´etezik k¨ul¨on parancs a csoportok l´etrehoz´as´ara: groupadd. P´elda egy csoport l´etrehoz´as´ara: $ groupadd tanarok A parancs a sorban k¨ovetkez˝o, nem rendszergazdai csoport azonos´ıt´o sz´amot (GID) fogja hozz´arendelni a tanarok csoporthoz. Ha explicit m´odon szeretn´enk megadni a csoport azonos´ıt´o sz´amot, akkog a -g kapcsol´ot kell haszn´alni: $ groupadd -g 1256 tanarok A program figyel arra, hogy egyedi nevet e´ s GID-et adjunk meg a csoportok eset´en. Ha valamelyik adat m´egsem egyedi akkor a program hib´aval fog kil´epni. A -o kapcsol´o seg´ıts´eg´evel megengedhetj¨uk a nem egyedi GID haszn´alat´at. A rendszer csoportok l´etrehoz´as´ahoz a -r kapcsol´ot kell megadni, illetve csoport jelsz´o eset´en a -p kapcsol´oval a k´odolt jelsz´ot. P´eld´aul: $ groupadd -r -p 2Isrg5623Gre tanarok A parancs m˝uk¨od´es´et befoly´asolja a /etc/login.defs konfigur´aci´os file-ben megadott n´eh´any param´eter, p´eld´aul: • GID_MAX, GID_MIN : Ezek az e´ rt´ekek adj´ak meg, hogy a nem rendszer szint˝u csoportok GID-je milyen tartom´anyba essen. • SYS_GID_MAX, SYS_GID_MIN : Ezek az e´ rt´ekek adj´ak meg, hogy a rendszer szint˝u csopor´ aban 0-1000 szokott lenni a k´et e´ rt´ek. tok GID-je milyen tartom´anyba essen. Altal´
4.7 Csoportok m´odos´ıt´asa A csoportok m´odos´ıt´as´ara a groupmod parancs alkalmas. Meg lehet v´altoztatni a csoport nev´et: $ groupadd -n oktatok tanarok ahol a tanarok helyett oktatok lesz a csoport neve. A csoport azonos´ıt´o sz´am (GID) is megv´altoztathat´o, de ebben az esetben manu´alisan kell azokat a file-okat megv´altoztatni, amelyeknek a csoport tulajdonosa a r´egi csoport volt. Ha ezt nem tessz¨uk meg, a csoport tulajdonos eset´en csak egy sz´amot (a r´egi sz´amot) fogja a rendszer kinyomtatni. P´eld´at l´asd a k¨ovetkez˝o bekezd´esben.
4.8 Csoportok t¨orl´ese A csoportok t¨orl´es´ere a groupdel parancs alkalmas. P´eld´aul: $ groupdel nyugdijasok A csoportnak l´eteznie kell. A parancs csak a bejegyz´eseket t¨orli a file-okb´ol, de a rendszeren tal´alhat´o file-ok csoport tulajdonjog´at nem v´altoztatja meg.
24
$ groupadd testcsop $ touch file $ chgrp testcsop file $ ls -l file -rw-r--r-- 1 user testcsop 0 2009-10-1 12:00 file $ groupdel testcsop $ ls -l file -rw-r--r-- 1 user 61 0 2009-10-1 12:00 file A fenti p´eld´aban az l´athat´o, hogy a csoport t¨orl´ese ut´an a file csoport tulajdonosa nem v´altozott meg, csak a rendszer most m´ar nem tudja feloldani, nem tal´alja a 61-es GID-et a /etc/group file-ban.
4.9 Felhaszn´al´ok l´etrehoz´asa A legt¨obb Linux rendszeren k´etf´ele parancs is rendelkez´esre a´ ll a felhaszn´al´ok l´etrehoz´as´ara: adduser e´ s useradd. A useradd az alacsonyabb szint˝u parancs ´ıgy igaz´ab´ol az adduser parancs haszn´alat´at szokt´ak javasolni.
4.9.1 useradd parancs A parancs legegyszer˝ubb form´aja: $ useradd kovacs aminek a hat´as´ara a parancs l´etrehozza az alap´ert´ekek alapj´an. Az alap´ert´ekek az /etc/default/useradd file-ban tal´alhat´ok. A file lehets´eges tartalma: GROUP=100 HOME=/home SKEL=/etc/skel SHELL=/bin/sh INACTIVE=-1 EXPIRE= A GROUP kulcssz´o a felhaszn´al´ok els˝odleges csoportj´at adja meg. Ugyanakkor t¨obb rendszer is azt a strat´egi´at haszn´alja, hogy minden felhaszn´al´ot egy a felhaszn´al´oi n´evvel megegyez˝o k¨ul¨on csoportba rak. (L´asd “user private group” a 4.4. bekezd´esben.) A useradd parancs alapesetben ´ıgy m˝uk¨odik, de ha ezt a viselked´est fel¨ul´ırjuk, akkor haszn´alja a parancs a GROUP e´ rt´ek´et. A HOME kulcssz´o adja meg, hogy melyik k¨onyvt´ar al´a ker¨uljenek a felhaszn´al´ok k¨onyvt´arai. A SKEL opci´o adja meg annak a k¨onyvt´arnak a hely´et ahol azok a file-ok e´ s k¨onyvt´arak (!) tal´alhat´ok amiket egy u´ j felhaszn´al´o k¨onyvt´ar´aba be kell m´asolni a felhaszn´al´oi fi¨uk l´eterhoz´asa sor´an. A SKEL kifejez´es a “skeleton” vagyis v´az angol sz´ob´ol sz´armazik, ami azt jel¨oli, hogy ez a k¨onyvt´ar adja meg a felhaszn´al´oi k¨onyvt´arak v´az´at, mint´aj´at. A SHELL opci´o hat´arozza meg, mi lesz a felhaszn´al´o shell-je. Az INACTIVE hat´arozza meg, hogy h´any nap m´ulva j´ar le a jelsz´o, e´ s ´ıgy mikor kell lecser´elni, illetve az EXPIRE adja meg, hogy mikor j´ar le a felhaszn´al´oi fi´ok. A parancsnak sz´amos kapcsol´oja ven, mellyel k¨ul¨onb¨oz˝o be´all´ıt´asokat tehet¨unk: -c szoveg : B´armilyen sz¨oveg ami a gecos mez˝obe ker¨ul az /etc/passwd file-ban. -u UID : Ha saj´at magunk szeretn´enk megadni a fehaszn´al´oi azonos´ıt´o sz´amot, akkor ezt az opci´ot kell haszn´alni. A sz´am nem lehet negat´ıv e´ s egyedinek kell lennie (kiv´eve ha a -o opci´ot is haszn´aljuk, ami nem aj´anlott!!).
25
-g GID : A felhaszn´al´o els˝odleges GID-je adhat´o meg explicit m´odon. Ez a GID fog az /etc/passwd file-ba ker¨ulni. A tov´abbi csoportokat a -G csop1,csop2,... opci´oval lehet megadni, amelyek csak az /etc/group file-ban jelennek meg. -m : A parancs alapesetben nem hozza l´etre a felhaszn´al´o k¨onyvt´ar´at. Ennek az opci´onak a megad´as´aval utas´ıthatjuk a parancsot, hogy hozza l´etre a k¨onyvt´arat. P´elda a parancs haszn´alat´ara: $ $ $ $
groupadd -g 3333 vezetok groupadd -g 3334 oktatok groupadd -g 3335 gazdasag useradd -u 2222 -g 3333 -G 3334,3335 -m nagy
El˝osz¨or a csoportokat hozzuk l´etre, majd az els˝o csoporthoz adjuk hozza a 2222 UID sz´am´u e´ s nagy nev˝u felhaszn´al´ot, illetve a k¨onyvt´ar´at is l´etrehozzuk. A parancs hat´as´ara a felhaszn´al´o k´et tov´abbi csoportba is beker¨ul. Ha egy m´asik felhaszn´al´o k¨onyvt´ar´at akarjuk mintak´ent haszn´alni egy u´ j felhaszn´al´o k¨onyvt´ar´ahoz a k¨ovetkez˝o parancsot lehet kiadni: $ useradd -m -k /home/minta
nagy
ahol a minta felhaszn´al´o k¨onyvt´ar´aban lev˝o file-okat e´ s k¨onyvt´arakat a´ tmasolja a nagy felhaszn´al´o k¨onyvt´ar´aba, ugyanakkor az a´ tm´asolt file-ok tulajdonosa m´ar a nagy felhaszn´al´o lesz. M´eg egy tr¨ukk¨ot e´ rdemes itt megeml´ıteni. Tegy¨uk fel, hogy egy felhaszn´al´onak meg akarjuk engedni, hogy FTP-vel (l´asd 7. fejezet) file-okat tudjon felm´asolni illetve tudjon let¨olteni, de ugyanakkor azt akarjuk, hogy soha ne tudjon bejelentkezni egy shell-be. Ebben az esetben a felhaszn´al´onak l´eteznie kell a rendszeren e´ s e´ rv´enyes jelszav´anak is kell lennie. Ahhoz hogy ne tudjon shell-be bejelentkezni egy speci´alis shell-t kell defini´alni a l´etrehoz´asa sor´an: $ useradd -s /bin/false ftp-user A /bin/false program nagyon speci´alis, mivel nem csin´alt semmit, de olyan k´oddal t´er vissza ami azt jelzi, hogy sikertelen volt a fut´asa e´ s ´ıgy a rendszer nem fog shell-t adni a felhaszn´al´onak. Az /etc/passwd file-ban a bejegyz´es valahogy ´ıgy n´ezne ki: ftp-user:x:1003:1003:Csak ftp:/home/ftp:/bin/false
Megjegyz´esek • FONTOS: A parancs alap esetben z´arolt felhaszn´al´okat hoz l´etre. A jelsz´o vagy explicit m´odon megadhat´o m´ar k´odolt form´aban a -p opci´oval, vagy a passwd user paranccsal. • A l´etrehozand´o felhaszn´al´o nem szereplhet NIS (l´asd 11. fejezet) illetve LDAP (l´asd 12. fejezet) adatb´azisban sem. • A felhaszn´al´o neve lehet˝os´eg szerint csak kis bet˝ub˝ol, sz´amokb´ol, al´ah´uz´as e´ s minusz karakterekb˝ol a´ lljon. A v´eg´en a´ llhat egy doll´ar jel. A felhaszn´al´oi neveket le´ır´o regul´aris kifejez´es a k¨ovetkez˝o lehetne: [a-z_][a-z0-9_-]*[$]
26
4.9.2 adduser parancs Ez a parancs, ha semmilyen param´etert nem adunk meg a felhaszn´al´or´ol, akkor a shell-ben k´erd´eseket tesz fel, amikre v´alaszolva adhatjuk meg a felhaszn´al´oi fi´ok tulajdons´agait, p´eld´aul: $ adduser proba5 Adding user ’proba5’ ... Adding new group ’proba5’ (1001) ... Adding new user ’proba5’ (1002) with group ’proba5’ ... Creating home directory ’/home/proba5’ ... Copying files from ’/etc/skel’ ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Enter the new value, or press ENTER for the default Full Name []: 1 Room Number []: 2 Work Phone []: 3 Home Phone []: 4 Other []: 5 Is the information correct [Y/n]: y $ Az /etc/passwd file-ban l´etrehozott bejegyz´es a k¨ovetkez˝o lesz: proba5:x:1002:1001:1,2,3,4,5:/home/proba5:/bin/bash amib˝ol az l´athat´o, hogy a megadott param´eterek ugyan´ugy a gecos mez˝obe ker¨ultek, csak vessz˝ovel elv´alasztva. N´ezz¨uk meg, hogy a finger parancs mit ´ırna ki ebben az esetben: $ finger proba5 Login: proba5 Directory: /home/proba5 Office: 2, 3 Never logged in. No mail. No plan.
Name: 1 Shell: /bin/bash Home Phone: 4
Ez a p´elda azt mutatja, hogy a gecos mez˝oben elt´arolt adatokat vessz˝ovel e´ rdemes elv´alasztani, ha azt akarjuk, hogy a megfelel˝o inform´aci´o a megfelel˝o helyen jelenjen meg.
4.9.3 Amikor nincs seg´ıts´eg Ebben a bekezd´esben azzal m´odszerrel ismerked¨unk meg, amikor semmilyen extra parancs nem a´ ll rendelkez´esre a rendszeren e´ s mindent k´ezzel kell v´egrehajtani. A felhaszn´al´o l´etrehoz´as´anak a k¨ovetkez˝ok a l´ep´esei: • Az /etc/passwd file-ban a felhaszn´al´oi n´ev, UID, els˝odleges csoport e´ s neh´any egy´eb inform´aci´o megad´asa. • A jelsz´o megad´asa az /etc/shadow file sz´am´ara. • A home k¨onyvt´ar l´etrehoz´asa. • A kezdeti file-ok a´ tm´asol´asa a home k¨onyvt´arba.
27
• A chown paranccsal a tulajdonjogok be´all´ıt´asa a home k¨onyvt´arra e´ s a benne lev˝o file-okra. • A felhaszn´al´o hozz´aad´asa tov´abbi alrendszerekhez, pl. quota. • Adjunk jogosults´agot egy´eb alrendszerekhez, pl. FTP. • Egy´eb g´ep specifikus inicializ´al´as • A felhaszn´al´oi fi´ok kipr´ob´al´asa. $ vi /etc/passwd ... user1:x:1005:1005:Teszt user:/home/user1:/bin/sh ... $ vi /etc/shadow ... user1:!:14518:0:99999:7::: ... $ passwd user1 Enter new Unix password: Retype new Unix password: $ vi /etc/group ... user1:x:1005: ... $ vi /etc/gshadow ... user1:!:: ... $ cd /home $ mkdir user1 $ cp -r /etc/skel/* /home/user1 $ chown -R user1:user1 /home/user1 $ chmod -R 755 /home/user1 Tov´abbi be´all´ıt´asok v´egezhet˝ok el az /etc/security/ k¨onyvt´arban tal´alhat´o file-okban, p´eld´aul korl´atozhat´ok
4.10 Felhaszn´al´ok t¨orl´ese Egy felhaszn´al´o t¨or¨olhet˝o a userdel vagy deluser parancsok egyik´evel. Itt is az egyik alacsonyabb szint˝u mint a m´asik v´altozat. A felhaszn´al´o t¨or¨olhet˝o p´eld´aul a k¨ovetkez˝o m´odon: $ deluser user1 Figyelem, alap esetben a parancsok nem t´avol´ıtj´ak el a home k¨onyvt´arat vagy p´eld´aul a csoportot. Ezt k¨ul¨on meg kell adni opci´okkal: $ deluser --remove-home user1
4.11 Felhaszn´al´ok m´odos´ıt´asa Egy felhaszn´al´oi fi´ok blokkolhat´o a passwd paranccsal:
28
$ passwd -l user1 A blokkol´as egy´ebk´ent nagyon egyszer˝u, mivel csak annyi t¨ort´enik, hogy az /etc/shadow file-ban a m´asodik mez˝obe beleker¨ul egy csillag (‘*’) vagy felki´allt´o jel (‘!’) karakter. A felhaszn´al´oi fi´ok u´ jraaktiv´al´as´ahoz elegend˝o a csillag vagy felki´allt´o jel karaktert t¨or¨olni az /etc/shadow file-ban a m´asodik mez˝ob˝ol vagy a passwd parancsot haszn´alni: $ passwd -u user1
4.12 Felhaszn´al´o e´ s csoport adminisztr´aci´o Az ebben a fejezetben bemutatott file-ok eset´en elengedhetetlen, hogy a jogosults´agok megfelel˝oen legyenek be´all´ıtva. Mindegyik file eset´en a root legyen a tulajdonos e´ s csak root tudja ´ırni a fileokat. P´eld´aul: -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-------rw-------
1 1 1 1 1 1
root root root root root root
root root root root shadow shadow
564 531 985 894 1185 1085
Oct Oct Oct Oct Oct Oct
2 2 2 2 2 2
12:01 12:01 12:01 12:01 12:01 12:01
/etc/group /etc/group/etc/passwd /etc/passwd/etc/shadow /etc/shadow-
A fenti list´aban azok a file-ok amelyek v´eg´en egy minusz jel (‘-’) van “backup” file-ok, amik az adott file utols´o el˝otti a´ llapot´at t´arolja. ´Igy ha valami hib´at v´etett¨unk, az el˝oz˝o a´ llapot mindig vissza´all´ıthat´o. Fontos: A “shadow” file-ok csak a root a´ ltal legyenek olvashat´ok e´ s ´ırhat´ok. Err˝ol mindig gy˝oz˝odj¨unk meg!
4.12.1 Szabv´anyos felhaszn´al´ok e´ s csoportok Minden Unix rendszeren vannak el˝ore defini´alt felhaszn´al´ok e´ s csoportok. Ezekb˝ol a root-ot biztosan haszn´aljuk, a t¨obbi val´osz´ın˝uleg pszeudo felhaszn´al´ok e´ s jelszavakon kereszt¨ul blokkolt felhaszn´al´oi fi´okok. Gyakran el˝ofordul´o el˝ore defini´alt felhaszn´al´ok: root : A szuperuser, a rendszeradminisztr´ator. UID azonos´ıt´oja 0. Itt a fontos, hogy az UID z´erus, a felhaszn´al´oi n´ev b´armi lehet. bin, daemon, adm, lp, sync, shutdown, sys : Ezek a rendszer felhaszn´al´oi fi´okok e´ s k¨ul¨onb¨oz˝o rendszer file-ok tulajdonosai lehetnek vagy rendszer processzusokat futtatnak. Az igazs´ag az, hogy a Unix rendszerek defini´alj´ak ezeket a felhaszn´al´okat, de nem igaz´an haszn´alj´ak. mail, news, ppp : Szint´en rendszer felhaszn´al´oi fi´okok, amelyek a rendszer valamelyik alrendszer´ehez k¨ot˝odnek, pl. levelez´es. mysql, xfs : Opcion´alis rendszer komponensekhez sz¨uks´eges felhaszn´al´oi fi´okok, pl. adatb´azis, X Window font szerver. nobody : AZ NFS alrendszer e´ s n´eh´any egy´eb alrendszer a´ ltal defini´alt felhaszn´al´oi fi´ok. UID e´ rt´eke a´ ltal´aban a -2, de bizonyos rendszereken m´as is lehet, pl. System V rendszeren: 60001 Csoportok list´aja hasonl´o a fenti list´ahoz. A root csoport GID-je 0. Hasonl´oan van bin, daemon, stb. az /etc/group file-ban. Ezeken k´ıv˝ul a 100-as GID a´ ltal´aban a users vagy staff csoporthoz tartozik.
29
4.12.2 Korl´atozott felhaszn´al´oi fi´okok A 4.9.1. bekezd´esben a /etc/false “shell” haszn´alat´aval m´ar l´attunk egy m´odszert, amivel a felhaszn´al´ot korl´atozni lehet abban hogy mit csin´alhat a rendszeren. Ugyanakkor el˝ofordulhat az is, hogy t¨obbet akarunk engedni, de az´ert mindent m´egsem, vagyis korl´atozott “shell”-t (restricted shell) akarunk biztos´ıtani. P´eld´aul egy adminisztr´atornak csak egy feladatot ell´atnia e´ s ´ıgy csak egy programot kell/szabad futtatnia. A korl´atozott shell-en k´ıv¨ul ´ıgy m´eg a .profile file is sz¨uks´eges mivel ezen kereszt¨ul ind´ıtjuk majd a sz¨uks´eges alkalmaz´ast. A korl´atozott shell nem engedi a k¨ovetkez˝o m˝uveleteket: • Nem haszn´alhat´o a cd parancs. • Nem lehet megv´altoztatni a PATH, ENV e´ s SHELL rendszer v´altoz´okat. • Nem lehet haszn´alni a “slash” (’/’) karakter parancsokban e´ s file nevekben, vagyis minden filenak az aktu´alis k¨onyvt´arban kell lennie.´a • Nem lehet a´ tir´any´ıt´ast haszn´alni (> e´ s >>). Fontos, hogy a korl´atozott shell eset´en a felhaszn´al´o ne a saj´at home k¨onyvt´ar´aba ker¨ulj¨on a bel´ep´es ut´an. Ez u´ gy e´ rhet˝o el, hogy a .profile file a bel´ep´es ut´an azonnal a´ thelyezi a felhaszn´al´ot egy m´asik k¨onyvt´arba. Ha m´egis a home k¨onyvt´arba ker¨ulne a felhaszn´al´o a bel´ep´es ut´an, akkor a felhaszn´al´o fel¨ul ´ırhatja a .profile file-t, ami l´enyeg´eben kontroll´alja a tev´ekenys´eg´et. A .profile file fel¨ul´ır´as´aval m´asik programot is eltudna ind´ıtani a felhaszn´al´o. A m´asik korl´atoz´as, hogy a PATH legyen minim´alis, illetve a felhaszn´al´o ne tudjon ´ırni a PATH-ban megadott egyik k¨onyvt´arba sem. Ezt az´ert kell elker¨ulni, mivel egy “okos” felhaszn´al´o ´ıgy fel¨ul´ırhat egy futtathat´o file-t a saj´atj´aval e´ s kit¨orhet a korl´atoz´asb´ol! Ezekre a probl´em´akra a´ ltal´aban azt a megold´ast szokt´ak v´alasztani, hogy a felhaszn´al´o home k¨onyvt´ar´aban egy rbin k¨onyvt´arat hoznak l´etre amibe bem´asolj´ak az enged´elyezett parancsokat e´ s a PATH csak erre k¨onyvt´arra mutat. Minden esetben legy¨unk nagyon o´ vatosak, hogy milyen parancsokat enged¨unk futtatni egy korl´atozott k¨ornyezetben. Bizonyos parancsok megengedik azt, hogy b´armilyen shell parancsot futassunk le (shell escape). P´eld´aul a vi programban: :!parancs m´odszer haszn´alhat´o. Ugyan´ıgy az “´artatlannak” t˝un˝o more e´ s man programok is megengedik tetsz˝oleges shell parancs v´egrehajt´as´at.
4.13 Inicializ´al´o file-ok A felhaszn´al´oi fi´okok l´etrehoz´asa sor´an a felhaszn´al´o home k¨onyvt´ar´aba a´ tm´asol´odnak a file-ok e´ s ´ aban a file-ok k¨oz¨ott vannak a shell inicializ´al´o file-jai k¨onyvt´arak az /etc/skel k¨onyvt´arb´ol. Altal´ is. Bourne shell : .profile C shell : .login, .logout, .cshrc Bourne again shell (bash) : .profile, .bash_profile, .bash_login, .bash_logout e´ s .bashrc A file-ok az´ert kezd˝odnek a pont karakterrel, mivel ezeket a file-okat az ls parancs speci´alis kezeli e´ s csak bizonyos (-a) kapcsol´o megad´as´aval nyomtatja ki. A file-ok shell scriptek. Minden bel´ep´es sor´an
30
lefutnak a k¨ovetkez˝o file-ok: .profile, .login, .bash_profile, .bash_login. Minden u´ j shell elind´ıt´asa sor´an a .cshrc e´ s .bashrc file-ok futnak le, illetve kil´ep´eskor a .logout e´ s .bash_logout scriptek. Egy p´elda .profile file a k¨ovetkez˝o lehetne: umask 022 mesg y PATH=$PATH:/usr/local/bin:$HOME/bin:. EDITOR=vi MORE=-c PS1="‘hostname‘-\!> " export PATH EDITOR MORE PS1 A k¨ul¨onb¨oz˝o grafikus desktop alkalmaz´asok is haszn´alnak inicializ´al´o file-okat, melyek szint´en a felhaszn´al´ok home k¨onyvt´ar´aba ker¨ulnek. Az X Window rendszer inicializ´al´o szok´asos file-ja: .xinitrc, .xsession e´ s .Xauthority. A Common Desktop Environment (CDE) inicializ´al´o file-ja a .dtprofile illetve a tov´abbi file-okat tartalmaz´o k¨onyvt´ar a ˜/.dt .
4.13.1 Rendszerszintu˝ inicializ´al´o file-ok Az sh e´ s bash shell-ek eset´en az /etc/profile file mint egy rendszerszint˝u inicializ´al´o filek´ent szolg´al, vagyis a felhaszn´al´o saj´at inicializ´al´o file-ja el˝ott lefut. Ebben a file-ban szinte mindig defini´alva van a PATH k¨ornyezeti v´altoz´o. Ha ezt a file-t szeretn´enk m´odos´ıtani a legjobb m´odszer az, hogy egy m´asik file-t hozunk l´etre, p´eld´aul: /etc/profile.local, e´ s ezt a file-t futtatjuk le a /etc/profile-ban. Ezt az´ert e´ rdemes ilyen m´odon megoldani, mert egy k´es˝obbi friss´ıt´es az /etc/profile file-t fel¨ul´ırhatja, ´ıgy csak a hivatkoz´ast vesz´ıtj¨uk el, ami k¨onnyen helyre´all´ıthat´o, de maguk a be´all´ıt´asok megvannak a /etc/profile.local file-ban.
4.14 login.defs file Az /etc/login.defs file tartalmaz olyan be´all´ıt´asokat amelyek a´ ltal´aban a login folyamatra, a felhaszn´al´o bel´ep´es´ere vonatkoznak. A file-ban tal´an a k¨ovetkez˝ok a legfontosabb be´all´ıt´asok: • FAIL_DELAY 10 : v´arjon 10 szekundumot a bejelentkez´es pr´ob´alkoz´asok k¨oz¨ott. • LOGIN_RETRIES 5 : a bejelentkez´esi pr´ob´alkoz´asok maxim´alis sz´ama • LOGIN_TIMEOUT 30 : h´any m´asodpercig v´arjon a rendszer a jelsz´ora • FAILLOG_ENAB yes : r¨ogz´ıtse a bejelentkez´esi pr´ob´alkoz´asokat a /var/log/faillog file-ba • LASTLOG_ENAB yes : r¨ogz´ıtsen minden bejelentkez´est a /var/log/lastlog file-ban • DEFAULT_HOME yes : engedje a bejelentkez´est akkor is, ha a felhaszn´al´o home k¨onyvt´ara nem el´erhet˝o • UID_MIN 100, UID_MAX 20000 : az UID minim´alis e´ s maxim´alis e´ rt´eke • GID_MIN 100, GID_MAX 2000 : a GID minim´alis e´ s maxim´alis e´ rt´eke
31
4.15 Jelszavak Mivel a jelszavak kulcs fontoss´ag´uak az oper´aci´os rendszer biztons´aga szempontj´ab´ol, ez´ert nagyon fontos, hogy minden felhaszn´al´onak legyen jelszava. Ugyanakkor ez nem elegend˝o, mert arra is sz¨uks´eg van, hogy a jelsz´ot ne lehessen kital´alni. Ez´ert ebben a fejezetben a jelszavakkal foglalkozunk egy kicsit r´eszletesebben. A j´o jelsz´ora k¨onny˝u eml´ekezni, de neh´ez kital´alni illetve felt¨orni. Sajnos az automatikan, v´eletlenszer˝uen gener´alt jelszavak ellentmondanak a fenti elvnek, hogy k¨onny˝u legyen r´ajuk eml´ekezni. A legt¨obb felhaszn´al´o az ilyen jelszavakat k¨onnyen elfelejti, ´ıgy a´ ltal´aban le szokt´ak ´ırni, ami kifejezetten ellentmond a jelsz´o titkoss´ag´anak. Az egyik m´odszer ennek a probl´em´anak az elker¨ul´es´ere, hogy engedj¨uk, hogy a felhaszn´al´o adja meg a jelszav´at. Ugyanakkor a felhaszn´al´ot fel kell k´esz´ıteni arra is, hogy milyen is egy “j´o” jelsz´o. P´eld´aul amit ker¨ulni kellene, mivel k¨onny˝u kital´alni: • A kereszt vagy vezet´ekn´ev haszn´alata, vagy csal´adtag nev´enek haszn´alata. Az e´ desanya le´anykori nev´et el´eg k¨onny˝u megszerezni, ´ıgy az sem j´o. • A felhaszn´al´o jellegzetes sz´amai sem j´ok: szem´elyi sz´am, TB sz´am vagy ad´oazonos´ıt´o, sz¨ulet´esi d´atum, telefonsz´am, kocsi rendsz´amt´abl´aja. • A felhaszn´al´onak fontos dolgok: kedvenc e´ tel, kedvenc e´ nekes, TV sz´ın´esz, sportol´o, stb. A jelsz´onek a sz´am´ıt´og´epes felt¨or´esi k´ıs´erleteknek is ellen kell tudni a´ llni, ´ıgy szint´en nem javasoltak a k¨ovetkez˝ok: • angol vagy egy´eb nyelvben el˝ofordul´o szavak helyesen ´ırva, mivel ezek a k¨ul¨onb¨oz˝o on-line sz´ot´arakban megtal´alhat´ok, • r¨ovid´ıtett szavak, • h´ıres emberek, helyek, • az Interneten publik´alt p´elda jelszavak. A fenti szavak akkor sem j´ok, ha ford´ıtva ´ırjuk le o˝ ket, egy bet˝ut vagy sz´amot hozz´af˝uz˝unk, esetleg a bet˝uk valami egyszer˝u permut´aci´oj´at haszn´aljuk. P´eld´aul nem j´o: john, john2, nhoj. Ez az´ert van ´ıgy, mivel a jelsz´o kital´al´o, felt¨or˝o programok ezeket a kombin´aci´okat nagyon k¨onnyen kital´alj´ak. A m´asodik list´aban felsorolt szavak b´ar o¨ nmagukban nem j´ok, de a k¨ovetkez˝o vari´aci´okkal biztons´agosabb jelsz´ot kaphatunk: • A sz´o k¨ozep´ebe egy vagy k´et speci´alis karakter beilleszt´ese. K¨ul¨on¨osen j´o, ha ez a karakter valamilyen speci´alis jel: kett˝ospont, felki´alt´o jel, stb. • A sz´o helytelen ´ır´asm´oddal. • Szokatlan nagy e´ s kis bet˝u kombin´aci´o: staRTReK. Az nem j´o, minden csupa kis vagy nagy bet˝u, vagy minden mag´anhangz´o azonos, p´eld´aul rossz: sTARtREK, STARTREK, STaRTReK. • Kett˝o vagy t¨obb sz´o o¨ sszef˝uzve. • Egy sz´o be´agyaz´asa egy m´asik sz´oba, p´eld´aul: macskutyaa. • K´et vagy t¨obb sz´o egym´asba f˝uz´ese Egy m´asik m´odszer, hogy egy mondatban el˝ofordul´o szavak els˝o bet˝uinek o¨ sszef˝uz´ese is egy j´o jelsz´ot adhat, p´eld´aul: eny oltem´ en, meglepetes e k¨ eves lettem ´ et ´ Harminc k´
32
amib˝ol a jelsz´o: hkele,mek Minden esetre a l´enyeg, hogy a jelsz´ot neh´ez lehessen kital´alni.
4.15.1 Jelszavak e´ s felhaszn´al´oi fi´okok N´eh´any tov´abbi tan´acs a jelszavakkal kapcsolatban: • Minden felhaszn´al´oi fi´oknak legyen jelszava. • Amikor egy felhaszn´al´o nem haszn´alja t¨obbet a g´epet, el˝ok´ent mindig z´arjuk le (lock) a felhaszn´al´oi fi´okot. ´ aban ez • A rendszeren hat´arozzuk meg, hogy minimum h´any karakterb˝ol a´ lljon a jelsz´o. Altal´ minimum 8 szokott lenni. • A jelsz´ot mindig meg kell v´altoztatni, ha: – A felhaszn´al´on k´ıv˝ul valaki m´as is ismeri a jelsz´ot. – A felhaszn´al´o elmegy a c´egt˝ol, minden a´ ltala ismert jelsz´ot meg kell v´altoztatni. – Amikor a rendszer adminisztr´ator elmegy a c´egt˝ol, a root jelszav´at e´ s minden rendszer jelsz´ot meg kell v´altoztatni. Ha akarjuk a felhaszn´al´okat is k´enyszer´ıthetj¨uk jelsz´o v´alt´asra, mivel a root ismeri az o¨ sszes k´odolt jelsz´ot. – Amikor a rendszer adminisztr´atort kirugj´ak, minden jelsz´ot meg kell v´altoztatni, mivel a root ismeri az o¨ sszes k´odolt jelsz´ot! – Amikor azt sejtj¨uk, hogy a shadow-t valaki m´as is el tudta olvasni. • A root jelszav´at id˝or˝ol id˝ore e´ rdemes megv´altoztatni. Term´eszetesen nem kell minden rendszer adminisztr´atornak naponta v´altoztatni a jelszav´at, de az´ert ha gyanakszunk valamire e´ rdemes megv´altoztatni. • A felhaszn´al´ok eset´en e´ rdemes valamilyen strat´egi´at megfogalmazni. P´eld´aul, h´ıvjuk fel a felhaszn´al´o figyelm´et, hogy ezen a rendszeren ne ugyanazt a jelsz´ot haszn´alja, mint m´as g´epeken. Jelsz´ov´alt´as kezdem´enyez´ese A Linux rendszereken a chage parancs haszn´alhat´o a jelsz´ov´alt´as kezdem´enyez´es´ere. Ugyanakkor ez a parancs a jelszavak “¨oreged´es´evel” kapcsolatos, amit pedig a shadow file-ban adhatunk meg. A parancs egyik lehets´eges form´aja: $ chage -d 0 -M 999 user ahol a -d opci´oval azt adjuk meg, hogy az utols´o jelsz´ov´alt´as 1970 janu´ar 1-´en volt (0 nap telt el) e´ s a -M opci´o pedig meghat´arozza, hogy a jelsz´o maxim´alis e´ lettartama 999 nap. Figyelem ez az ut´obbi kapcsol´o fel¨ul´ırja a jelsz´o o¨ reged´esi param´etereket!
4.15.2 Jelsz´o o¨ reged´es, elavul´as Miel˝ott bekapcsoln´ank a peri´odikus jelsz´ov´alt´ast, vagy a jelszavak o¨ reged´es´et elavul´as´at, fontoljuk meg, hogy mennyire akarunk szigor´uak lenni. A felhaszn´al´okat s˝ur˝un arra k´enyszer´ıteni, hogy v´altsanak jelsz´ot el´egg´e felbosszanthatja o˝ ket. A jelsz´o elavul´as param´etereit a shadow file-ban lehet megadni, mint kor´abban l´attuk:
33
alt ar:nem-haszn´ alt:minlife:maxlife:warn:inactive:lej´ o-v´ o:utols´ username:jelsz´
A 3. mez˝o adja meg a jelsz´o utols´o megv´altoztat´asa o´ ta eltelt napok sz´am´at (1970. janu´ar 1j´et˝ol kezd˝od˝oen). Ha null´ara a´ ll´ıtjuk e´ s a maxlife kisebb mint a 1970. janu´ar 1 o´ ta eltelt napok sz´ama, akkor a k¨ovetkez˝o bejelentkez´esn´el a felhaszn´al´onak meg kell v´altoztatnia a jelszav´at. Ezut´an k¨ovetkezik (minlife) azon napok sz´ama, amiut´an legkor´abban a felhaszn´al´o megv´altoztathatja a jelszav´at, amit azon napok sz´ama (maxlife) k¨ovet, amin bel¨ul mindenk´eppen meg kell v´altoztatni a jelsz´ot. Ezt k¨ovetik a figyelmeztet´esre vonatkoz´o be´all´ıt´asok. A 6. mez˝oben (warn) a´ ll´ıthatjuk be, hogy a k¨otelez˝o jelsz´ov´alt´as el˝ott h´any nappal kapjon figyelmeztet˝o u¨ zenetet a felhaszn´al´o. A 7. mez˝o t¨urelmi id˝ot hat´aroz meg, vagyis a k¨otelez˝o jelz´ov´alt´as ut´an m´eg h´any napig engedj¨uk a felhaszn´al´onak a rendszert haszn´alni. Ha a felhaszn´al´o ez id˝o alatt sem v´egzi el a jelsz´ov´alt´ast, akkor let´ıltja a rendszer a hozz´af´er´est. A 8. mez˝o mutatja a felhaszn´al´o let´ılt´as´anak idej´et (1970. janu´ar 1-j´et˝ol kezd˝od˝oen). A -1 -es e´ rt´ek egy mez˝oben azt jelenti, hogy “soha”. Az egyes param´eterek be´all´ıt´as´ara alkalmas parancsok: Minimum e´ lettartam : chage -m napok user Maximum e´ lettartam : chage -M napok user Figyelmeztet´esi id˝o : chage -w napok user Inactive peri´odus : chage -I napok user Expire peri´odus : chage -E napok user Utols´o jelsz´ov´alt´as ideje : chage -d napok user Jelsz´o elavul´asi param´eterek ki´ır´asa : chage -l user N´ezz¨uk meg mit ´ır ki a rendszer a jelsz´o elavul´asr´ol: $ chage -l root Last password change: Password expires: Password inactive: Account expires: Minimum number of days between password change: Maximum number of days between password change: Number of days of warning before password expires:
Sep 26, 2009 never never never 0 99999 7
4.16 Jelszavak kital´al´asa John the Ripper e´ s Crack programok haszn´alhat´ok arra, hogy automatikusan pr´ob´aljuk megkeresni egy k´odolt jelsz´onak megfelel˝o k´odolatlan jelsz´ot. A programok pr´ob´algat´ast haszn´al. A programok a szavakat szab´alyok alapj´an gener´alj´ak vagy sz´ot´arakb´ol veszik.
34
5. Fejezet
PAM rendszer Hagyom´anyosan a Unix rendszereken az autentik´aci´o vagy felhaszn´al´o azonos´ıt´as csak egyszer t¨ort´ent meg, a bejelentkez´es, a login, sor´an. Ugyanakkor t¨obb olyan alkalmaz´as is van, amelyik ism´etelt felhaszn´al´o azonos´ıt´ast ig´enyel, p´eld´aul a jelsz´o megv´altoztat´asa. A kor´abbi Unix verzi´ok ilyenkor az /etc/passwd file-t olvast´ak. Ez probl´em´at jelentett, amikor valami v´altoz´as volt a file form´atum´aban, vagy u´ jabb autentik´aci´os elj´ar´ast akartak integr´alni a rendszerbe. P´eld´aul shadow file bevezet´ese, integr´aci´o NIS rendszerekkel, MD5 titkos´ıt´as, e´ s LDAP autentik´aci´o. Minden ilyen v´altoz´as eset´en speci´alis m´odos´ıt´ast ig´enyelt, e´ s minden kapcsol´od´o programot u´ jra kellett ford´ıtani. Erre a probl´ema jelentett megold´ast a PAM rendszer bevezet´ese. A PAM jelent´ese: Pluggable Authentication Module. A PAM rendszer ma m´ar szinte minden Unix alatt megtal´alhat´o: FreeBSD, HP-UX, Solaris e´ s Linux. A PAM rendszer c´elja egy flexibilis e´ s konfigur´alhat´o mechanizmus biztos´ıt´asa a felhaszn´al´ok azonos´ıt´as´ara, f¨uggetlen¨ul a k¨ul¨onb¨oz˝o programokt´ol. ´Igy a programokat b´armilyen autentik´aci´ot´ol, elj´ar´ast´ol f¨uggetlen¨ul lehet fejleszteni, vagyis a programokban nem kell el˝ore meghat´aroznunk, hogy milyen felhaszn´al´oi autentik´aci´ot akarunk majd haszn´alni. A rendszer u´ gy m˝uk¨odik, hogy a fut´as sor´an dinamikusan t¨olt˝odnek be a sz¨uks´eges modulok. Ha szeretn´enk megn´ezni, hogy egy program haszn´alja-e a PAM rendszert, akkor azt kell megvizsg´alnunk, hogy a program haszn´alja-e a PAM rendszer fejleszt˝oi k¨onyvt´ar´at: $ ldd ‘which passwd‘ | grep pam libpam.so.0 => /lib/libpam.so.0 (0xb7f28000) ahol az ldd parancs kinyomtatja a megosztott (shared) k¨onyvt´arakat amiket egy program haszn´al. A felhaszn´al´oi azonos´ıt´ason k´ıv˝ul a PAM rendszer k´epes m´as feladatok elv´egz´es´ere, p´eld´aul loggol´asra vagy a napi u¨ zenet megjelen´ıt´es´ere. Ezeken fel¨ul a PAM rendszer a bel´eptet´es sor´an nem csak a jelsz´ot, hanem m´as felt´eteleket is k´epes ellen˝orizni, p´eld´aul az er˝oforr´as rendelkez´esre a´ ll-e, nincsennek-e t´ul sokan bejelentkezve.
5.1 Konfigur´aci´o A PAM rendszert sz¨oveges konfigur´aci´os file-okon kereszt¨ul lehet be´all´ıtani. A file l´enyeg´eben azon modulok list´aj´at tartalmazza, amikre sz¨uks´eg van az autentik´aci´o sor´an. Ezt szokt´ak stack-nek nevezni. Amikor egy programnak egy felhaszn´al´ot azonos´ıtania kell, akkor a konfigur´aci´os file-ban megadott sorrendben megh´ıvja a modulokat. Minden modul visszat´er egy e´ rt´ekkel: enged´elyezett (success) vagy tiltott (failure) st´atuszt jelezve. Ezeket kombin´alja o¨ ssze a rendszer egy eredm´enny´e. Ezt a kom´ aban ha egy modul tiltja a hozz´af´er´est, akkor a PAM bin´aci´ot befoly´asolja a kontroll param´eter. Altal´ rendszer e´ rtes´ıti az alkalmaz´ast, hogy a hozz´af´er´es megtagadva (access denied) az alkalmaz´as sz´am´ara. Term´eszetesen ez a m˝uk¨od´es fel¨ul´ırhat´o, hiszen p´eld´aul ha az els˝ok´ent v´egrehajtott LDAP azonos´ıt´as nem siker¨ul, akkor m´eg megpr´ob´alhatjuk a helyi file-okb´ol azonos´ıtani a felhaszn´al´ot.
35
A konfigur´aci´os file-ok a´ ltal´aban az /etc/pam.d k¨onyvt´arban tal´alhat´ok. Ebben a k¨onyvt´arban a k¨ul¨onb¨oz˝o alkalmaz´asokhoz tartoz´oan k¨ul¨onb¨oz˝o file tal´alhat´o. P´eld´aul az su alkalmaz´as eset´en az /etc/pam.d/su file tartalmazza a be´all´ıt´asokat. Ha az alkalmaz´ashoz nincs file ebben a k¨onyvt´arban, akkor az other file tartalma vonatkozik r´a. Biztons´agi szempontb´ol fontos, hogy l´etezzen ez a file e´ s p´eld´aul az alap strat´egia az legyen, hogy megtagadja a hozz´af´er´est. Ezeknek a konfigur´aci´os fileoknak a seg´ıts´eg´evel tudjuk az alkalmaz´asok hozz´af´er´esi policy-j´at megadni, de ugyanakkor nem szabad elfelejteni, hogy egy´eb mechanizmusok is befoly´asolj´ak a hozz´af´er´est: file jogosults´agok, TCP wrapper, ACL-ek, e´ s ´ıgy tov´abb. A PAM modulok a /lib/security k¨onyvt´arban tal´alhat´ok meg. Minden modul egy dinamikusan bet¨olthet˝o k¨onyvt´ar, DLL, amelyek a PAM rendszer f¨uggv´enyeit h´ıvj´ak meg. A PAM rendszer f¨uggv´enyei e´ s szolg´altat´asai n´egy t´ıpusba, kontextusba sorolhat´ok: • account : Ezeket a modulokat akkor haszn´alja a rendszer amikor azt kell ellen˝orizni, hogy jogosult-e az adott szolg´altat´ast el´erni a felhaszn´al´o. • auth : Ezeket a modulokat akkor haszn´alja a rendszer amikor azt kell ellen˝orizni, hogy a felhaszn´al´o t´enyleg az akinek mondja mag´at. • password : Ezeket a modulokat akkor haszn´alja a rendszer amikor az autentik´aci´os mechanizmust friss´ıteni kell, p´eld´aul u´ j jelsz´ot akarunk megadni. • session : Ezeket a modulokat akkor haszn´alja a rendszer miel˝ott az adott szolg´altat´ast elind´ıtan´a, vagy le´all´ıtan´a. P´eld´aul loggol´as, felhaszn´al´oi k¨onyvt´ar becsatol´asa. Egy konfigur´aci´os file sorokb´ol a´ ll e´ s minden sor n´egy r´eszb˝ol a´ llhat: t´ ıpus
kontroll_param´ eter
modul
modul_param´ eterek
¨ Ures sorok e´ s megjegyz´esek megengedettek. A megjegyz´es sorok a ’#’ karakterrel kezd˝odnek. Az els˝o bejegyz´es a sorokban a t´ıpust adja meg, a m´asodik pedig a kontroll param´eter.
5.1.1 Kontroll param´eterek A kontroll param´eter lehets´eges e´ rt´ekei: sufficient : Ha az adott modul enged´elyezi a hozz´af´er´est, akkor minden tov´abbi modul a´ tugorhat´o e´ s o¨ sszes´eg´eben is enged´elyezz¨uk a hozz´af´er´est. Ezzel szemben, ha a modul nem enged´elyezi a hozz´af´er´est, az nem jelenti azt, hogy v´eglegesen tiltott a hozz´af´er´es mivel ha egy k´es˝obbi sufficient vagy required modul enged´elyezi akkor o¨ sszes´eg´eben is enged´elyezve lesz a hozz´af´er´es. requisite : Ha az adott modul tiltja a hozz´af´er´est, akkor minden tov´abbi modul a´ tugorhat´o e´ s o¨ sszes´eg´eben is tiltjuk a hozz´af´er´est. required : Az adott modulnak enged´elyeznie kell a hozz´af´er´est, hogy o¨ sszes´eg´eben is enged´elyezve legyen, de nem elegend˝o ez az egy enged´elyez´es. Vagy egy k´es˝obbi sufficient modulnak enged´elyeznie kell a hozz´af´er´est vagy minden k´es˝obbi required modulnak. Ha b´armlyik required modul tilt´assal t´er vissza att´ol m´eg a t¨obbi required modul is lefut, ´ıgy a rosszindulat´u emberek nem fogj´ak tudni, hogy mely azonos´ıt´asi l´ep´es nem siker¨ult. optional : Ennek a modulnak a visszat´er´esi e´ rt´ek´et csak akkor haszn´alja a rendszer, ha a t¨obbi modul alapj´an nem meghat´arozhat´o az enged´elyez´es vagy tilt´as. A modulok sorrendje is fontos! Ha egy required modul sikertelen e´ s egy k´es˝obbi sufficient modul sikeres, att´ol m´eg a hozz´af´er´es sikertelen lesz! P´eld´aul:
36
auth auth auth
required sufficient required
pam_moduleA pam_moduleB pam_moduleC
ez egy olyan strat´egi´at val´os´ıt meg, hogy csak akkor enged´elyezett a hozz´af´er´es, ha: • pam_moduleA e´ s pam_moduleB is enged´elyezi a hozz´af´er´est vagy • pam_moduleA e´ s pam_moduleC is enged´elyezi a hozz´af´er´est. Mi t¨ort´enik ha felcser´elj¨uk az els˝o k´et sort? auth auth auth
sufficient required required
pam_moduleB pam_moduleA pam_moduleC
Ebben az esetben a hozz´af´er´es akkor sikeres ha: • pam_moduleB enged´elyezi a hozz´af´er´est vagy • pam_moduleA e´ s pam_moduleC is enged´elyezi a hozz´af´er´est.
5.1.2 Modul visszat´er´esi e´ rt´ek Val´oj´aban a PAM rendszeren bel¨uli modulok nem csak az enged´elyezett e´ s tiltott e´ rt´ekekkel tudnak visszat´erni, mivel param´etereken kereszt¨ul megadhat´o m´as e´ rt´ek is. A r´egebbi PAM rendszerek csak k´et e´ rt´eket haszn´altak, az u´ jabb rendszer m´ar t¨obb mint 30 f´ele visszat´er´esi e´ rt´eket is tud kezelni. Az u´ j szintakszis: t´ ıpus
[´ ert´ ek=akci´ o ´ ert´ ek=akci´ o ...] modul opci´ ok
ahol az ´ ert´ ek a k¨ovetkez˝o lehet: • ABORT : kritikus hiba, azonnal v´eget e´ r • ACCT_EXPIRED : felhaszn´al´oi fi´ok lej´art • AUTHINFO_UNAVAIL : autentik´aci´os inform´aci´o nem lek´erhet˝o az autentik´aci´os szolg´altat´ast´ol • AUTHTOK_DISABLE_AGING : autentik´aci´os token elavul´asi m´odszer kikapcsolva • AUTHTOK_ERR : autentik´aci´os token m´odos´ıt´asi hiba • AUTHTOK_EXPIRED : autentik´aci´os token lej´ar • AUTHTOK_LOCK_BUSY : autentik´aci´os token z´arol´as nem lehets´eges • AUTHTOK_RECOVERY_ERR : autentik´aci´os inform´aci´ot nem lehetett megszerezni • AUTH_ERR : autentik´aci´os hiba • BUF_ERR : mem´oria buffer hiba • CONV_ERR : kommunik´aci´os hiba • CRED_ERR : • CRED_EXPIRED : • CRED_INSUFFICIENT :
37
• CRED_UNAVAIL : • IGNORE : ennek a modulnak a visszat´er´esi e´ rt´ek´et ne vegye figyelembe a PAM rendszer • INCOMPLETE : • MAXTRIES : az adott szolg´altat´as fel´e t¨ort´en˝o pr´ob´alkoz´asok maxim´alis sz´am´at meghaladtuk • MODULE_UNKNOWN : ismeretlen modul • NEW_AUTHTOK_REQD : autentik´aci´os token t¨obb´e m´ar nem e´ rv´enyes, egy u´ jra van sz¨uks´eg • NO_MODULE_DATA : semmilyen modul specifikus adat nem a´ ll rendelkez´esre • OPEN_ERR : nem siker¨ult bet¨olteni a modult • PERM_DENIED : jogosults´ag megtagadva • SERVICE_ERR : hiba a szolg´altat´as modulban • SESSION_ERR : nem lehet k´esz´ıteni vagy elt´avol´ıtani a session-re vonatkoz´o bejegyz´est • SUCCESS : sikeres visszat´er´es • SYMBOL_ERR : szimb´olum nem tal´alhat´o • SYSTEM_ERR : rendszer hiba • USER_UNKNOWN : a felhaszn´al´o nem ismert az autentik´aci´os modul sz´am´ara • default : minden visszat´er´esi e´ rt´ek ami nincs explicit m´odon felsorolva o n´eh´any lehets´eges e´ rt´eke: Az akci´ • ok : Ha az eddig v´egrehajtott modulok visszat´er´esi e´ rt´ekeinek kombin´alt e´ rt´eke enged´elyez´est jelent akkor az aktu´alis modul visszat´er´esi e´ rt´eke fel¨ul´ırja ezt az e´ rt´eket. (Ez l´enyeg´eben a “required” kontroll param´eternek felel meg, amikor a modul enged´elyez´essel t´er vissza.) Ha az eddigi kombin´alt e´ rt´ek tilt´as, akkor ezt az e´ rt´eket nem haszn´alja a rendszer. • done : Az ok akci´onak felel meg, de azonnal befejezi a stack v´egrehajt´as´at e´ s visszat´er a h´ıv´o alkalmaz´ashoz. (Ez l´enyeg´eben a “sufficient” kontroll param´eternek felel meg.) • bad : Azt jelzi, hogy a stack visszat´er´esi e´ rt´eke a tilt´as legyen. (Ez l´enyeg´eben a “required” kontroll param´eternek felel meg, amikor a modul tilt´assal t´er vissza.) • die : Tilt´ast jelent e´ s azonnal befejezi a stack v´egrehajt´as´at. (Ez l´enyeg´eben a “requisite” kontroll param´eternek felel meg.) • ignore : A modul visszat´er´esi e´ rt´eke nem sz´am´ıt bele az alkalmaz´asnak adott visszat´er´esi e´ rt´ekbe. • reset : T¨or¨olje a stack eddigi v´egrehajt´as´ab´ol sz´armaz´o e´ rt´ekeket. • n : Ugorja a´ t a k¨ovetkez˝o n modult. A hagyom´anyos kontroll param´eter e´ rt´ekeket, az u´ j form´aban, a k¨ovetkez˝ok´eppen lehet megadni: • required : [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
38
• requisite : [success=ok new_authtok_reqd=ok ignore=ignore default=die]
• sufficient : [success=done new_authtok_reqd=done default=ignore]
• optional : [success=ok new_authtok_reqd=ok default=ignore]
5.1.3 P´eld´ak 1. N´ezz¨unk meg egy k´epzeletbeli p´elda file-t: auth auth auth
sufficient sufficient required
pam_rootok.so pam_timestamp.so pam_unix.so shadow nullok
account
required
pam_permit.so
session
required
pam_permit.so
amit a k¨ovetkez˝ok´eppen lehet e´ rtelmezni: auth
sufficient
pam_rootok.so
ez azt jelenti, hogy ha a felhaszn´al´o root, az m´ar o¨ nmag´aban is elegend˝o (sufficient) az autentik´aci´ohoz. Ha a felhaszn´al´o nem root, akkor a k¨ovetkez˝o sort is meg kell vizsg´alni: auth
sufficient
pam_timestamp.so
Ez a modul azt biztos´ıtja, hogy az autentik´al´asokat egy cache-ben t´arolja a rendszer e´ s ezeket u´ jra tudja hasznos´ıtani. Alap esetben az 5 percen bel¨uli azonos´ıt´ast a rendszer elegend˝oen (sufficient) elfogadja. A harmadik sor auth
required
pam_unix.so shadow nullok
azt jelenti, hogy jelsz´ot k´er¨unk a felhaszn´al´ot´ol. Ha j´o jelsz´ot adott meg a felhaszn´al´o, akkor enged´elyezi a hozz´af´er´est, egy´ebk´ent tiltja. A shadow param´eter azt jelenti, hogy a rendszer haszn´alja a shadow file-t, m´ıg a nullok param´eter azt enged´elyzi, hogy az u¨ res jelsz´o is elfogadott. Ha ezt a param´etert t¨or¨olj¨uk, akkor l´enyeg´eben letiltjuk azokat a felhaszn´al´oi fi´okokat, amelyekhez nincs jelsz´o rendelve. A pam_permit.so modul nagyon egyszer˝u, mivel mindig enged´elyezi a hozz´af´er´est. Viszont az is l´athat´o, hogy a pam_permit.so modult az account e´ s session t´ıpus´u sorokn´al is haszn´altuk. Ez t¨obb modulra is jellemz˝o, hogy att´ol f¨ugg˝oen milyen t´ıpus´u sorban haszn´aljuk, m´ask´eppen viselkedik. 2. N´ezz¨unk egy val´os´agos p´eld´at:
39
auth auth auth auth account account password
requisite requisite sufficient required required required required
password required session required session optional
pam_securetty.so pam_nologin.so pam_rhosts_auth.so pam_unix.so pam_unix.so pam_time.so pam_cracklib.so retry=3 \ type=UNIX minlen=10 ocredit=2 \ dcredit=2 pam_unix.so use_authok shadow md5 pam_unix.so pam_motd.so motd=/etc/pmotd
Az els˝o sor megtagadja a hozz´af´er´est, ha a felhaszn´al´o root e´ s olyan termin´alon pr´ob´al bejelentkezni, amelyik nem biztons´agos, vagyis nem szerepel a /etc/securetty file-ban. A m´asodik sorban megadott modul akkor nem enged hozz´af´er´est ha l´etezik a /etc/nologin file. Ha l´etezik a file, akkor a tartalma megjelenik a k´eperny˝on e´ s a rendszer megtagadja a hozz´af´er´est. A 3. sorban az pam_rhosts_auth.so modul azt vizsg´alja meg, hogy a /etc/rhosts.equiv mechanizmus engedi-e a bel´ep´est. V´eg¨ul a 4. sor bek´eri a felhaszn´al´o jelszav´at. Ha az autentik´aci´o (auth) siker¨ult, akkor j¨on az account r´esz. El˝osz¨or itt is a jelsz´o ker¨ul ellen˝orz´esre, p´eld´aul ellen˝orzi, hogy a felhaszn´al´oi fi´ok nem j´art le, a jelsz´ot nem kell-e megv´altoztatni. A pam_time.so modul ellen˝orzi a konfigur´aci´os file-j´aban, hogy az adott felhaszn´al´onak szabade bel´epnie az adott id˝oben. Ebb˝ol a k´et modulb´ol egyik sem tilthatja a hozz´af´er´est, ha t´enyleg be akarunk l´epni. A password r´esz ellen˝orzi az u´ j jelsz´ot a crack program seg´ıts´eg´evel, majd MD5-¨os k´odol´ast haszn´alva a shadow file-ban t´arolja el a jelsz´ot. V´eg¨ul az utols´o el˝otti sor egy bejegyz´est tesz a log file-ba e´ s az utols´o sor ki´ırja a nap u¨ zenet´et. ´ aban a PAM rendszer konfigur´aci´os file-jai a´ ltal´aban line´arisak, p´eld´aul: “Azonos´ıtsuk a fel3. Altal´ haszn´al´ot LDAP-b´ol. Ha nem megy akkor a lok´alis file-okb´ol.” De mi van akkor ha komplexebb dolgot szeretn´enk megadni, p´eld´aul valamilyen felt´etelt szeretn´enk be´ep´ıteni: “Ha a felhaszn´al´o guest, akkor haszn´aljuk a pam_dbus modult egy´ebk´ent a pam_unix modult. A megold´as valami hasonl´o lenne: auth auth auth auth
[default=2 success=ignore] pam_succeed_if.so quiet user = guest [success=ok new_authtok_reqd=done ignore=ignore default=die] pam_dbus.so [default=1] pam_permit.so required pam_unix.so
ahol az els˝o sorban a pam_succeed_if.so ellen˝orzi, hogy a felhaszn´al´o guest-e e´ s ha igen, akkor ennek a modulnak az eredm´enye nem kell e´ s folytassuk a k¨ovetkez˝o sorban. Ha m´as a felhaszn´al´o, m´as e´ rt´ekkel t´er vissza a modul, akkor ugorjunk a´ t 2 sort e´ s a 4. sorban folytassuk. A 2. sorban v´egezz¨uk a hozz´af´er´es ellen˝orz´est a guest felhaszn´al´o eset´en, majd a 3. sorban a´ tugorjuk a 4. sort! L´enyeg´eben egy if ... then ... else ... szerkezetet val´os´ıtottunk meg a fenti p´eld´aban. 4. Ez p´elda az el˝oz˝oh¨oz nagyon hasonl´o, de ebben a p´eld´aban a guest felhaszn´al´o mindig be tud jelentkezni! auth auth auth auth
[default=2 success=ignore] pam_succeed_if.so quiet user = guest required pam_permit.so [default=1] pam_permit.so required pam_unix.so
Az 1. sor ellen˝orzi, hogy mi a felhaszn´al´o neve. A 2. sor enged´elyezi a hozz´af´er´est, m´ıg 3. sor egy ugr´o utas´ıt´asnak felel meg. A 4. sor csak akkor fut le, ha az els˝o sor hamis volt.
40
5.2 Az “other” konfigur´aci´os file A PAM rendszer azt is bitos´ıtja, hogy ha egy alkalmaz´ashoz nem tartozik konfigur´aci´os file, akkor az ´ fogja figyelembe venni. A tipikus tartalma a k¨ovetkez˝o szokott /etc/pam.d/other file tartalmAt lenni: auth auth
required required
pam_warn.so pam_deny.so
Ennek hat´as´ara megjelenik egy figyelmeztet˝o u¨ zenet, hogy az alkalmaz´as nincs konfigur´alva a PAM rendszerben e´ s megtagadja az autentik´aci´ot.
5.3 PAM modulok Sajnos a modulokkal az´ert o´ vatosnak kell lenni, mivel a k¨ul¨onb¨oz˝o Unix rendszereken a modulok egy “picit” m´ask´eppen m˝uk¨odhetnek. Ez´ert mindig ellen˝orizz¨uk a PAM rendszer dokument´aci´oj´at az adott rendszeren. Azt is fontos tudni, hogy a modulok alap be´all´ıt´asai nem mindig a legbiztons´agosabbak. Az al´abbi bekezd´esek csak a legfontosabb, illetve a leggyakrabban haszn´alt modulokat sorolja fel.
5.3.1 pam unix.so
5.4 Azonos´ıt´as USB eszk¨ozzel Arra is lehet˝os´eg van, hogy egy USB eszk¨ozt haszn´aljunk felhaszn´al´o azonos´ıt´asra. Ez az´ert lehet hasznos, mert ebben az esetben egy hardware eszk¨oz azonos´ıtja a felhaszn´al´ot, teh´at akin´ek az eszk¨oz van az a rendszer az adott felhaszn´al´ot testes´ıti meg. Ebben az esetben az USB eszk¨oz egyedi azonos´ıt´oja szolg´al majd autentik´aci´ok´eppen. El˝osz¨or is install´aljunk fel k´et csomagot: $ apt-install install libpam-usb pamusb-tools Figyelem ezek a csomag X Window rendszert is install´alnak, amiket ha nem akarjuk nem kell feltenni, mivel csak “aj´anlott” csomagok. A rendszer konfigur´al´asa igen egyszer˝u, csak a pamusb-conf parancsot kell haszn´alni: # pamusb-conf --add-device MyDevice Please select the device you wish to add. * Using "SanDisk Corp. Cruzer Titanium (SNDKXXXXXXXXXXXXXXXX)" (only option) Which volume would you like to use for storing data ? * Using "/dev/sda1 (UUID: <6F6B-42FC>)" (only option) Name : MyDevice Vendor : SanDisk Corp. Model : Cruzer Titanium Serial : SNDKXXXXXXXXXXXXXXXX Volume UUID : 6F6B-42FC (/dev/sda1) Save to /etc/pamusb.conf ? [Y/n] y Done. ahol a MyDevice n´ev b´armi lehet. T¨obb eszk¨oz is hozz´aadhat´o a rendszerhez. Az eszk¨ozh¨oz tartoz´o felhaszn´al´ok ugyanilyen k¨onnyen hozz´aadhat´ok a rendszerhez:
41
# pamusb-conf --add-user root Which device would you like to use for authentication ? * Using "MyDevice" (only option) User : root Device : MyDevice Save to /etc/pamusb.conf ? [Y/n] y Done. Ha ellen˝orizni akarjuk, hogy minden rendben akkor a pamusb-check parancsot kell haszn´alni: # * * * * *
pamusb-check root Authentication request for user "root" (pamusb-check) Device "MyDevice" is connected (good). Performing one time pad verification... Verification match, updating one time pads... Access granted.
V´eg¨ul mag´at a PAM rendszert kell be´all´ıtani, hogy haszn´alja az USB eszk¨oz¨oket is autentik´aci´ora. Az /etc/pam.d/common-auth file-ban keress¨uk meg azt a sort amiben a pam_unix.so modul szerepel e´ s a felette lev˝o sorba helyezz¨uk be a k¨ovetkez˝ot: auth auth
sufficient required
pam_usb.so pam_unix.so nullok_secure
Mindezek ut´an, ha az eszk¨oz csatlakoztatva van a sz´am´ıt´og´ephez, e´ s bel´ept¨unk egy felhaszn´al´ok´ent, akkor pr´ob´aljunk meg root felhaszn´al´ora v´altani: $ * * * * * *
su pam_usb v.SVN Authentication request for user "root" (su) Device "MyDevice" is connected (good). Performing one time pad verification... Verification match, updating one time pads... Access granted.
¨ 5.5 Osszegz´ es A PAM rendszer egy el´eg o¨ sszetett e´ s bonyolult rendszer, ez´ert fontos, hogy meg´erts¨uk, hogyan lehet helyesen haszn´alni a biztons´agi policy-k megad´as´ara. Tov´abbi inform´aci´o a http://pamusb.org/ web oldalon tal´alhat´o.
42
6. Fejezet
Name Service Switch Wikip´edia alapj´an. Egyes C f¨uggv´enyeknek vagy Unix seg´edprogramoknak, sz¨uks´ege lehet bizonyos adatokra a k¨ornyezetb˝ol, hogy korrekten m˝uk¨odhessenek (pl. jelsz´o, g´epn´ev, ...). Kor´abban ezen adatok meghat´arozott f´ajlokban voltak elt´arolva (pl. /etc/passwd) t¨obbnyire fixen meghat´arozott keres´esi helyen e´ s sorrendben. A GNU C programk¨onyvt´ar megold´asa erre (a Solaris 2, C k¨onyvt´ar mint´aj´ara), hogy a rendszer adatb´azisokat k¨ul¨onb¨oz˝o modulokon kereszt¨ul lehet el´erni. A lehets´eges modulok megtal´alhat´ok a /lib k¨onyvt´arban libnss_MODULN´ EV.so.X n´even (compat, dns, files, ldap, nis, nisplus, wins, winbind). Az NSS a´ ltal, u´ j szolg´altat´asokat lehet felvenni a C programk¨onyvt´ar m´odos´ıt´asa n´elk¨ul, minden szolg´altat´as eset´en k¨ul¨on be lehet a´ ll´ıtani (/etc/nsswitch.conf), hogy mely adatb´azisokban keressen e´ s milyen sorrendben. NSS-b˝ol el´erhet˝o adatb´azisok: aliases, ethers, group, hosts, netgroup, networks, protocols, passwd, rpc, services, shadow, automount, bootparms, netmask, publickey.
43
44
7. Fejezet
FTP
45
46
8. Fejezet
MySQL adatb´azis 8.1 Bevezet´es A MySQL adatb´azis kezel˝o rendszer az mSQL (mini SQL) rendszerb˝ol fejl˝od¨ott ki e´ s az volt a f˝o c´el, hogy legal´abb ugyanolyan gyors legyen. Tov´abbi c´elok voltak a robusztuss´ag e´ s k¨onny˝u haszn´alhat´os´ag, ´ıgy egy t¨obb-sz´alas (multi-threaded) programot k´esz´ıtettek. A t¨obb sz´al lehet˝ov´e teszi, hogy egy sz´al egy kapcsolatot, lek´erdez´est szolg´aljon ki vagy egyszerre t¨obben olvassanak az adatb´azisb´ol. Ezzel m´odszerrel gyors´ıtani lehet az adatb´azis olvas´asokat, f˝oleg akkor ha t¨obb processzoros g´epen futtatjuk az adatb´aziskezel˝ot. Ugyanakkor, a t´abla t´ıpus´at´ol f¨ugg˝oen az ´ır´asi m˝uveletek t¨obb kevesebb ideig feltartj´ak a sz´alakat. Am´ıg egy sz´al ´ır egy t´abl´aba addig minden m´as sz´alnak v´arnia kell ha ugyanahhoz a t´abl´ahoz akar hozz´af´erni. Ez a z´arol´as. Milyen tov´abbi el˝onyei vannak a MySQL adatb´aziskezel˝onek: • nyilt forr´ask´od´u e´ s nyilt szabv´anyokat t´amogat; • sok programoz´asi nyelvben lehet fejleszteni hozz´a alkalmaz´ast: C, C++, Java, Perl, Python, PHP, stb. e´ s • k¨ul¨onb¨oz˝o karakterk´eszleteket t´amogat, ´ıgy mindenf´ele nyelv˝u sz¨oveget k´epes elt´arolni.
´ aja 8.2 MySQL architektur´ A MySQL architekt´ur´aja elt´er m´as adatb´aziskezel˝okt˝ol. A program architekt´ur´aja az 8.1. a´ br´an l´athat´o. A legfels˝o szint nem egyedi, olyan mint m´as adatb´azisrendszerben e´ s ez a szint kezeli a kapcsolatokat, autentik´aci´ot e´ s ´ıgy tov´abb. Tal´an abban egyedi ez a r´esz, hogy minden k´er´est egy k¨ul¨on sz´al szolg´al ki. R´aad´asul a sz´alak cache-elve vannak, ´ıgy nem kell o˝ ket l´etrehozni e´ s megsz¨untetni minden kapcsolat eset´en. A k¨oz´eps˝o szint egyedi a MySQL-ben. A MySQL egy fa szerkezetet alak´ıt ki a beolvasott e´ s e´ rtelmezett (parse) k´er´esb˝ol, majd ezt t¨obbf´ele m´odon optimaliz´alja. Az optimaliz´al´as jelentheti a k´er´es u´ jra´ır´as´at, a t´abl´ak olvas´asi sorrendj´enek megv´altoztat´as´at vagy a megfelel˝o index kiv´alaszt´as´at. Ezt az optimaliz´aci´ot k¨ul¨onb¨oz˝o “javaslatokkal” (hint) lehet befoly´asolni. A t´arol´o motorok (storage engine) befoly´asolj´ak az optimaliz´aci´ot. P´eld´aul az optimaliz´al´o lek´erdezi a t´arol´o motor k´epess´egeit e´ s hogy melyik m˝uvelet mennyi ideig tart amiket fel tud haszn´alni az optimaliz´al´as sor´an. A MySQL miel˝ott b´armit is csin´alna egy k´er´essel, megn´ezi, hogy nem szerepel-e a lek´erdez´es gyorst´arban (query cache). A lek´erdez´es gyorst´arban csak SELECT k´er´esek e´ s eredm´enyeik t´arol´odnak. Ha valaki egy olyan SELECT k´er´est ad ki, ami m´ar szerepel a gyorst´arban, teh´at valaki m´ar kiadta, akkor a szervernek nem kell semmit sem csin´alnia, csak a gyorst´arban t´arolt eredm´enyt kell visszaadni.
47
Kliensek
Kapcsolat és szál kezelés
Lekérdezés cache
Parser
Optimalizáló
Tároló motorok
8.1. a´ bra: MySQL architekt´ur´aja
8.3 Alapfogalmak 8.3.1 Z´arol´as, locking El˝ofordulhat, hogy egyszerre k´et k´er´es is befut az adatb´azis szerverhez melyek egyid˝oben akarj´ak ugyanazt az adatot vagy t´abl´at m´odos´ıtani. Ezt a konkurrens hozz´af´er´est ellen˝orizni kell, a´ ltal´aban valamilyen z´arol´ast (lock) haszn´alnak. K´et t´ıpus´u z´arol´as van: shared lock e´ s exclusive lock. Az olvas´as z´arol´as megosztott (shared) t´ıpus´u vagyis t¨obb kliens is olvashat egyszerre az adatb´azisb´ol an´elk¨ul, hogy zavarn´ak egym´ast. Ugyanakkor a ´ır´asi z´arol´as exkluz´ıv vagy kiz´ar´o jelleg˝u, vagyis nem enged semmilyen m´as ´ır´asi vagy olvas´asi m˝uveletet v´egrehajt´odni am´ıg az ´ır´as be nem fejez˝odik. Az adatb´azisok kezel´ese sor´an nagyon sokszor haszn´alja a rendszer a z´arol´ast. Minden alkalommal ellen˝orizni kell a z´arol´asokat, ha kell z´arolja az adatokat, majd felszabad´ıtja. Ebb˝ol is l´atszik, hogy jelent˝os extra munk´at jelent az adatb´azis kezel˝o sz´am´ara. Ezen fel¨ul az is seg´ıtene az adatb´azis kezel˝o sebess´eg´en, hogy ha minn´el kevesebb adatot z´arolunk, illetve csak azt amelyiket ´ırjuk, ´ıgy lokaliz´alva, lesz˝uk´ıtve a z´arol´ast. A legt¨obb adatb´azis kezel˝o csak sor szint˝u z´arol´ast biztos´ıt, de a MySQL a t´arol´o motorok seg´ıts´eg´evel t¨obbf´ele z´arol´asi strat´egi´at k´epes megval´os´ıtani.
8.3.2 Tranzakci´ok Fontos k´erd´es szokott lenni a tranzakci´o kezel´es k´erd´ese. A tranzakci´ok fontosak az alkalmaz´asok sz´am´ara, ha az adatokat komplex szab´alyok alapj´an egyszerre kell friss´ıteni, ´ırni. Nem olyan t´ul r´eg o´ ta l´eteznek tranzakci´ok a MySQL-ben, de csak akkor haszn´alhat´ok ha k¨ul¨on megadjuk a t´abl´ak l´etrehoz´as´an´al. Mi´ert csak mostan´aban adt´ak hozz´a a rendszerhez a tranzakci´okat? A sebess´eg miatt. Amint tranzakci´okat haszn´alunk az adatb´azis kezel´ese lassabb lesz. A tranzakci´o tulajdonk´eppen nem m´as mint olyan SQL utas´ıt´asok csoportja, amiket egyben kell e´ s lehet v´egrehajtani. Ha siker¨ul az SQL utas´ıt´as csoportot egyben v´egrehajtani, akkor az adatb´azis ezt elfogadja, de ha b´armelyik utas´ıt´as nem tud lefutni, vagy hib´at gener´al, akkor egyiket sem alkalmazza az adatb´aziskezel˝o rendszer. Ez egy mindent vagy semmit rendszer. Vegy¨unk egy p´eld´at. Egy bank adatb´azis´aban k´et f˝o t´abla van a “checking” e´ s a “savings” sz´aml´ak. Ha egy ember a “checking” sz´aml´aj´ar´ol 200 Ft-ot szeretne a´ ttenni a “savings” sz´aml´ara, akkor:
48
• el˝osz¨or ellen˝orizni kell, hogy van-e t¨obb mint 200 Ft a sz´aml´an, • levonunk 200 Ft-ot a “checking” sz´aml´ar´ol e´ s • betesz¨unk 200 Ft-ot a “savings” sz´aml´ara. SQL kifejez´esek form´aj´aban ez a k¨ovetkez˝ok´eppen n´ez ki: 1 2 3 4 5
START TRANSACTION; SELECT balance FROM checking WHERE customer_id = 103276; UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 103276; UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 103276; COMMIT;
A tranzakci´ok csak akkor m˝uk¨odnek j´ol, ha teljes´ıtik az ACID tesztet. Az ACID n´egy sz´o els˝o bet˝uj´eb˝ol a´ ll: Atomicity : A tranzakci´onak atominak kell lennie, vagyis egy e´ s oszthatatlan egys´egnek. Ebben az esetben nincs r´eszben v´egrehajtott tranzakci´o. Consistency : Az adatb´azis egyik konzisztens a´ llapotb´ol egy m´asik konzisztens a´ llapotba ker¨ul. Ez p´eld´aul azt jelenti, hogy a fenti p´eld´aban a 200 Ft nem t¨unhet el e´ s nem is keletkezhet ismeretlen forr´asb´ol. Isolation : Izol´aci´o, vagyis egy tranzakci´o l´athatatlan m´as tranzakci´ok sz´am´ara addig am´ıg a tranzakci´o be nem fejez˝odik. Durability : Tart´oss´ag, vagyis ha egyszer egy tranzakci´o v´egrehajt´odott akkor a v´altoz´as v´egleges. Alkalmaz´asban el´eg neh´ez ezeket a felt´eteleket biztos´ıtani e´ s a MySQL-nek is t¨obb komplik´alt m˝uveletet kell v´egrehajtania, hogy biztos´ıtsa az ACID felt´eteleket e´ s ez okozza a sebess´eg cs¨okken´est. Holtpont Az adatb´azisok eset´en holtpont (deadlock) akkor alakul ki amikor kett˝o vagy t¨obb tranzakci´o m´ar z´arolt valamilyen adatot e´ s u´ jabb adatot akar z´arolni, amit viszont egy m´asik tranzakci´o m´ar z´arolt. P´eld´aul, tranzakci´o 1: START TRANSACTION; UPDATE StockPrice SET close = 45.50 WHERE stock_id = 4 and date = ’2002-05-01’; UPDATE StockPrice SET close = 19.80 WHERE stock_id = 3 and date = ’2002-05-02’; COMMIT; illetve tranzakci´o 2: START TRANSACTION; UPDATE StockPrice SET high = 20.12 WHERE stock_id = 3 and date = ’2002-05-02’; UPDATE StockPrice SET high = 47.20 WHERE stock_id = 4 and date = ’2002-05-01’; COMMIT; Tegy¨uk fel, hogy mindk´et tranzakci´o v´egrehajtja a 2. sort e´ s ezzel z´arolnak egy-egy sort a t´abl´aban, de ezut´an olyan sort pr´ob´alnak m´odos´ıtani, amelyiket m´ar a m´asik tranzakci´o z´arolt. Mivel a sorok z´arolva vannak, ez´ert v´arniuk kell, a v´egtelens´egig e´ s ´ıgy alakult ki a holtpont, mivel a rendszer nem tud el˝ore l´epni. A k¨ul¨onb¨oz˝o t´arol´o motorok k¨ul¨onb¨oz˝ok´eppen oldj´ak meg a holtpont kezel´est. Egyes t´arol´o motorok feladj´ak a tranzakci´o v´egrehajt´as´at, ha egy bizonyos id˝o eltelt a v´egrehajt´asa sor´an. Ugyanakkor az InnoDB t´arol´o motor e´ szreveszi a k¨ork¨or¨os f¨ugg˝os´egeket e´ s az egyik tranzakci´o hat´as´at vissza´all´ıtja (roll back).
49
8.4 Adatb´azis t´ıpusok A MySQL rendszer t¨obbf´ele t´abla t´ıpust vagy t´arol´o motort (storage engine) t´amogat. Minden l´etrehozott t´abla defin´ıci´oj´at a MySQL egy .frm kiterjeszt´es˝u file-ban t´arol. Ha szeretn´enk meg´allap´ıtani, hogy egy t´abla mely t´arol´o motorral lett l´etrehozva a k¨ovetkez˝o parancsot lehet kiadni: mysql> SHOW TABLE STATUS LIKE ’user’ \G *************************** 1. row *************************** Name: user Engine: MyISAM Row_format: Dynamic Rows: 6 Avg_row_length: 59 Data_length: 356 Max_data_length: 4294967295 Index_length: 2048 Data_free: 0 Auto_increment: NULL Create_time: 2002-01-24 18:07:17 Update_time: 2002-01-24 21:56:29 Check_time: NULL Collation: utf8_bin Checksum: NULL Create_options: Comment: Users and global privileges 1 row in set (0.00 sec) A fenti list´aban a user t´abla t´arol´o motorja a MyISAM. Tov´abbi t´arol´o motorok list´aja: ISAM : Ez a t´abla t´ıpus az 5.x MySQL v´altozatban t¨obb´e nem t´amogatott. Minden funkcionalit´as´at a MyISAM t´abla t´ıpus vette a´ t. Az ISAM eset´en a maxim´alis t´arol´o kapacit´as 4 GB volt e´ s nem volt hordozhat´o. MyISAM : Ez az alap´ertelmezett t´abla t´ıpus e´ s csak t´abl´ank´enti z´arol´ast t´amogat. Nagyon gyors t´arol´o motor, de nem t´amogatja a tranzakci´okat. A t´abl´ak m´erete f¨ugg az oper´aci´os rendszert˝ol de hordozhat´oak rendszerr˝ol rendszerre. Maximum 64 kulcs lehet t´abl´ank´ent e´ s a maxim´alis kulcs hossz 1024 byte lehet. K´et file-t hoz l´etre, egy .MYD file-t ami az adatokat e´ s egy .MYI file-t ami pedig az indexet tartalmazza. Compressed MyISAM : Bizonyos esetekben elegend˝o olyan adatb´azis amit csak olvasni kell e´ s nem kell m´odos´ıtani. P´eld´aul az adatb´azis egy CDROM-on vagy DVD-n tal´alhat´o. Ebben az esetben j´ol haszn´alhat´o ez a t´ıpus, mivel kisebb helyet foglal a t¨om¨or´ıt´es miatt. Ha m´egis m´odos´ıtani kell az adatokat, akkor el˝osz¨or ki kell t¨om¨or´ıteni, majd m´odos´ıtani kell az adatot e´ s vissza t¨om¨or´ıteni. MyISAM Merge : Az´ert l´etezik ez a t´abla t´ıpus, hogy t¨obb MyISAM t´abl´at egyben lehessen kezelni, ezzel elt¨or¨olve a MyISAM t´abl´ak m´eretkorl´at´at. InnoDB : Biztons´agosan val´os´ıtja meg a tranzakci´okat e´ s a soronk´enti z´arol´ast (lock) is t´amogatja. Idegen kulcsok is t´amogatottak. Egy InnoDB t´abla t¨obb file-ban is t´arolhat´o ´ıgy a t´abla m´eret´et csak a merev kapacit´asa korl´atozza. Ezek az adatt´abl´ak is hordozhat´ok rendszerr˝ol rendszerre. Egy h´atr´anya ennek az adatb´azisnak, hogy t¨obb helyet foglal mint az MyISAM t´abla form´atum. Memory : R´egebben Heap t´ıpusnak nevezt´ek. Ezek a t´abl´ak a mem´ori´aban t´arol´odnak, ´ıgy ez a leggyorsabb t´abla t´ıpus, de a´ ramsz¨unet eset´en az adatok elvesznek. A t´abl´ak nem t´amogatj´ak az AUTO INCREMENT tulajdons´agot e´ s BLOB, TEXT adatt´ıpusokat.
50
Archive : Ez a t´arol´o motor csak az INSERT e´ s SELECT utas´ıt´asokat t´amogatja. Nincsennek indexek. Kevesebb lemez I/O m˝uveletet ig´anyel mint a MyISAM motor. Minden SELECT m˝uveletnek a teljes t´abl´at a´ t kell olvasnia, ´ıgy f˝oleg loggol´asra, vagy m´er´esi adatok t´arol´as´ara alkalmas, mivel az anal´ızis sor´an is a teljes t´abl´at v´egig kell olvasni. Soronk´enti z´arol´ast haszn´al e´ s speci´alis bufferel´est haszn´al, hogy az adatokot gyorsan lehessen beilleszteni. CSV : Ez motor CSV (Comma Separated Values) file-okat tud t´ablak´ent kezelni. J´ol haszn´alhat´o a t´abl´azatkezel˝o programokkal egy¨utt, hiszen azok file form´atum´at azonnal fel tudja dolgozni, be tudja t¨olteni. Federated : Ez a t´arol´o motor minden adatot egy t´avoli szerveren t´arol. Semmilyen adatot nem t´arol lok´alisan, mivel minden Federated t´abla egy t´avoli MySQL t´abl´ara hivatkozik e´ s minden m˝uvelet sor´an a t´avoli szerverhez kapcsol´odik. T¨obb furcsas´ag e´ s korl´atoz´as j´ar ezzel a t´arol´o motorral. Blackhole : M´as n´even fekete lyuk t´arol´o motor. Ez a motor nem veszi figyelembe az INSERT utas´ıt´asokat. Ugyanakkor minden m˝uveletet t´arol a logokban e´ s ´ıgy az adatb´azisok speci´alis replik´aci´oj´aban lehet hasznos. (L´asd 8.12. fejezet) NDB Cluster : Ezt a t´arol´o motor a 2003-ban, a Sony-t´ol megvett technol´ogi´ara e´ p¨ul e´ s a kluszteres megold´asokn´al j´atszhat szerepet. BerkeleyDB (BDB) : Hasonl´o az InnoDB t´ıpushoz e´ s t´amogatja a tranzakci´okat. T´amogatja a lap szint˝u z´arol´ast de az adat file nem hordozhat´o. A fent felsorolt t´arol´o motorokon k´ıv¨ul m´eg vannak tov´abbiak, amiket itt most nem t´argyalunk. Ha valami speci´alis ig´eny van akkor e´ rdemes azok haszn´alat´at is megfontolni.
8.4.1 T´arol´o motor v´alaszt´as Amikor megtervezz¨uk az alkalmaz´asunket, amelyik MySQL adatb´azist fog haszn´alni, e´ rdemes megfontolni, hogy melyik t´arol´o motort haszn´alja majd az alkalmaz´as. R´aad´asul t´abl´ank´ent k¨ul¨onb¨oz˝ot lehet haszn´alni, ´ıgy erre is figyelni kell. N´eh´any szempont a v´alaszt´ashoz: Tranzakci´o : Ha az alkalmaz´asnak sz¨uks´ege van tranzakci´okra, akkor a legstabilabb e´ s legjobb t´arol´o motor az InnoDB. Ha nem kellenek tranzakci´ok e´ s a´ ltal´aban SELECT e´ s INSERT utas´ıt´asokat haszn´alunk, akkor a MyISAM egy j´o v´alaszt´as. Konkurrencia : Ha csak egyszer˝u beilleszt´est e´ s kiv´alaszt´ast akarunk haszn´alni, akkor a MyISAM t´ıpus elegend˝o. Komplexebb m˝uveletek kever´eke eset´en a sor z´arol´ast haszn´al´o t´abl´ak egyike jobb lehet. Hiba ut´ani helyre´all´ıt´as : Ha sok adatunk van, akkor e´ rdemes azt is megfontolni, hogy mennyi ideig tartana az adatok helyre´all´ıt´asa. A MyISAM t´ıpus a´ ltal´aban k¨onnyebben lesznek hib´asak e´ s tov´abb tart a helyre´all´ıt´as. Az InnoDB motor sokkal gyorsabban tudja az adatokat helyre´all´ıtani. ´ aban ez a f˝o ok, hogy az emberek mi´ert az InnoDB motort v´alasztj´ak m´eg akkor is ha nincs Altal´ sz¨uks´eg¨uk tranzakci´ora. Speci´alis szolg´altat´asok : Ha kluszteres indexre van sz¨uks´eg¨unk akkor csak az InnoDB motort v´alaszthatjuk. Vagy csak a MyISAM motorral lehets´eges a teljes adatb´azisban a sz¨oveges keres´es.
8.5 Manu´alis install´al´as Ebben a fejezetben az ker¨ul bemutat´asra, hogyan lehet manu´alis m´odon telep´ıteni a MySQL adatb´azis kezel˝ot egy sz´am´ıt´og´epre. Term´eszetesen csomagb´ol is telep´ıthet˝o a rendszer de ´ıgy tal´an jobb r´al´at´asunk lesz a rendszerre. A programok leford´ıt´as´ahoz a k¨ovetkez˝o csomagokra lesz sz¨uks´eg:
51
gcc g++ libncurses5 makefile Innent˝ol kezdve felt´etelezz¨uk, hogy ezek a programok fel vannak telep´ıtve a Linux-ra e´ s m˝uk¨od˝ok´epesek. Ezut´an t¨olts¨uk le p´eld´aul a mysql-5.1.39.tar.gz a´ llom´anyt valamelyik t¨uk¨or oldalr´ol. A file egy t¨om¨or´ıtett tar arch´ıvum, ´ıgy csomagoljuk ki: $ tar zxvf mysql-5.1.39.tar.gz Ezut´an k¨ovetkezik a program ford´ıt´asa a “szok´asos” m´odon: $ cd mysql-5.1.39 $ ./configure --prefix=/opt/mysql --sysconfdir=/opt/etc --localstatedir=/opt/var/mysql --with-unix-socket-path=/opt/tmp/mysql.sock $ make $ make install Az els˝o sorban bel´ep¨unk a forr´ast tartalmaz´o k¨onyvt´arba, majd a m´asodik sorban konfigur´aljuk. A configure shell script a szabad forr´as´u programokn´al szok´asos haszn´alni e´ s l´enyeg´eben ez a script ellen˝orzi, hogy a rendszeren a sz¨uks´eges k¨onyvt´arak, fejl´ec file-ok, programok jelen vannak-e. A --prefix opci´oval azt adjuk meg, hogy az install´al´as sor´an melyik k¨onyvt´arba m´asoljuk a file-okat. ´ aban Itt most kifejezetten egy olyan u´ tvonalat adtunk meg (/opt/mysql) ami nem szokv´anyos. Altal´ a /usr k¨onyvt´ar al´a install´al´odik a MySQL rendszer. A MySQL rendszer konfigur´aci´os file-ja az /etc/mysql k¨onyvt´arba ker¨ul alap esetben, de a --sysconfdir kapcsol´oval egy m´asik k¨onyvt´arat adhatunk meg. A --localstatedir kapcsol´o az adatb´azis hely´et adja meg (ha nem az alap k¨onyvt´arat akarjuk haszn´alni) e´ s a --with-unix-socket-path kapcsol´o pedig, hogy melyik filet haszn´alja majd a MySQL mint socket file. Alap esetben a socket file a /var/run/mysqld/mysqld.sock. Ezut´an hozzunk l´etre egy csoportot e´ s egy felhaszn´al´ot, akihez a MySQL rendszer tartozni fog: $ groupadd mysql $ useradd -g mysql mysql Biztos´ıtani kell, hogy bizonyos file-ok is a felhaszn´al´o tulajdon´aba ker¨uljenek: $ chown -R mysql:mysql /opt/var/mysql A bin´aris, futtathat´o programok k¨onyvt´ar´at e´ rdemes hozz´aadni az el´er´esi u´ thoz: $ export PATH=$PATH:/opt/mysql/bin Egy alap adatb´azist is l´etre kell hozni: $ mysql_install_db --user=mysql A fenti parancs azt adja meg, hogy a mysql felhaszn´al´o v´egezze a m˝uveleteket. A parancs l´etrehozza a sz¨uks´eges alap adatb´azist. Ezt majd egy kicsit k´es˝obb n´ezz¨uk meg. Konfigur´aci´os file-t is l´etre kell hozni, hogy a daemon majd tudja, mit hol tal´al. A konfigur´aci´os helye az /opt/etc/my.cnf. Egy ilyen file-t l´etre is hozhatunk vagy egy mint´at is bem´asolhatunk a tar file-b´ol:
52
$ mkdir -p /opt/etc $ cd upport-files $ cp mysql-5.1.39/support-files/my-medium.cnf /opt/etc/my.cnf A fenti p´eld´ahoz kapcsol´od´o konfigur´aci´os file n´eh´any fontosabb sora a k¨ovetkez˝o lehet: [client] port = 3306 socket = /opt/tmp/mysql.sock [mysqld] port = 3306 socket = /opt/tmp/mysql.sock basedir = /usr/mysql datadir = /usr/mysql/data ledir = /usr/mysql/bin A konfigur´aci´os file szekci´okb´ol a´ ll. Egy szekci´ot a sz¨ogletes z´ar´ojelbe z´art sz¨oveg vezet be, ami megmondja milyen programra vonatkoznak a be´all´ıt´asok. A client r´esz az adatb´azishoz kapcsol´od´o kliens programokra vonatkozik, p´eld´aul a mysql programra. A socket param´eter adja, meg hogy a kliens hol tal´alja meg a socket-et amin kereszt¨ul kapcsol´odni tud az adatb´azis szerverhez. A port opci´o adja meg, hogy a MySQL daemon milyen port-hoz kapcsol´odjon e´ s azon kereszt¨ul fogadja a k´er´eseket. A MySQL daemon ind´ıt´asa: /opt/mysql/bin/mysqld_safe --user=mysql &
8.6 Install´al´as csomagb´ol $ apt-get install mysql-client $ apt-get install mysql-server
8.7 Be´all´ıt´asok Az´ert, hogy n¨ovelj¨uk a biztons´agot jelsz´ot kell megadni a root felhaszn´al´onak. Ezt a jelsz´ot nem a bejelentkez´es (login) sor´an, hanem az adatb´azishoz val´o hozz´af´er´es sor´an kell megadni! /opt/mysql/bin/mysqladmin -u root password ’a-jelszo’ ahol a a-jelszo a konkr´et jelsz´o. Ezut´an root felhaszn´al´o is csak jelsz´oval tud hozz´af´erni az adatb´azishoz. P´eld´aul a mysql kliens haszn´alata eset´en: $ mysql -u root -p opci´okat kell megadni, ahol a -u opci´o ut´an a felhaszn´al´o nevet kell megadni e´ s a -p opci´o azt jelenti, hogy a kliens jelsz´ot fog k´erni a felhaszn´al´ot´ol. A fenti mysqladmin parancsot SQL parancsokkal is helyettes´ıthetj¨uk: mysql> USE mysql; mysql> UPDATE user SET Password=PASSWORD(’a-jelszo’) WHERE user=’root’; mysql> FLUSH PRIVILEGES;
53
8.8 Adatb´azisok kezel´ese Ez a fejezet t¨obb l´ep´esben mutatja be, hogy hogyan lehet haszn´alni a MySQL adatb´azist parancssorb´ol. L´epj¨unk kapcsolatba az adatb´azis szerverrel a kliens seg´ıts´eg´evel: $ mysql -u root -p N´ezz¨uk meg a MySQL szerveren t´arolt adatb´azisok list´aj´at: mysql> show databases; +---------------------+ | Database | +---------------------+ | information_schema | | mysql | | test | +---------------------+ Fontos, hogy a parancsok v´eg´ere egy pontosvessz˝o (‘;’) kerulj¨ ¨ on! Hozzunk l´etre egy u´ j adatb´azist: mysql> create database proba; Query OK, 1 row affected (0.00 sec) majd n´ezz¨uk meg ism´et az adatb´azisok list´aj´at: mysql> show databases; +---------------------+ | Database | +---------------------+ | information_schema | | mysql | | test | | proba | +---------------------+ Ezut´an jel¨olj¨uk ki, hogy az u´ j (“proba”) adatb´azist haszn´aljuk, majd adjunk hozz´a egy t´abl´at: mysql> use proba; mysql> create table dolgozok (Nev char(20), Osztaly char(20), Munka char(20)); Query OK, 0 rows affected (0.01 sec) A l´etrehozott t´abla megtekint´es´ehez a k¨ovetkez˝o parancsot lehet kiadni: mysql> show tables; +-----------------+ | Tables_in_proba | +-----------------+ | dolgozok | +-----------------+ illetve ha a t´abla tartalm´at akarjuk megn´ezni: mysql> describe dolgozok; +----------+----------+------+-----+---------+-------+
54
| Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+-------+ | Nev | char(20) | YES | | NULL | | | Osztaly | char(20) | YES | | NULL | | | Munka | char(20) | YES | | NULL | | +----------+----------+------+-----+---------+-------+ 3 rows in set (0.03 sec) A tabla szerkezetenek kiirat´as´at m´ask´eppen is megadhatjuk: mysql> show columns from dolgozok; A t´abl´aban l´etrehozott oszlopok t´ıpusa (char(20)) egy sz¨oveg. M´as t´ıpust is meg lehet adni: • char(M) : Fix hossz´us´ag´u karaktersorozat, ahol M e´ rt´eke 1 e´ s 255 k¨oz¨ott lehet • VARCHAR(M) : V´altoz´o hossz´us´ag´u karaktersorozat • INT : Eg´esz sz´am. Az e´ rtelmez´ese tartom´any: [0 - 4294967295] ha el˝ojel n´elk¨uli sz´amr´ol van sz´o e´ s [-2147483648 - 2147483647] ha el˝ojeles a sz´am. • FLOAT(m,n) : Val´os sz´am, mely m sz´amjegyb˝ol a´ ll amib˝ol n darab sz´amjegy a t¨ort r´esz. P´eld´aul: FLOAT(4,2) eset´en egy sz´am t´arolt form´aja: 12.34 . • Tov´abbi lehets´eges adatt´ıpusok: DATE, TEXT, BLOB e´ s ´ıgy tov´abb. Elemek besz´ur´asa egy t´abl´aba SQL paranccsal t¨ort´enik, p´eld´aul a k¨ovetkez˝o m´odon: mysql> INSERT INTO dolgozok VALUES (’Joe Black’,’Adossag’,’Adoszedo’); mysql> INSERT INTO dolgozok VALUES (’Kovacs Istvan’,’Marketing’,’Bokszolo’); mysql> INSERT into dolgozok values (’Isaac Asimov’,’Marketing’,’Iro’); Kil´epni a MySQL kliensb˝ol a k¨ovetkez˝o paranccsal lehet: mysql> quit Bye Tov´abbi SQL minta p´eld´akat a MySQL k´ezik¨onyv is tartalmaz!
8.9 Biztons´agi k´erd´esek 8.9.1 Kezdeti konfigur´al´as A MySQL rendszer install´al´asa sor´an egy p´elda adatb´azis is install´al´asra ker¨ul. Egy c´eges szerveren erre nincs sz¨uks´eg. Ugyan´ıgy nincs sz¨uks´eg arra, hogy alap esetben a root-on k´ıv¨ul m´as is hozz´af´erjen az adatb´azishoz. R´aad´asul a root is csak a lok´alis g´epr˝ol f´erjen hozz´a a rendszerhez. Ennek el´er´es´ehez a k¨ovetkez˝o parancsokat adhatjuk ki: mysql> mysql> mysql> mysql> mysql>
drop database test; use mysql; delete from db; delete from user where not (host="localhost" and user="root"); flush privileges;
55
´ felhaszn´al´o hozz´aad´asa egyszeruen ˝ 8.9.2 Uj ´ felhaszn´al´ot is hozz´aadhatunk a MySQL adatb´azis kezel˝o rendszerhez. Ebben az esetben ezt a Uj felhaszn´al´ot haszn´alhatjuk arra, hogy bizonyos adatb´azisokhoz, esetleg t´abl´akhoz hozz´af´erjen. mysql> mysql> -> mysql> mysql> mysql>
USE mysql; INSERT INTO user (Host, User, Password, Select_priv) VALUES (’’, ’web-user’, password(’supertitkos’), ’Y’); FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON proba.* TO web-user; FLUSH PRIVILEGES;
A fenti parancs sorozatban a FLUSH PRIVILEGES; parancsok nagyon fontosak, mivel ezek biztos´ıtja, hogy a GRANT t´abl´ak val´oban friss´ıtve legyenek. A fenti szintakszisra r´eszletesebb magyar´azat a k¨ovetkez˝o fejezetekben tal´alhat´o.
8.9.3 Hozz´af´er´es kontroll A MySQL adatb´aziskezel˝oben a biztons´agot e´ s az adatb´azisokhoz val´o hozz´af´er´est ACL-ek (Access Controll List) seg´ıts´eg´evel lehet kezelni. Nagyon fontos: A root felhaszn´al´o kiv´etel´evel senkinek ne legyen joga a mysql adatb´azisban a user t´abl´ahoz! Ugyanennyire fontos, hogy e´ rts¨uk meg a MySQL kontroll mechanizmus´at e´ s esetleg a GRANT e´ s REVOKE parancsok haszn´alat´at. A MySQL rendszerben 5 t´abla j´atszik fontos szerepet a hozz´af´er´es ellen˝orz´esben: +-----------------+ | user | | db | | host | | tables_priv | | columns_priv | +-----------------+ Amikor egy felhaszn´al´o csatlakozni szeretne egy adatb´azishoz egy adott sz´am´ıt´og´epr˝ol akkor a MySQL el˝osz¨or a user t´abl´at ellen˝orzi, hogy a felhaszn´al´o l´etezik a t´abl´aban, a t´abl´aban t´arolt jelsz´o egyezik-e a megadott jelsz´oval e´ s az adott sz´am´ıt´og´epr˝ol csatlakozhat-e a felhaszn´al´o. ´Igy n´ezz¨uk meg a user t´abla szerkezet´et: +-----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+-----+---------+-------+ | Host | char(60) | | PRI | | | | User | char(16) | | PRI | | | | Password | char(16) | | | | | | Select_priv | enum(’N’,’Y’) | | | N | | | Insert_priv | enum(’N’,’Y’) | | | N | | | Update_priv | enum(’N’,’Y’) | | | N | | | Delete_priv | enum(’N’,’Y’) | | | N | | | Create_priv | enum(’N’,’Y’) | | | N | | | Drop_priv | enum(’N’,’Y’) | | | N | | | Reload_priv | enum(’N’,’Y’) | | | N | | | Shutdown_priv | enum(’N’,’Y’) | | | N | | | Process_priv | enum(’N’,’Y’) | | | N | | | File_priv | enum(’N’,’Y’) | | | N | | | Grant_priv | enum(’N’,’Y’) | | | N | | | References_priv | enum(’N’,’Y’) | | | N | | | Index_priv | enum(’N’,’Y’) | | | N | |
56
| Alter_priv | enum(’N’,’Y’) | | | N | | +-----------------+---------------+------+-----+---------+-------+
A t´abl´ab´ol a Host, User e´ s Password mez˝oket haszn´alja a rendszer a kezdeti kapcsol´od´asn´al. P´eld´aul: +--------------------+--------+----------+ | Host | User | Password | +--------------------+--------+----------+ | valami.domain.com | john | | +--------------------+--------+----------+ bejegyz´es eset´en a john felhaszn´al´o, jelsz´o n´elk¨ul (NULL) csatlakozhat az adatb´azishoz a valami.domain.com sz´am´ıt´og´epr˝ol. Nem csak sz´am´ıt´og´ep n´ev, hanem domain is megadhat´o. R´aad´asul itt is lehet “wildcard” karaktert haszn´alni, ami a sz´azal´ek karakter (‘%’). A karakter hely´ebe b´armi behelyettes´ıthet˝o, p´eld´aul: +-------+--------+----------+ | Host | User | Password | +-------+--------+----------+ | % | john | | +-------+--------+----------+ ebben az esetben a john felhaszn´al´o b´armelyik sz´am´ıt´og´epr˝ol csatlakozhat az adatb´azishoz! Term´eszetesen t¨obbf´elek´eppen is haszn´alhat´o a “wildcard” karakter, p´eld´aul: +---------------+--------+----------+ | Host | User | Password | +---------------+--------+----------+ | %.domain.com | john | | +---------------+--------+----------+ ebben az esetben a john felhaszn´al´o b´armelyik sz´am´ıt´og´epr˝ol csatlakozhat a domain.com-b´ol az adatb´azishoz. A sz´am´ıt´og´ep vagy domain neve teljes nevv´el e´ s IP sz´ammal is megadhat´o. N´ezz¨unk n´eh´any p´eld´at: • Teljes n´ev vagy IP c´ım: www.pmmf.hu vagy 193.18.65.124 • N´ev “wildcard” karakterrel: %.pmmf.hu . A “wildcard” karakter b´arhol szerepelhet, ´ıgy a www.pmmf.% jelentheti a www.pmmf.com, www.pmmf.net vagy ak´ar a www.pmmf.hu c´ımet. • IP c´ım “wildcard” karakterrel: 193.18.65.% . Ez ut´obbi egyen´ert´ek˝u a k¨ovetkez˝ovel: 144.155.166.0/255.255.255.0
Azt is fontos e´ szrevenni, hogy egy felhaszn´al´ora vonatkoz´oan t¨obb sor is lehet a user t´abl´aban. A sorokban a Host mez˝o e´ s esetleg a Password mez˝o is k¨ul¨onb¨oz˝o lehet ´ıgy biztos´ıtva pontos kontroll a hozz´af´er´esben. P´eld´aul nem kell enged´elyezni a hozz´af´er´est ak´arhonnan, ha esetleg k´et k¨ul¨onb¨oz˝o domain-b˝ol akarjuk el´erni az adatb´azis szervert. Ebben az esetben k´et sort sz´urunk be a user adatb´azisba. R´aad´asul ezzel azt is biztos´ıtani tudjuk, hogy a jelsz´o k¨ul¨onb¨oz˝o legyen. Ezek ut´an azt is fontos tudni, hogy a t´abl´aban milyen sorrendbe ker¨ulnek a sorok. P´eld´aul:
57
+------------------+--------+ | Host | User | +------------------+--------+ | %.domain.com | john | | host.domain.com | | +------------------+--------+ b´ar ez a t´abla kin´ezete, de a MySQL ezt rendezni fogja olyan m´odon, hogy a specifikus g´ep nevek ker¨ulnek el˝ore e´ s ´ıgy ez lesz a mem´oriabeli kin´ezete: +------------------+--------+ | Host | User | +------------------+--------+ | host.domain.com | | | %.domain.com | john | +------------------+--------+ Ez azt jelenti, hogy ha a john felhaszn´al´o a host.domain.com g´epr˝ol csatlakozik a szerverhez, akkor az els˝o sor szerint t¨ort´enik a csatlakoz´as. Ez az´ert probl´ema, mert b´ar a john felhaszn´al´o nevet megadtuk, de m´egis anonymous-k´ent fog csatlakozni a szerverhez, mivel az els˝o illeszked´est haszn´alja a szerver. Ha siker¨ul a kapcsol´od´as, de a k´es˝obbi m˝uveletekn´el nincsennek meg a sz¨uks´eges privil´egiumaink, akkor val´osz´ın˝uleg nem a v´art felhaszn´al´ok´ent jelentkezt¨unk be. Ennek ellen˝orz´es´ere a CURRENT_USER() f¨uggv´enyt e´ rdemes haszn´alni, p´eld´aul: mysql> SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | +----------------+ | @localhost | +----------------+ Ez azt jelenti, hogy felhaszn´al´oi n´ev n´elk¨ul jelentkezt¨unk be a lok´alis g´epr˝ol. A CURRENT_USER() f¨uggv´eny form´atuma mindig: felhasznalo@host A 8.9.1. fejezetben bemutatott l´ep´esekhez hasonl´oan p´eld´aul t¨or¨olj¨uk azokat a sorokat, amelyek probl´em´asak lehetnek a biztons´ag szempontj´ab´ol, ´ıgy a felhaszn´al´o n´elk¨uli sorokat: mysql> USE mysql; mysql> DELETE from user where User=’’ Miut´an a kapcsolat l´etrej¨ott minden tov´abbi k´er´es eset´en - SELECT, DELETE, UPDATE e´ s ´ıgy tov´abb - ellen˝orz´est v´egez a rendszer, hogy van-e az adott m˝uveletre jogosults´ag. El˝ofordulhat, hogy bizonyos felhaszn´al´ok csak a SELECT m˝uveletet hajthatj´ak v´egre, m´asok pedig m´odos´ıthatnak adatot is. Az al´abbi lista tartalmazza a lehets´eges privil´egiumokat: • Select_priv : a SELECT SQL m˝uvelet enged´elyezett • Insert_priv : az INSERT SQL m˝uvelet enged´elyezett • Update_priv : az UPDATE SQL m˝uvelet enged´elyezett • Delete_priv : a DELETE SQL m˝uvelet enged´elyezett • Create_priv : a CREATE SQL m˝uvelet enged´elyezett, adatb´azisok e´ s t´abl´ak l´etrehoz´asa enged´elyezett
58
• Drop_priv : a DROP m˝uvelet enged´elyezett adatb´azis e´ s t´abl´ak eset´en is • Reload_priv : a MySQL szerver friss´ıt´ese (refresh) e´ s u´ jrat¨olt´ese (reload) enged´elyezett • Shutdown_priv : egy fut´o MySQL szerver le´all´ıt´asa enged´elyezett • Process_priv : a MySQL szerver aktivit´as´anak k¨ovet´ese enged´elyezett • File_priv : file-ok olvas´asa e´ s ´ır´asa enged´elyezett a szerveren • Grant_priv : a GRANT paranccsal m´as felhaszn´al´ok privil´egiumait a´ ll´ıthatja a felhaszn´al´o • Index_priv : index l´etrehoz´as, szerkeszt´es e´ s t¨orl´es enged´elyezett • Alter_priv : az ALTER SQL m˝uvelet enged´elyezett Ezek k¨oz¨ott a privil´egiumok k¨oz¨ott vannak kev´esb´e e´ rz´ekenyek e´ s vesz´elyesek is, hiszen egy lek´erdez´es kev´esb´e vesz´elyes mint hogy az adatokat m´odos´ıthatja valaki. (Persze a lek´erdez´es is lehet vesz´elyes, ha az adatok titkosak.) A Grant_priv privil´egiumot csak nagyon ritk´an kell enged´elyezni, mivel ezzel ´ egy felhaszn´al´o m´as felhaszn´al´ok jogait v´altoztathatja meg, n¨ovelheti. Erdekes figyelembe venni, hogy a File_priv privil´egium nagyon vesz´elyes lehet e´ s ez´ert szint´en nem szabad gyakran haszn´alni. Itt az a probl´ema, hogy ezen privil´egium birtok´aban b´armilyen file-t elolvashat a felhaszn´al´o. Legal´abb is azokat a file-okat amikhez a MySQL szerver daemon-nak jogosults´aga van. Ha a daemon root-k´ent fut, akkor minden file olvashat´o lesz az adott felhaszn´al´onak. Fontos megjegyezni, hogy ezek a privil´egiumok a user t´abl´aban glob´alisan minden adatb´azisra e´ s t´abl´ara vonatkoznak! Ez´ert a´ ltal´aban a legt¨obb adminisztr´ator ebben a t´abl´aban minden privil´egiumot ’N’-re a´ ll´ıt e´ s a finom hangol´ast a host e´ s db t´abl´akban v´egzik el. N´ezz¨uk a db t´abla szerkezet´et: +-----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+-----+---------+-------+ | Host | char(60) | | PRI | | | | Db | char(32) | | PRI | | | | User | char(16) | | PRI | | | | Select_priv | enum(’N’,’Y’) | | | N | | | Insert_priv | enum(’N’,’Y’) | | | N | | | Update_priv | enum(’N’,’Y’) | | | N | | | Delete_priv | enum(’N’,’Y’) | | | N | | | Create_priv | enum(’N’,’Y’) | | | N | | | Drop_priv | enum(’N’,’Y’) | | | N | | | Grant_priv | enum(’N’,’Y’) | | | N | | | References_priv | enum(’N’,’Y’) | | | N | | | Index_priv | enum(’N’,’Y’) | | | N | | | Alter_priv | enum(’N’,’Y’) | | | N | | +-----------------+---------------+------+-----+---------+-------+
Itt is az els˝o h´arom mez˝o kontroll´alja az adott adatb´azishoz val´o hozz´af´er´est, az adatb´azis nev´et, a felhaszn´al´ot, e´ s az enged´elyezett sz´am´ıt´og´epek nev´et. P´eld´aul: +------+------+---------+----------------+ | Host | User | Db | all_privileges | +------+------+---------+----------------+ | % | | test | Y | +------+------+---------+----------------+ eset´en minden felhaszn´al´o, b´armely sz´am´ıt´og´epr˝ol kapcsol´odhat a test adatb´azishoz. Ha a Host bejegyz´es u¨ res a db t´abl´aban, akkor az enged´elyezett sz´am´ıt´og´epeket a host t´abl´ab´ol a´ llap´ıtja meg a rendszer:
59
+-----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+-----+---------+-------+ | Host | char(60) | | PRI | | | | Db | char(32) | | PRI | | | | Select_priv | enum(’N’,’Y’) | | | N | | | Insert_priv | enum(’N’,’Y’) | | | N | | | Update_priv | enum(’N’,’Y’) | | | N | | | Delete_priv | enum(’N’,’Y’) | | | N | | | Create_priv | enum(’N’,’Y’) | | | N | | | Drop_priv | enum(’N’,’Y’) | | | N | | | Grant_priv | enum(’N’,’Y’) | | | N | | | References_priv | enum(’N’,’Y’) | | | N | | | Index_priv | enum(’N’,’Y’) | | | N | | | Alter_priv | enum(’N’,’Y’) | | | N | | +-----------------+---------------+------+-----+---------+-------+
Ez a t´abla is tartalmaz privil´egiumokat, mivel ezeken kareszt¨ul azt tudjuk kontroll´alni, hogy egy adott sz´am´ıt´og´epr˝ol t¨ort´en˝o kapcsolat eset´en, mi enged´elyezett. N´ezz¨unk egy p´eld´at: mysql> SELECT Host, User, Password FROM user; +-----------+------+----------+ | Host | User | Password | +-----------+------+----------+ | | jim | h35472k | +-----------+------+----------+ mysql> SELECT Host, User, Db FROM db +------+------+-------+ | Host | User | Db | +------+------+-------+ | | jim | title | +------+------+-------+ mysql> SELECT Host, Db, Select_priv, Insert_priv FROM host +-------------------+-------+----------------+----------------+ | Host | Db | Select_priv | Insert_priv | +-------------------+-------+----------------+----------------+ | valami1.proba.com | title | Y | Y | +-------------------+-------+----------------+----------------+ | valami2.proba.net | title | Y | N | +-------------------+-------+----------------+----------------+ | tuzfall.proba.org | title | Y | Y | +-------------------+-------+----------------+----------------+ Ebben az esetben a jim nev˝u felhaszn´al´o csatlakozhat a title adatb´azishoz minden olyan sz´am´ıt´og´epr˝ol, ami fel van sorolva a host t´abl´aban. A privil´egiumoknak van egy harmadik szintj¨uk is. Az els˝o ellen˝orz´es a user t´abla alapj´an t¨ort´enik. Ha ez nem ad megfelel˝o jogosults´agot, akkor a db e´ s host t´abl´akat ellen˝orzi a rendszer. V´eg¨ul a tables_priv e´ s columns_priv t´abl´akkal ak´ar adott t´abl´ak adott oszlopaihoz val´o hozz´af´er´est lehet kontroll´alni. Az egyes t´abl´ak szerkezete: tables_priv: +-------------+---------------------------+ | Field | Type |
60
+-------------+---------------------------+ | Host | char(60) | | Db | char(60) | | User | char(16) | | Table_name | char(60) | | Grantor | char(77) | | Timestamp | timestamp(14) | | Table_priv | set(’Select’,’Insert’...) | | Column_priv | set(’Select’,’Insert’...) | +-------------+---------------------------+ columns_priv: +-------------+----------------------------------------------+ | Field | Type | +-------------+----------------------------------------------+ | Host | char(60) | | Db | char(60) | | User | char(16) | | Table_name | char(60) | | Column_name | char(60) | | Timestamp | timestamp(14) | | Column_priv | set(’Select’,’Insert’,’Update’,’References’) | +-------------+----------------------------------------------+
´ felhaszn´al´o hozz´aad´asa ism´et Uj Most hogy m´ar e´ rtj¨uk a hozz´af´er´es mechanizmust MySQL alatt n´ezz¨uk meg u´ jra a u´ j felhaszn´al´ok hozz´aad´as´at a MySQL rendszerhez. K´et lehet˝os´eg¨unk is van. Haszn´alhatunk egyszer˝u SQL parancsokat: INSERT, UPDATE e´ s DELETE, vagy haszn´alhatjuk a GRANT e´ s REVOKE parancs p´arost. A k¨ul¨onbs´eget a k¨ovetkez˝o p´eld´aval lehetne bemutatni: mysql> -> mysql> -> ->
INSERT INTO user (Host, User, Password) VALUES(’localhost’,’tom’,PASSWORD(’tommygun’)); INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) VALUES (’localhost’,’recipes’,’tom’,’Y’,’Y’,’Y’,’Y’,’N’,’N’);
aminek megfelel a k¨ovetkez˝o GRANT parancs: mysql> GRANT SELECT, INSERT, UPDATE, DELETE, ON recipes.* TO tom@localhost -> IDENTIFIED BY ’tommygun’; Itt fontos megjegyezni, hogy a GRANT e´ s REVOKE parancsok hat´as´ara a jogosults´agok azonnal aktiv´al´odnak, m´ıg a hagyom´anyos SQL parancsok eset´en u´ jra kell t¨olteni (reload) a szervert. Az u´ jrat¨olt´est k´etf´elek´eppen hajthatjuk v´egre, a shell-ben: $ mysqladmin reload vagy a mysql kliensben: mysql> FLUSH PRIVILEGES; GRANT parancs Az aktu´alis privil´egiumok kiirat´as´ara a k¨ovetkez˝o parancs haszn´alhat´o:
61
$ SHOW GRANTS; ... GRANT ALL PRIVILEGES ON *.* TO ’root’@’localhost’ IDENTIFIED BY PASSWORD ’...’ WITH GRANT OPTION A GRANT parancs szintakszisa: mysql>GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY ’password’] [, user_name [IDENTIFIED BY ’password’] ...] [WITH GRANT OPTION] Lehets´eges privil´egiumok (priv_type): • ALL PRIVILEGES : Szinte minden jogosults´agot megad, kiv´eve a vesz´elyesebbeket: FILE, PROCESS, RELOAD, SHUTDOWN. Ezeket explicit m´odon meg kell adni a felhaszn´al´onak. • ALTER : Jogosults´agot ad a t´abl´ak szerkezet´enek megv´altoztat´as´ara, de csak addig am´ıg az nem e´ rinti az indexeket. L´enyeg´eben az ALTER SQL parancs v´egrehajt´asa enged´elyezett ezzel a privil´egiummal. • CREATE : Ez a jogosults´ag enged´elyezi u´ j adatb´azisok e´ s t´abl´ak l´etrehoz´as´at am´ıg az nem e´ rinti az indexeket. L´enyeg´eben a CREATE SQL parancs v´egrehajt´asa enged´elyezett ezzel a privil´egiummal. • DELETE : Ez a jogosults´ag enged´elyezi sorok t¨orl´es´et t´abl´akb´ol, de nem engedi adatb´azisok t¨orl´es´ee. • DROP : Ez a jogosults´ag enged´elyezi adatb´azisok t¨orl´es´et, de indexeket nem. • FILE : Ez a jogosults´ag enged´elyezi, hogy a sz´am´ıt´og´epen file-okhoz f´erjen hozz´a az adott felhaszn´al´o. • INDEX : Ez a jogosults´ag enged´elyezi, hogy a felhaszn´al´o indexeket kezeljen, l´etrehozzon, t¨or¨olj¨on, stb. • INSERT : Ez a jogosults´ag enged´elyezi u´ j sorok beilleszt´es´et t´abl´akba. L´enyeg´eben az INSERT SQL parancs v´egrehajt´asa enged´elyezett ezzel a privil´egiummal. • PROCESS : Jogosults´agot ad a MySQL sz´alakhoz, bele´ertve azok le´all´ıt´as´at. P´eld´aul v´egrehajthatjuk a SHOW PROCESSLIST vagy KILL SQL parancsokat. • REFERENCES : Ennek nincs jelent˝os´ege MySQL alatt, csak az Oracle adatb´aziskezel˝ovel val´o kompatibilit´as miatt l´etezik. • RELOAD : Enged´elyezi a felhaszn´al´onak, hogy a cache-ben t´arolt adatokat u´ jraolvastassa az adatb´azisb´ol. • SELECT : A SELECT SQL parancs v´egrehajt´asa enged´elyezett ezzel a privil´egiummal. • SHUTDOWN : Enged´elyezi a felhaszn´al´onak az adatb´aziskezel˝o le´all´ıt´as´at. • UPDATE : Az UPDATE SQL parancs v´egrehajt´asa enged´elyezett ezzel a privil´egiummal. Ugyanakkor a felhaszn´al´o nem adhat hozz´a e´ s nem t¨or¨olhet adatot. • USAGE : A felhaszn´al´o csak bejelentkezhet a MySQL szerverre de semmi m´ast nem csin´alhat. A parancs meg´ert´es´enek egyik legjobb m´odszere a p´eld´ak haszn´alata:
62
mysql>GRANT usage ON *.* TO widgetAdmin@localhost ->IDENTIFIED BY ’ilovewidgets’; Ez a widgetAdmin-nak biztos´ıtja, hogy a localhost-r´ol, mag´ar´ol az adatb´azis szerverr˝ol, kapcsol´odjon az adatb´azishoz e´ s a jelsz´o a ilovewidgets lesz. Ez az utas´ıt´as csak a kapcsol´od´ast (usage) teszi lehet˝ove, semmi m´ast. Ugyanakkor minden adatb´azis minden t´abl´aj´ahoz kapcsol´odhat: *.* Ezut´an ha azt szeretn´enk, hogy ez a felhaszn´al´o a widgets adatb´azis minden t´abl´aj´ahoz hozz´af´erjen e´ s v´egrehajthasson SELECT, INSERT, UPDATE e´ s DELETE m˝uveleteket, akkor a k¨ovetkez˝o utas´ıt´ast kell kiadni: mysql>GRANT SELECT, INSERT, UPDATE, DELETE ->ON widgets.* TO widgetAdmin@localhost; REVOKE parancs A jogosults´agok visszavon´as´ara alkalmas parancs, a REVOKE szintakszisa: REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...] Egy dolgot az´ert e´ rdemes fejben tartani, hogy b´ar a REVOKE parancs minden privil´egiumot k´epes elvenni a felhaszn´al´ot´ol, de mag´at a felhaszn´al´ot nem t¨orli a MySQL adatb´azis rendszerb˝ol: mysql>REVOKE ALL PRIVILEGES ON widgets.* ->FROM widgetAdmin@localhost; A felhaszn´al´ot explicit m´odon kell t¨or¨olni: mysql>DELETE FROM user WHERE user = ’widgetAdmin’; Query OK, 1 row affected (0.00 sec) mysql>flush privileges;
8.9.4 Felhaszn´al´o a´ ltal szolg´altatott adatok Soha ne b´ızzunk a felhaszn´al´ot´ol sz´armaz´o adatokban! P´eld´aul tegy¨uk fel, hogy egy Web formon kereszt¨ul egy azonos´ıt´ot adhat meg a felhaszn´al´o, amit a program beilleszt egy SQL lek´erdez´esbe: SELECT * FROM tblname WHERE ID=456 A fenti p´eld´aban az azonos´ıt´o a 456 volt. Ez teljesen j´ol m˝uk¨odik, de mi van ha a felhaszn´al´o a k¨ovetkez˝ot g´epelte be: 456 OR 1=1 Ez a kifejez´es megv´altoztatja a lek´erdez´est: SELECT * FROM tblname WHERE ID=456 OR 1=1 Mivel az 1=1 mindig igaz lesz e´ s a k´et felt´etel k¨oz¨ott “vagy” kapcsolat van ez´ert ez a kifejez´es a teljes t´abl´at lek´erdezi. Ez nem csak adatv´edelmi probl´em´akat vet fel, hiszen ´ıgy minden adat l´athat´o lesz, hanem egy ilyen lek´erdez´es DOS (Denial-Of-Service) t´amad´asnak is megfelel, vagyis t´ul sokszor v´egrehajtva lass´ıthatja a szervert. A fenti probl´em´ara az egyik megold´as, hogy id´ez˝ojelet tesz¨unk a param´eter k¨or´e:
63
SELECT * FROM tblname WHERE ID=’456’ mert ebben az esetben a beg´epelt param´eter a sz¨oveg r´esze lesz e´ s nem pedig a kifejez´es r´esze: SELECT * FROM tblname WHERE ID=’456 OR 1=1’
8.9.5 H´al´ozati v´edelem A MySQL adatb´aziskezel˝o alap esetben a 3306-os porthoz kapcsol´odik, ez´ert mindenk´eppen e´ rdemes ezt a portot v´edeni a megfelel˝o t˝uzfal be´all´ıt´asokkal!!! P´eld´aul ellen˝orizhetj¨uk, hogy a porthoz lehet-e kapcsol´odni: $ telnet gep-neve 3306 Ha visszakapunk valamilyen karaktersorozatot, akkor kapcsol´odni lehet a porthoz.
8.9.6 root jelsz´o helyre´all´ıt´asa $ $ $ $ $
/etc/init.d/mysql stop mysqld_safe --skip-grant-tables --skip-networking & mysqladmin -u root password uj-jelszo kill %1 /etc/init.d/mysql start
A fenti parancsok a --skip-grant-tables opci´oval biztos´ıtjuk, hogy az adatb´azis szerver ne vegye figyelembe az adatb´azisban t´arolt jogosults´agokat. A --skip-networking opci´o pedig nem h´al´ozatos m´odban ind´ıtja el a szervert, hiszen jogosults´ag kezel´es n´elk¨ul a h´al´ozaton az adatb´azisunk nagy vesz´elyben lenne.
8.9.7 N´eh´any biztons´agi k´erd´es o¨ sszefoglal´asa • A MySQL szerver daemon-t mindig mysql felhaszn´al´ok´ent futtassuk e´ s ne root vagy nobody felhaszn´al´ok´ent. • A MySQL adatb´azisokat tartalmaz´o k¨onyvt´ar jogai legyenek: drwx------
e´ s a tulajdonosa a mysql felhaszn´al´o legyen. • Ha lehet ker¨ulj¨uk a “wildcard” karakter haszn´alat´at a sz´am´ıt´og´ep nevekben. Amennyire csak lehet, haszn´aljunk specifikus e´ s pontos g´ep neveket. • Grant_priv e´ s File_priv privil´egiumokat csak a root felhaszn´al´o birtokoljon. • A MySQL kliens ind´ıt´as´an´al figyelj¨unk arra, hogy a jelsz´ot ne a parancssorban adjuk meg. A rossz megoldas: $ mysql -u root -p valami
Ezzel az a probl´ema, hogy ebben az esetben a jelsz´o a parancssor r´esze e´ s l´athat´o p´eld´aul a ps parancs sz´am´ara vagy beker¨ul a .bash_history file-ba. A helyes ind´ıt´as:
64
$ mysql -u root -p
• A felhaszn´al´okat igyekezz¨unk korl´atozni egy-egy adatb´azisra vagy t´abl´ara. • V´eg¨ul csak a root felhaszn´al´o tudja olvasni e´ s m´odos´ıtani az hozz´af´er´es kontrollra haszn´alt t´abl´akat.
8.10 Adatb´azis ment´es e´ s vissza´all´ıt´as Fontos lehet az adatb´azisban t´arolt adatok elment´ese id˝oszakonk´ent (backup) e´ s azok vissza´all´ıt´asa. T¨obb m´odszer is l´etezik, ezekb˝ol t´argyalunk itt n´eh´anyat.
8.10.1 mysqldump program Ez az egyik legk´enyelmesebb m´odszer, b´ar val´osz´ın˝uleg nem a legjobb. A program el tud menteni egy, vagy t¨obb adatb´azist, illetve ak´ar specifikusan egy-egy t´abl´at. N´ezz¨unk n´eh´any vari´aci´ot: • Egy adatb´azis elment´ese: $ mysqldump [options] db_name • Egy adatb´azis t¨obb t´abl´aj´anak elment´ese: $ mysqldump [options] db_name tabla1 tabla2 tabla3 ... • T¨obb adatb´azis elment´ese: $ mysqldump [options] --databases [options] db_name1 db_name2 ... • Az o¨ sszes adatb´azis elment´ese: $ mysqldump [options] --all-databases [options] Az options opci´ok teljes list´aj´at a --help kapcsol´o seg´ıts´eg´evel lehet kilist´azni, de n´ezz¨unk meg k´et nagyon fontos opci´ot: • --no-create-info : Ezt a kapcsol´ot akkor haszn´aljuk ha csak az adatb´azis adatait akarjuk elmenteni, de az adatb´azis szerkezet´et nem. Vagyis olyan inform´aci´ora nincs sz¨uks´eg, amivel a t´abl´akat l´etre lehetne hozni. • --no-data : Az el˝oz˝o opci´o ford´ıtottja, hogy csak az adatb´azis szerkezet´et akarjuk elmenteni, vagyos hogy hogyan kell az adatt´abl´akat l´etrehozni e´ s mag´at az adatokat nem akarjuk elmenteni. P´eld´aul: $ mysqldump -u root -p --no-create-info widgets > widgets-backup.sql vagy $ mysqldump -u root -p --no-data widgets > widgets-backup.sql Ha az adatokat az´ert akarjuk elmenteni, hogy egy m´asik MySQL adatb´azisba beimport´aljuk, akkor e´ rdemes a --opt kapcsol´ot haszn´alni, ami optimaliz´alt m´odon ´ırja ki az adatokat e´ s ´ıgy gyorsabban lehet majd az adatokat visszaolvasni: $ mysqldump -u root -p --opt widgets > widgets-backup.sql
65
Adatb´azis vissza´all´ıt´as Az adatb´azis vissza´all´ıt´as´ara a mysql kliens haszn´alhat´o: $ mysql -u user-id -p < backup.sql
8.11 Loggol´as A MySQL adatb´aziskezel˝o rendszer az “esem´enyeket”, k¨ul¨onb¨oz˝o file-ba r¨ogz´ıti, t´arolja, loggolja: error : Az elind´ıtott mysqld_safe daemon szabv´anyos hiba kimenete ebbe a file-ba ker¨ul. A file neve mindig a g´ep neve e´ s az err kiterjeszt´es, p´edl´aul: hostnev.err . A file szint´en tartalmaz bejegyz´eseket minden daemon ind´ıt´asr´ol e´ s le´all´ıt´asr´ol. bin´aris log : A bin´aris log minden olyan SQL parancsot t´arol, amelyik adatot friss´ıt vagy megv´altoztat. (Ha egy t¨orl˝o parancs nem v´altoztat meg semmit, akkor nem ker¨ul be ebbe a file-ba.) A parancsokat a v´egrehajt´as sorrendj´eben t´erolja. A bin´aris log file j´ol haszn´alhat´o, mint egy biztons´agi ment´es. P´eld´aul ha minden nap elmentj¨uk az adatb´azisunkat e´ s valamelyik nap k¨ozben megs´er¨ul az adatb´azis, akkor csak helyre kell a´ ll´ıtani az el˝oz˝o napi a´ llapotot, majd az aznapi bin´aris log-ban tal´alhat´o m˝uveleteket v´egrehajtani e´ s megkapjuk az utols´o “j´o” a´ llapot´at az adatb´azisnak. Ha a szervert a --log-bin=file opci´oval ind´ıtjuk el, akkor a file-ba ´ırja az esem´enyeket a rendszer. Val´oj´aban nem csak egy file-t haszn´al az adatb´aziskezel˝o rendszer hanem a file v´eg´ehez egy sz´amot illesztve t¨obbet is, p´eld´aul: file.1 file.2 e´ s ´ıgy tov´abb. Az´ert kell t¨obb file, mert p´eld´aul ha t´ul nagy lenne a file m´erete akkor egy u´ jabbat kell kezdeni. Az adatb´aziskezel˝o ezen k´ıv¨ul l´etrehoz egy index file-t ami az o¨ sszes bin´aris log file nev´et tartalmazza. Az index file hely´et az --log-bin-index=file opci´o adja meg. P´eld´aul: $ ls -l /opt/var/mysql ... -rw-rw---- 1 mysql mysql -rw-rw---- 1 mysql mysql -rw-rw---- 1 mysql mysql -rw-rw---- 1 mysql mysql -rw-rw---- 1 mysql mysql ...
19060 736010 5000 125 125
2009-10-12 2009-10-12 2009-10-12 2009-10-12 2009-10-12
10:20 12:20 20:20 22:20 22:20
mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.000004 mysql-bin.index
A bin´aris log file-okat a mysqlbinlog paranccsal lehet megn´ezni, p´eld´aul: $ mysqlbinlog mysql-bin.000003 # at 4 #010805 17:06:00 server id 1 Start: binlog v 1, server 5.1.39-log created 091011 17:06:00
Illessz¨unk be adatot: $ mysql mysql> USE test; mysql> INSERT INTO test ( object_id, object_title ) VALUES (1, ’test’); Query OK, 1 row affected (0.02 sec) mysql> QUIT;
66
Bye $
e´ s n´ezz¨uk meg a bin´aris log file-t $ mysqlbinlog mysql-bin.000003 # at 4 #010805 17:06:00 server id 1 Start: binlog v 1, server 5.1.39-log created 091011 17:06:00 #010805 17:39:38 server id 1 Query thread_id=2 exec_time=0 error_code=0 USE test; SET TIMESTAMP=1255306458; INSERT INTO test ( object_id, object_title ) VALUES (1, ’test’); $
Ha u´ j log file-t akarunk kezdeni, akkor a k¨ovetkez˝o parancsot haszn´alhatjuk: $ mysqladmin -u root -p flush-logs
Ha a bin´aris logb´ol akarjuk u´ jra l´etrehozni az adatb´azist, akkor a kliensnek a´ t kell adni a file tartalm´at: $ mysqlbinlog mysql-bin.000003 | mysql
lassu´ lek´erdez´es log : (slow query log) Ez a file azokat az SQL parancsokat tartalmazza amelyek tov´abb tartanak mint a long_query_time param´eter a´ ltal megadott id˝o. Ez a log hasznos lehet arra, hogy azonos´ıtsuk az adatb´azis azon r´eszeit amelyek a lass´u v´egrehajt´ast okozz´ak e´ s amelyeket tuningolni kellene. A log file l´etrehoz´as´at a --log-slow-queries=file opci´oval lehet megadni.
8.12 Replik´aci´o 8.13 Kluszterez´es 8.14 Adatb´azis optimaliz´al´as
67
68
9. Fejezet
Apache web szerver 9.1 Bevezet´es e´ s alapok 9.1.1 Mit csin´al a web szerver? A web szerverek l´enyege, hogy egy URL-t filen´evre transzform´aljuk, majd a file tartalm´at visszak¨uldj¨uk a kliensnek az Interneten. Az URL-b˝ol nem csak file n´ev lehet, hanem egy program neve is, ami majd gener´alja azt az adatot, amit visszak¨uld a szerver a kliensnek. Az URL jelent´ese: Uniform Resource Locator e´ s h´arom r´eszb˝ol a´ ll: <s´ ema>:///<´ utvonal> A web oldalak eset´en a s´ ema a http. A HTTP jelent´es: Hypertext Transfer Protocol. A host a g´ep neve, p´eld´aul: www.index.hu, de lehet IP c´ım is. Az path pedig az el´er´esi u´ t a file-hoz vagy k¨onyvt´arhoz. Alap esetben ez csak a f˝ok¨onyvt´ar: /.
9.1.2 Mit csin´al a web kliens? A web kliensnek egyszer˝u dolga van, mert csak azt kell elk¨uldenie, hogy melyik file-t, tartalmat akarja lek´erdezni. Ennek form´atuma: http://<user>:<jelsz´ o>@:<port>/<path> ´ aban csak a host-ot e´ s a Az RFC 1738-as dokumentum szerint ebb˝ol t¨obb r´esz is elhagyhat´o. Altal´ path-t szoktuk megadni, p´eldu´al: http://www.index.hu/ Amikor web kliens megkapja a c´ımet, akkor els˝o l´ep´esben meghat´arozza, hogy a www.index.hu c´ımnek milyen IP sz´am felel meg. (DNS-t haszn´alva.) Ezen az IP c´ımen lev˝o sz´am´ıt´og´epet sz´ol´ıtja meg a kliens. Mivel a c´ım nem tartalmaz portra vonatkoz´o adatot ez´ert az alap e´ rt´eket haszn´alja a kliens, a 80-as portot. Ezut´an a kliens TCP kapcsolatot nyit e´ s a k¨ovetkez˝o u¨ zenetet k¨uldi: GET /vala/hol/index.html HTTP/1.0 A k´er´esre a web szerver elk¨uldi a v´alasz tartalmat, majd lez´arja a kapcsolatot. Pr´ob´aljuk ki: telnet www.apache.org 80 GET http://www.apache.com/index.html HTML/1.1
69
Trying 64.125.133.20... Connected to www.apache.org. Escape character is ’ˆ]’. HTTP/1.1 200 OK Date: Mon, 25 Feb 2002 15:03:19 GMT Server: Apache/2.0.32 (Unix) Cache-Control: max-age=86400 Expires: Tue, 26 Feb 2002 15:03:19 GMT Accept-Ranges: bytes Content-Length: 4946 Content-Type: text/html <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> ... ... Az´ert e´ rdemess a telnet programot haszn´alni, mert a port sz´am is megadhat´o. Ugyanakkor bizonyos telnet programok nem ´ırj´ak ki azt amit beg´epel¨unk, ´ıgy erre figyelj¨unk. A GET sor beg´epel´ese ut´an egy sor adatot fogunk kapni.
9.1.3 Mi´ert az Apache? Manaps´ag az Apache a legeltejedtebb web szerver az Interneten. A piaci r´eszesed´ese legal´abb k´etszer akkor mint az ut´ana k¨ovetkez˝o szoftver´e. R´aad´asul az Apache open-source software, vagyis a forrs´ak´odot b´arki megn´ezheti e´ s saj´at ig´enyei szerint m´odos´ıthatja. Az Apache nagyon sokf´ele ig´enyt ki tud el´eg´ıteni. Alkalmas olyan web oldal megjelen´ıt´es´ere ami csak statikus r´eszekb˝ol a´ ll, de dinamikus tartalom is megjelen´ıthet˝o.
9.1.4 Az Apache web szerver Az Apache Web szerver futtathat´o programja a httpd, ami a´ ltal´aban a h´att´erben fut. Minden web szerver egy adott k¨onyvt´arb´ol szolg´alja ki a file-okat. A web szervernek a´ ltal´aban n´egy f˝o k¨onyvt´ara van: conf : A konfigur´aci´os file-okat tartalmaz´o k¨onyvt´ar. A file-okb´ol a legfontosabb a httpd.conf file, ami “A konfigur´aci´os file”. P´eld´aul ez a file adja meg, hogy melyik k¨onyvt´arb´ol szolg´aljuk ki a web oldalakat. htdocs : Ez a k¨onyvt´ar tartalmazza a HTML oldalakat. Term´eszetesen a k¨onyvt´aron bel¨ul lehetnek alk¨onyvt´arak is, amiben tov´abbi HTML oldalak lehetnek. Mivel mindenki hozz´af´erhet ehhez r´eszhez, ´ıgy k¨ul¨on¨osen figyelni kell erre a r´eszre biztons´agi szempontb´ol. logs : A log file-okat tartalmazza. File-ban r¨ogz´ıt¨unk minden oldalhoz val´o hozz´af´er´est. cgi-bin : A CGI szkripteket tartalmazza ez a k¨onyvt´ar. A szkripteket a web szerver hajtja v´egre e´ s az eredm´enyt k¨uldi vissza a kliensnek. Szint´en k¨ul¨on¨os odafigyel´est ig´enyel biztons´agi szempontb´ol.
70
9.2 Install´al´as K´etf´ele m´odon lehet az Apache web szervert felinstall´alni. Az egyik a “f´el manu´alis” a m´asik az “egyszer˝us´ıtett” (Out of the box) m´odszer. Mind a k´et m´odszer sor´an shell scriptek futnak le e´ s Makefile-okat hoznak l´etre. Ezeket a Makefile-okat haszn´alja a make parancs, hogy leford´ıtsa a rendszert.
˝ ıtett install´al´as forr´asb´ol 9.3 Egyszerus´ Miut´an let¨olt¨ott¨uk a forr´as k´odot e´ s kit¨om¨or´ıtett¨uk egy k¨onyvt´arba, a program ford´ıt´asa h´arom sorban megoldhat´o. Ugyanakkor fontos, hogy a ford´ıt´ast root felhaszn´al´ok´ent v´egezz¨uk el, mivel ha egyszer˝u felhaszn´al´ok´ent v´egezz¨uk a sz´am´ıt´ast akkor a web szerver a 8080 porton fog kommunik´alni. R´aad´asul ebben az esetben a web szerver a 80-as port haszn´alat´at kifejezetten nem engedi! A rendszer ford´ıt´as´ahoz sz¨uks´eges h´arom sor: $ ./configure $ make $ make install Ha minden j´ol ment akkor a /usr/local/bin k¨onyvt´arban megtal´aljuk a web szerver programot: httpd. Az install´al´as ut´an megn´ezhetj¨uk, hogy milyen k¨onyvt´arakba m´asoltunk, install´altunk file-okat a k¨ovetkez˝o m´odon: $ ./configure --show-layout > elrendezes A leford´ıtott modulok list´aj´at a httpd -l paranccsal kaphatjuk meg.
9.4 Manu´alis install´al´as forr´asb´ol El˝osz¨or is olvassuk el a forr´as k¨onyvt´arban a README file-t e´ s e´ s a src k¨onyvt´arban az INSTALL file-t. A k´et file tartalmazza a r´eszletes instrukci´okat a web szerver leford´ıt´as´ahoz. K¨ovetkez˝o l´ep´es, hogy a src/Configuration.tmpl file-t m´asoljuk a´ t Configuration file-ba. Ezt a file-t kell szerkeszteni, hogy a ford´ıt´ashoz mindent be´all´ıtsunk. A Configuration file-ban o¨ t dolog tal´alhat´o: 1. A megjegyz´esek a # karakterrel kezd˝odnek. 2. A szab´alyok, amik a Rule sz´oval kezd˝odnek. 3. A parancsok, amiket majd be kell illeszteni a Makefile file-ba. Ezek a sorok semmilyen speci´alis karakterrel nem kezd˝odnek. 4. Modul v´alaszt´as. Ezek a sorok a AddModule kulcssz´oval kezd˝odnek e´ s azt adj´ak meg, hogy mely modulokat kell bekapcsolni e´ s leford´ıtani. 5. Az opcion´alis modulok eset´en a sor a %Module sz´oval kezd˝odik. Ezeket a modulokat le kell ford´ıtani, de nem kell bekapcsolni, majd csak k´es˝obb.
9.4.1 Modulok kiv´alaszt´asa A k¨ovetkez˝o lista felsorol n´eh´any az alap esetben bekapcsolt modulokb´ol. Ezeket a sorokat ki kell kommentezni a Configuration file-ban.
71
AddModule modules/standard/mod env.o Ez a modul be´all´ıtja azokat a k¨ornyezeti v´altoz´okat amelyeket a CGI scripteknek ad a´ t a rendszer. AddModule modules/standard/mod log config.o Ez a modul meghat´arozza e´ s konfigur´alja a loggol´ast. AddModule modules/standard/mod mime magic.o Ez a modul hat´arozza meg a file-ok t´ıpus´at. AddModule modules/standard/mod mime.o Ez a modul adja meg, hogy melyik file kiterjeszt´eshez milyen file tartalom tartozik. AddModule modules/standard/mod cgi.o Ez a modul hajtja v´egre a CGI scripteket. AddModule modules/standard/mod imap.o Ez a modul hajtja v´egre a k´ep t´erk´epeket (imagemap). AddModule modules/standard/mod alias.o Ez a modul biztos´ıtja az URL ford´ıt´as e´ s a´ tir´any´ıt´as lehet˝os´eg´et. AddModule modules/standard/mod rewrite.o Ez a modul biztos´ıtja az URL u´ jra´ır´ast. AddModule modules/standard/mod access.o Ez a modul teszi lehet˝ov´e az egyes web oldalak hozz´af´er´es v´edelm´et. AddModule modules/standard/mod auth.o Ez a modul biztos´ıtja az authentik´aci´o lehet˝os´eg´et. K´es˝obb amikor a konfigur´aci´os file-okat k´esz´ıtj¨uk, figyelembe lehet venni, hogy az adott modul r´esze-e a rendszernek, p´eld´aul: ... LogFormat "host %h, user %u, time %t, request %r, status %s" ... Ezek a konfigur´aci´os file-ok ´ıgy rendszerr˝ol rendszerre m´asolhat´ok, mivel a file figyelembe veszi a modul l´etez´es´et vagy hi´any´at.
9.4.2 Egy´eb be´all´ıt´asok Ha a ford´ıt´as sor´an extra be´all´ıt´asokat szeretn´enk tenni, vagy extra k¨onyvt´arat szeretn´enk megadni, akkor a k¨ovetkez˝o opci´ok haszn´alhat´ok a Configuration file-ban. EXTRA_CFLAGS= EXTRA_LDFLAGS= EXTRA_LIBS= EXTRA_INCLUDES= A Configuration file-ban n´eh´any egzotikus be´all´ıt´as is megadhat´o szab´alyok (Rule) seg´ıts´eg´evel.
9.4.3 Ford´ıt´asi folyamat A Configuration file be´all´ıt´asai ut´an, root-k´ent a k¨ovetkez˝o parancsot kell kiadni: $ ./Configure aminek hat´as´ara valami hasonl´ot fogunk kapni
72
Using config file: Configuration Creating Makefile + configured for FreeBSD platform + setting C compiler to gcc + Adding selected modules o status_module uses ConfigStart/End: o dbm_auth_module uses ConfigStart/End: o db_auth_module uses ConfigStart/End: o so_module uses ConfigStart/End: + doing sanity check on compiler and options Creating Makefile in support Creating Makefile in main Creating Makefile in ap Creating Makefile in regex Creating Makefile in os/unix Creating Makefile in modules/standard Creating Makefile in modules/proxy Ezut´an m´ar le lehet ford´ıtani a web szervert: $ make
˝ odtet´es´enek alapjai 9.5 Apache muk¨ 9.5.1 Apache futtat´asa A web szervert akkor lehet futtatni, ha van site (web oldalak sorozata) amit meg lehet jelen´ıteni. Ha l´etrehozunk egy k¨onyvt´arat a site sz´am´ara, akkor annak h´arom alk¨onyvt´arat kell tartalmaznia: conf, logs e´ s htdocs. A conf konfigur´aci´os k¨onyvt´arban h´arom konfigur´aci´os file is lehet: srm.conf, access.conf e´ s httpd.conf. A be´all´ıt´asok maradhatnak ebben a h´arom file-ban, de a jelenleg e´ rv´enyes strat´egia szerint a h´arom file-t o¨ ssze szokt´ak f˝uzni egy file-ba: httpd.conf. ´Igy k¨onnyebb kezelni e´ s biztons´agosabb is. M´eg egy fontos megjegyz´es! Az Apache szerver egy igen nagy e´ s komplik´alt konfigur´aci´os fileal e´ rkezik. A kezd˝o felhaszn´al´oknak el´eg neh´ez a´ tl´atni e´ s meg´erteni az opci´okat ebben a file-ban. Az u´ j felhaszn´al´ok a´ ltal´aban azt szokt´ak csin´alni, hogy ezt a file-t m´odos´ıtgatj´ak. K´es˝obb ezeket a ´ ez m´odos´ıt´asokat elfelejthetj¨uk e´ s az o¨ sszetetts´eg miatt nem is biztos, hogy ki lehet majd bogozni. Igy egy nagyon rossz strat´egia! A legjobb m´odszer az, hogy egy minim´alis konfigur´aci´os file-al kezdj¨unk e´ s csak azokat a be´all´ıt´asokat adjuk hozz´a amikre felt´etlen¨ul sz¨uks´eg van. A web szerver elind´ıt´as´an´al megadhatjuk, hogy melyik site-ot szolg´alja ki a web szerver e´ s melyik konfigur´aci´os file-t haszn´alja: $ httpd -f /usr/local/conf/httpd.conf -d /usr/local/www/siteom Ha nem akarjuk mindig parancssorb´ol ind´ıtani a web szervert, akkor ´ırhatunk egy script-et is: % cat > /usr/local/bin/go test -d logs || mkdir logs httpd -f ’pwd’/conf/httpd.conf -d ’pwd’ ˆd Ez a script felt´etelezi, hogy a site f˝o k¨onyvt´ar´aban futtatjuk le.
73
9.5.2 Apache le´all´ıt´asa A web szervert t¨obbf´elek´eppen lehet le´all´ıtani. Az egyik lehet˝os´eg, hogy a fut´o processzusok k¨oz¨ul kikeress¨uk a web szerver processzusait e´ s azokat a´ ll´ıtjuk le: $ ps -fe | grep httpd $ kill PID Linuxon a k¨ovetkez˝o parancs is haszn´alhat´o: $ killall httpd vagy a fut´o web szerver processz ID-j´et egy file is tartalmazza, amit szint´en felhaszn´alhatunk a le´all´ıt´asra: $ kill ‘cat /usr/localwww/siteom/logs/httpd.pid‘ V´eg¨ul az apachectl program is haszn´alhat´o a web szerv elind´ıt´as´ara vagy le´all´ıt´as´ara.
9.5.3 A szervert futtat´o felhaszn´al´o Fontos, hogy a web szert ne futtassuk root vagy nobody felhaszn´al´ok´ent. Mind a k´et eset biztons´agi r´est jelent a rendszeren. 1 A legbiztons´agosabb megold´as, hogy l´etrehozunk egy felhaszn´al´ot e´ s egy csoportot. A csoportnak csak ez a falhaszn´al´o legyen a tagja. P´eld´aul: $ groupadd webuser $ useradd -g webuser webuser A felhaszn´al´ot a´ ll´ıtsuk u´ gy be, hogy senki ne tudjon ezzel az azonos´ıt´oval bel´epni. P´eld´aul adjunk meg valami nagyon bonyolult e´ s hossz´u jelsz´ot, vagy alkalmazzuk valamelyik m´odszert a 4. fejezetb˝ol. Ezen k´ıv¨ul a felhaszn´al´onak csak olyan file-okhoz legyen hozz´af´er´esi joga, amit el´erhet˝ov´e akarunk tenni a k¨ulvil´ag fel´e. Az oper´aci´os rendszer ut´an a web szervernek is meg kell mondani, hogy ez a felhaszn´al´o futtassa a web szervert. A httpd.conf konfigur´aci´os file-ban a k¨ovetkez˝oket kell be´all´ıtani: User webuser Group webgroup
9.6 Apache be´all´ıt´asai, konfigur´aci´ok 9.6.1 Alap be´all´ıt´asok A httpd.conf konfigur´aci´os file-ban tov´abbi be´all´ıt´asokat lehet tenni: • Meg kell adni a web szervert futtat´o g´ep nev´et ServerName • Meg kell adni annak a k¨onyvt´arnak a nev´et is, ahol a site file-jai tal´alhat´ok. Ezt az u´ tvonalat fogja a web szerver minden k´ert file-hoz hozz´af˝uzni. 1 A +nobody+ felhaszn´ al´oval p´eld´aul az a probl´ema, hogy m´as rendszer komponenseket is ezzel a felhaszn´al´oval futtatunk e´ s ha azok egyik´et valaki felt¨ori, akkor hozz´af´er´ese lesz a web szerverhez is.
74
DocumentRoot <path> • A konfigur´aci´os e´ s log file-ok hely´et a ServerRoot opci´oval lehet megadni: ServerRoot <path> • A hiba log file neve is k¨ul¨on megadhat´o. Ez a file fogja tartalmazni a bejegyz´eseket a k¨ul¨onb¨oz˝o hib´akr´ol, p´eld´aul ha nem tal´alhat´o egy web lap. ErrorLog • A r´egebbi Apache szerverek eset´en automatikusan j¨ott l´etre az a log file, ami a lek´ert oldalakat, illetve a lek´er´eseket tartalmazza. Ez a file a log/access_log volt. Az u´ jabb Apache szervereken (v2) ezt a log file-t explicit m´odon meg kell adni: TransferLog • A fut´o web szerver processzus´anak azonos´ıt´o sz´am´at (PID) a rendszer szint´en egy file-ban t´arolja. A file nevet a k¨ovetkez˝ok´eppen lehet megadni: PidFile • Az Apache v2 megk¨oveteli azt is, hogy megadjuk, hogy a web szerver melyik porton v´arja a k´er´eseket. A host n´ev is megadhat´o ebben az esetben. Ez a prefer´alt opci´o a BindAddress e´ s Port opci´okkal szemben. Listen • A r´egebbi web szervereken ha azt akartuk, hogy a web szerver ne minden IP c´ımen v´egezzen kiszolg´al´ast, hanem csak egy adott c´ımen, akkor a BindAddress opci´ot kellett haszn´alni. Az Apache v2-ben a Listen opci´ot kell haszn´alni. • A Port opci´o t¨obbf´ele helyzetben haszn´alhat´o. Ha a opci´on k´ıv¨ul haszn´aljuk e´ s a BindAddress illetve Listen opci´ok nincsennek megadva, akkor ennek a seg´ıts´eg´evel lehet megadni a portot, amin az Apache web szerver v´arja a k´er´eseket. Ha ezt az opci´ot a -on bel¨ul haszn´aljuk, akkor a web szerver ezt a portot fogja haszn´alni amikor a szerver saj´at maga sz´am´ara gener´al URL-t. (Ez nem azt a portot adja meg, amelyiken a web szerver v´alaszol a kliensnek, mivel az a port a -on bel¨ul van defini´alva.) Az al´abbiakban egy p´elda konfigur´aci´os file tal´alhat´o: ServerName Listen DocumentRoot ServerRoot TransferLog ErrorLog PidFile
www.index.hu 80 /usr/local/www/site/htdocs /usr/local/www/site/ /usr/local/www/site/logs/access.log /usr/local/www/site/logs/error.log /usr/local/www/site/logs/httpd.pid
9.6.2 Blokk direkt´ıv´ak Az Apache web szervernek t¨obb olyan blokk direkt´ıv´aja van, amelyek a t¨obbi opci´o alkalmaz´as´at korl´atozza p´eld´aul host-okra, k¨onyvt´arakra e´ s file-okra. A blokk direkt´ıv´ak list´aja: •
75
• • • A lista azt a sorrendet is mutatja, hogy milyen sorrendben ´ırj´ak fel¨ul e´ s sz˝uk´ıtik az alkalmaz´asukat. P´eld´aul a blokkban megadott opci´ok k¨onyvt´arakra vonatkoznak, amiket fel¨ul ´ırhatnak a blokkban megadott opci´ok, amiket fel¨ul ´ırhatnak a blokkban megadott opci´ok. blokk direkt´ıva A blokk direkt´ıva k¨onyvt´arakra vagy k¨onyvt´arak csoportjaira vonatkoz´o opci´okat tartalmaz. Szintakszisa: ... Egy dolgot nagyon fontos meg´erteni, hogy a dir az abszol´ut u´ tvonalra vonatkozik, ´ıgy a fejl´ec a f˝ok¨onyvt´arra vonatkozik e´ s nem a DocumentRoot k¨onyvt´arra. A dir hely´en “wildcard” karakter is szerepelhet: ? egy karakterre illeszkedik, * b´armilyen karaktersorozatra illeszkedik e´ s a [ ] pedig karakter tartom´anyra illeszkedik. Ha a dir el˝ott egy ˜ karakter szerepel akkor ut´ana teljes regul´aris kifejez´es haszn´alhat´o. A jelent´ese megegyezik a kifejez´essel, ´ıgy p´eld´aul az al´abbi k´et kifejez´es ugyanaz: ami egyenl˝o ezzel: ami azt jelenti, hogy b´armilyen karakterrel kezd˝od˝o k¨onyvt´ar n´evre illeszkedik. blokk direkt´ıva A file-okra vonatkoz´o opci´okat fog o¨ ssze. Szintakszisa: ... ahol viszont a file a DocumentRoot k¨onyvt´arhoz k´epesti relat´ıv u´ tvonalat, illetve file-t ad meg! It is igaz, hogy ha a ˜ karakter szerepel a Files ut´an akkor ut´ana teljes regul´aris kifejez´es haszn´alhat´o. Ezen k´ıv¨ul ebben az esetben is haszn´alhat´o a opci´o. P´eld´aul a grafikus file-okra vonatkoz´o opci´ok: Ez az opci´o haszn´alhat´o a .htaccess file-okon bel¨ul, m´ıg a e´ s a nem.
76
blokk direkt´ıva A URL-ekre vonatkoz´o opci´okat fog o¨ ssze. Szintakszisa: ... blokk direkt´ıva Az a blokk direkt´ıva bekapcsol bizonyos opci´okat, amikor a web szervert a -D nev m´odon ind´ıtjuk el. Szintakszisa: ... Ennek a direkt´ıv´anak a seg´ıts´eg´evel egy konfigur´aci´os file-ban t¨obb konfigur´aci´o is elt´arolhat´o. P´eld´aul ez alkalmas tesztel´esi opci´ok megad´as´ara. blokk direkt´ıva Ez a direkt´ıva az a´ ltala befoglalt opci´okat kapcsolja be, ha az adott modul el´erhet˝o a web szerverben. Szintakszisa: ... A felki´allt´ojel tagad´ast jelent, vagyis arra az esetre vonatkozik ha a modul nincs bet¨oltve.
9.6.3 Tov´abbi opci´ok ServerName Az opci´o seg´ıts´eg´evel megadhat´o az a n´ev, amit a web szerver visszak¨uld a kliensnek. Ha nem adn´ank meg, akkor a web szerver megpr´ob´alja kital´alni a nevet a g´ep IP c´ım´eb˝ol. P´elda a haszn´alatra: ServerName www.pelda.hu Ha valaki a ez.pelda.hu oldalt k´eri le, akkor a szerver a fenti opci´o kiad´as´aval a www.pelda.hu nevet fogja visszaadni a kliensnek.
9.7 Virtu´alis host-ok El˝ofordulhat, hogy t¨obb web szervert szeretn´enk u¨ zemeltetni. P´eld´aul u´ j kutat´ocsoport j¨on l´etre az egyetemen, vagy egy c´egn´el a m´ern¨ok¨ok mellett marketing oszt´aly is l´etrej¨on. K´et alapvet˝o megold´as lehets´eges: 1. Futtassunk egy web szervert, amely t¨obb virtu´alis oldalt szolg´al ki. Ez a leggyakoribb megold´as. 2. K´et web szervert futtatunk egy sz´am´ıt´og´epen e´ s mindegyik egy site-ot szolg´al ki. Ez a fejezet az els˝o megold´assal foglalkozik.
77
9.7.1 N´ev alapu´ virtu´alis host-ok Ebben az esetben a sz´am´ıt´og´epnek egy IP c´ıme van, de erre az IP c´ımre t¨obb n´ev is regisztr´alva van a DNS-ben. A kliensek ezek k¨oz¨ul a nevek k¨oz¨ul b´armelyiket “megsz´ol´ıthatj´ak” e´ s k¨ul¨onb¨oz˝o web oldalra ker¨ulnek. A legfontosabb dolog a k¨ovetkez˝o opci´o megad´asa a konfigur´aci´os file-ban: NameVirtualHost cim[:port] A cim egy IP c´ım, amihez egy port sz´amot is megadhatunk opcion´alisan. Ezt az opci´ot k¨oveti t¨obb szekci´o, amelyeken bel¨ul ServerName opci´onak is szerepelnie kell. B´ar u´ gy t˝unik a ServerName opci´o azonos´ıtja a host-ot, de val´oj´aban a ut´ani n´ev azonos´ıtja, a ServerName opci´o azt a nevet adja meg amit a web szerver visszak¨uld a kliensnek. ¨ Osszefoglalva l´enyeget, ez a lehet˝os´eg az IP c´ımet “n´ev alapj´an osztjuk fel”. N´ezz¨unk egy p´eld´at, ami egy konfigur´aci´os file r´eszlete: NameVirtualHost 192.168.123.2 ServerName www.pelda.com ServerAdmin valaki@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/vevok ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log ServerName sales.pelda.com ServerAdmin sales@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/salesmen ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log Fontos, hogy b´ar a web oldalakat k¨ul¨onb¨oz˝o helyr˝ol szolg´alja ki a web szerver a log-ok ak´ar k¨oz¨os file-ba is ker¨ulhetnek.
9.7.2 IP c´ım alapu´ virtu´alis host-ok B´ar a j¨ov˝oben val´osz´ın˝uleg a n´ev alap´u virtu´alis host lesznek a legelterjedtebbek ma m´eg sok web site haszn´alja az IP c´ım alap´u virtu´alis host-okat. Ebben az esetben nem kell a NameVirtualHost opci´o. Az el˝oz˝o p´elda most a k¨ovetkez˝ok´eppen n´ezne ki: ServerName www.pelda.com ServerAdmin valaki@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/vevok ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log ServerName sales.pelda.com ServerAdmin sales@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/salesmen
78
ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log
9.7.3 N´ev e´ s IP c´ım alapu´ virtu´alis host-ok A fenti k´et m´odszer keverhet˝o is: NameVirtualHost 192.168.123.2 ServerName www.pelda.com ServerAdmin valaki@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/vevok ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log ServerName sales.pelda.com ServerAdmin sales@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/salesmen ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log ServerName sales-IP.pelda.com ServerAdmin sales@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/salesmen ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log Az els˝o k´et web oldalt a n´ev alapj´an e´ s a NameVirtualHost opci´o alapj´an szolg´alja ki a web szerver, m´ıg a sales-IP.pelda.com web oldalhoz a k´er´est a harmadik VirtualHost opci´o alapj´an szolg´alja ki a web szerver. Ebben az esetben fontos, hogy az IP c´ım alap´u virtu´alis host az utols´o a konfigur´aci´os file-ban. Erre az´ert van sz¨uks´eg, mert a NameVirtualHost opci´o az els˝o k´et virtual host-ra vonatkozik, ´ıgy ha azok nem a keresett host-ok, akkor a k´er´es sor´an “´atesik” a harmadik opci´ora, ami m´ar IP alap´u virtual host defin´ıci´o.
9.7.4 Port alapu´ virtu´alis host-ok Ez a megold´as hasonl´ıt az IP alap´u virtual host m´odszerhez. El˝onye, hogy nem kell t¨obb IP c´ımet vagy nevet haszn´alni, hanem csak egy IP c´ımre van sz¨uks´eg. H´atr´anya, hogy az emberek nem szeretnek “mindenf´ele” portot megadni a web oldal el´er´eshez. P´eld´aul: Listen 80 Listen 8080 ServerName www.pelda.com
79
ServerAdmin valaki@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/vevok ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log ServerName sales.pelda.com ServerAdmin sales@pelda.com DocumentRoot /usr/www/site.virtual/htdocs/salesmen ErrorLog /usr/www/site.virtual/nev-alapu/logs/error_log TransferLog /usr/www/site.virtual/nev-alapu/logs/access_log
80
10. Fejezet
DNS szolg´altat´as A DNS jelent´ese: Domain Name Service vagyis domain n´ev szolg´altat´as. A n´ev szolg´altat´ast szinte kiz´ar´olag a BIND programmal v´egzik az Interneten. A BIND is egy r¨ovid´ıt´es: Berkeley Internet Name Daemons. A BIND program jelenlegi verzi´oja 9.
10.1 Domain nevek Az Internet domain-ekb˝ol a´ ll, amelyek hierarchi´aba rendez˝odnek. Legfel¨ul a root domain van. Ebben is nagyon hasonl´ıt l´enyeg´eben egy Unix file rendszerhez. A 10.1. a´ bra mutat egy p´elda hierarchi´at. A domain neveket a specifikust´ol az a´ ltal´anos fel´e ´ırjuk, p´eld´aul: www.pmmf.hu. A pmmf.hu domainben van egy www e´ s egy mail szerver, m´ıg hu domain-nek t¨obb al-domainje is van. Ezeket a neveket nem szokt´ak FQDN (fully qualified domain name) form´atumban megadni: "www"."pmmf"."hu"."" A fenti ´ır´asm´odban az´ert haszn´aljuk a dupla aposztrofot, hogy hangs´ulyozzuk, hogy a v´eg´en ott a root ´ aban nem ´ıgy szoktuk csom´opont. A root csom´opont a "" (null) e´ s az elv´alaszt´o jel a pont (.). Altal´ le´ırni a domain nevet, hanem: www.pmmf.hu Itt azt vegy¨uk e´ szre, hogy a pont elt˝unt a v´eg´er˝ol!
“”
org
hu
pte
pmmf
www
uk
mail
10.1. a´ bra: Domain n´ev hierarchia
81
com
hu
gov
Budaörs
Budapest Pécs
10.2. a´ bra: Felt´etelezett gov.hu z´ona
10.2 DNS adminisztr´aci´o alapjai Mivel most m´ar tudjuk, hogyan e´ p¨ul fel a domain n´ev, az lehet a k´erd´es, hogy ki adminisztr´alja, tartja ny´ılv´an ezeket a neveket. Egy szem´ely esetleg? Nem. Van egy k¨ozponti szervezet, ami bizonyos domain neveket adminisztr´al, de nem mindet! Ez az int´ezm´eny az ICANN (Internet Corporation for Assigned Names and Numbers). Egy int´ezm´eny sz´am´ara hihetetlen nagy munka volna karbantartani az o¨ sszes domain nevet, illetve nagyon s´er¨ul´ekeny is lenne a rendszer. ´Igy val´oj´aban a k¨ozponti szervezet deleg´alja a feladatokat. A domain n´ev´ert ´ıgy felel˝os lehet maga a c´eged, de sokkal gyakoribb, hogy az Internet Szolg´altat´o (Internet Service Provider, ISP) fel¨ugyeli a domain neveket. Vegy¨uk azt a p´eld´at, hogy el´eg nagy c´egnek dolgozik, ´ıgy maga a c´eg adminisztr´alja a saj´at domain nev´et. Ebben az esetben k¨onnyen tudunk tov´abbi al-domain-t hozz´aadni, p´eld´aul: sales.mycompany.co.hu tech.mycompany.co.hu ´Igy ha akarjuk a k´et szervezeti csoportnak k¨ul¨on web szervere lehet illetve tov´abbi g´epek tartozhatnak ezekbe az al-domain-ekbe. Mivel mi fel¨ugyelj¨uk ezt a domain-t ez´ert k¨onnyen konfigur´alhatjuk a saj´at DNS szerver¨unket e´ s nem kell kapcsolatba l´epni az ICANN szervezettel. Ez a p´elda felveti a domain e´ s zon´ak k¨oz¨otti k¨ul¨onbs´eg k´erd´es´et. Egy n´ev szervernek teljes ismerete van a domain-r˝ol e´ s teljes autorit´assal b´ır felette ez´ert ezt a domain-t z´on´anak szokt´ak nevezni. N´ezz¨unk egy o¨ sszetettebb p´eld´at. A gov.hu domain deleg´alhatja a fel¨ugyeletet a v´arosi o¨ nkorm´anyzatoknak a saj´at domain-jeik felett. ´Igy Budapest lesz felel˝os a budapest.gov.hu domain-´ert e´ s P´ecs lesz felel˝os a pecs.gov.hu domain-´ert. Mindegyik o¨ nkorm´anyzat a saj´at zon´aj´ae´ rt felel˝os e´ s ez ´ıgy is van j´ol, mivel annak semmi e´ rtelme, hogy P´ecs lenne felel˝os Budapest domain nevei´ert. Ezzel a deleg´al´asi m´odszerrel a gov.hu domain adminisztr´ator´anak csak annyit kell tudnia, hogy ki a felel˝os Budapest e´ s P´ecs domain-jei´ert. Ez a deleg´al´as azzal is j´ar, hogy megb´ızunk az al-domain-ek adminisztr´atoraiban. Ami komplik´alja ezt a k´epet, hogy nem minden o¨ nkorm´anyzat domain-j´et kezelik helyileg, mert p´eld´aul lehet, hogy nincs el´eg ismeret¨uk hozz´a, vagy nem akarj´ak. Ebben az esetben is a gov.hu domain kezeli az al-domain-t. Ez azt jelenti, hogy egy n´ev szerver teh´at nem csak a saj´at, hanem az al-domain-jeit is kezelheti. ´Igy azt lehet l´atni, hogy a z´ona fogalma nem korl´atoz´odik egy domain-re, ann´al sz´elesebb! Erre mutat p´eld´at a 10.2. a´ bra.
10.3 N´ev felold´as A n´ev felold´ast “name resolution”-nak h´ıvj´ak angolul e´ s azt jelenti, hogy megkeress¨uk a megadott n´evhez tartoz´o IP c´ımet. A keres´esben a kliens feladata, hogy “elind´ıtsa” a keres´est, mivel a kliens
82
szinte semmit nem tud. Egy n´ev szervernek kell majd a keresett inform´aci´ot szolg´altatnia. Igen, de egy n´ev szerver csak a saj´at z´on´aj´aba tartoz´o nevekr˝ol tud inform´aci´ot adni, ´ıgy azt is biztos´ıtania kell, hogy keresni tudjunk abban a n´evtartom´anyokban is amelyek felett az adott n´ev szervernek nincs fel¨ugyeleti jogk¨ore. Mint m´ar t´argyaltuk egyetlen n´ev szerver nem tudja az eg´esz Internetet kiszolg´alni. Ugyanakkor vannak root szerverek, melyek a keres´es kezd˝opontjak´ent szolg´alnak e´ s azt adj´ak meg, hogy kihez kell tov´abb´ıtani az adott domain-re vonatkoz´o keres´est. N´ezz¨uk meg a www.aad.gov.au domain n´ev felold´as´at. Az els˝o k´erd´es, hogy ki fel¨ugyeli a domain-t. Ennek megtal´al´as´ara a dig parancsot lehet haszn´alni: $ dig NS au. A parancs kilist´azza azon n´ev szervereket akik fel¨ugyelik az Ausztr´al domain-t: au. au. au. au. au. au. au. au. au.
259192 259192 259192 259192 259192 259192 259192 259192 259192
IN IN IN IN IN IN IN IN IN
NS NS NS NS NS NS NS NS NS
udns4.ausregistry.net.au. udns2.ausregistry.net.au. ns1.ausdns.net.au. ns2.ausdns.net.au. a1.ausdns.net.au. udns1.ausregistry.net.au. ab.ausdns.net.au. udns3.ausregistry.net.au. udns5.ausregistry.net.au.
83
84
11. Fejezet
NFS e´ s NIS szolg´altat´asok 11.1 NFS alapok Az NFS r¨ovid´ıt´es a network filesystem-et vagyis h´al´ozati filerendszert jelenti. Az NFS az RPC (Remote Procedure Call) protokollon alapul e´ s 1980 k¨orny´ek´en a SUN Microsystem fejlesztette ki, hogy file-okat lehessen megosztani Unix rendszerek k¨oz¨ott. Az NFS kliens-szerver architekt´ur´at haszn´alva azt biztos´ıtja, hogy a szerver a´ ltal megosztott k¨onyvt´arak transzparens m´odon beilleszthet˝ok (mount) a kliens g´epek k¨onyvt´ar szerkezet´ebe. A rendszer t¨obb daemon-t e´ s konfigur´aci´os file-t haszn´al mindenf´ele autentik´aci´o n´elk¨ul, ´ıgy b´ar k´enyelmi szolg´altat´as, de alapvet˝oen biztons´agi probl´em´at is jelent. Az NFS protokoll fel´ep´ıt´ese a 11.1. a´ br´an l´athat´o. NFS az UDP protokollt haszn´alja, ami egy “kapcsolat n´elk¨uli” (connectionless) protokoll. Az NFS-hez az u´ gynevezett MOUNT protokollra is sz¨uks´eg van amit a mountd daemon implement´al. A mountd daemon mondja meg az nfsd daemon-nak, hogy mely file rendszerek a´ llnak kliensek rendelkez´esre, hogy becsatolj´ak. A szerveren m´eg fut a portmap daemon is, ami az RPC h´ıv´asokat kezeli. A kliens oldalon az rpc.statd e´ s rpc.lockd daemon-ok futnak.
11.2 NIS alapok NIS vagyis m´as sz´oval a Network Information Service. A szolg´altat´as r´egi neve “Yellow Pages” e´ s tulajdonk´eppen egy adatb´azis, ami lehet˝ov´e teszi a passwd, group e´ s hosts file-ok k¨ozpontos´ıtott el´er´es´et. Egy k¨ozponti, mester szerver (master server) t´arolja az adatokat e´ s szolg´alja ki a k´er´eseket a kliensek fel´e. Ugyanakkor a mester szerver e´ s a kliensek mellett tov´abbi al-szerverek (slave server) is r´eszei a h´al´ozatnak, ahogy ez a ??. a´ br´an is l´athat´o. Az al-szerverek szint´en ki tudnak szolg´alni k´er´eseket, ha a mester szerver nem el´erhet˝o, de nem tudj´ak m´odos´ıtani az adatokat. Az adatok m´odos´ıt´asa
NIS
NFS RPC
XDR - External Data Representation Internet protokoll Network Transport (pl. Ethernet)
11.1. a´ bra: NFS protokoll stack
85
csak a mester szerveren lehets´eges, ami azt´an tov´abb´ıt´odik az al-szerverek fel´e. Az NIS szolg´altat´as is t¨obb daemon-t haszn´al. A szerveren az ypserv daemon fut, m´ıg a kliens g´epekr˝ol az ypbind daemon k¨uldi a k´er´eseket a szerver fel´e. Az adatok tov´abb´ıt´asa t¨ort´enhet explicit m´odon az yppush seg´ıts´eg´evel vagy automatikusan az ypxfrd programmal.
11.3 Probl´em´ak az NFS-es e´ s NIS-el Az NFS e´ s NIS szolg´altat´asokkal t¨obb biztons´agi probl´ema van, e´ s ezek e´ vek sor´an folyamatosan probl´em´at okoztak. Sajnos a probl´em´ak a rendszer term´eszet´eb˝ol ad´odnak. P´eld´aul az NFS rendszer az AUTH_UNIX m´odszert haszn´alja az autentik´aci´ora e´ s alapvet˝oen megb´ızik az az NFS a´ ltal szolg´altatott UID e´ s GID e´ rt´ekben! Ezzel az a probl´ema, hogy k¨onny˝u olyan programot ´ırni, amely tetsz˝oleges UID e´ s GID e´ rt´eket haszn´al e´ s ´ıgy az NFS szerverr˝ol b´armilyen file-hoz hozz´af´erhet¨unk. Ezen fel¨ul, egy id˝oben az NFS daemon programokban t¨obb “buffer overflow” hib´at tal´altak. Az NIS szolg´altat´asn´al az egyik alapvet˝o probl´ema a DOS (Denial Of Service) t´amad´as. (Ezt a t´amad´ast a finger programmal lehet el´erni, amikor nagyon sok k´er´est int´ez¨unk a szerverhez.) Tov´abbi probl´em´ak is vannak a szolg´altat´assal, de a m´asik f˝o probl´ema, hogy teljesen k´ıv¨ul´all´ok is viszonylag egyszer˝uen be tudnak t¨orni. Ha valaki kital´alja az NIS szerver c´ım´et, akkor a saj´at kliens´evel csatlakozik hozz´a, majd egyszer˝uen az ypcat paranccsal lek´erdezheti a teljes adatb´azist. A fentieken k´ıv¨ul, mivel mindk´et szolg´altat´as futtathat´o nem priviligiz´alt portokon ez´ert b´armelyik felhaszn´al´o futtathatja a szolg´altat´asokat. ´Igy az eredeti szolg´altat´asok viszonylag egyszer˝uen helyettes´ıthet˝ok saj´at verzi´oval, e´ s ´ıgy egy rosszindulat´u felhaszn´al´o szabadon hozz´af´erhet a szolg´altat´asokhoz.
86
12. Fejezet
LDAP Az LDAP teljes neve: Lightweight Directory Access Protocol. Ez azt jelenti, hogy ez egy protocol ami t´amogatja a “directory” szolg´altat´ast (c´ımt´ar szolg´altat´as). A c´ımt´ar szolg´altat´as a legjobban ahhoz hasonl´o, mint egy telefon szolg´altat´o c´eg adatb´azisa, amib˝ol a felhaszn´al´okr´ol tudhatunk meg inform´aci´okat gyorsan e´ s egyszer˝uen. Hagyom´anyosan az oper´ator a kapcsolat a felhaszn´al´o e´ s az adatb´azis k¨oz¨ott. Ugyanakkor ez a szolg´altat´as nem arra val´o, hogy a felhaszn´al´o a telefonsz´am´at megv´altoztassa, hanem inform´aci´o kik´er´esre. A c´ımt´ar szolg´altat´asoknak speci´alis az adatb´azisa, mivel keres´esre vannak optimaliz´alva. Akkor haszn´alunk ilyen adatb´azist amikor kev´es az ´ır´as e´ s m´odos´ıt´as m˝uvelet e´ s nagy sz´am´u, gyors lek´erdez´esekre van sz¨uks´eg. A c´ımt´arak speci´alis tulajdons´agai: • Az adatb´azis optimaliz´alva olvas´asra. Term´eszetesen ´ırni is lehet, de sz´am´ıt´asig´enyes. • Fejlett e´ s o¨ sszetett keres´est tesz lehet˝ov´e. • Az alapvet˝o adat szerkezet kieg´esz´ıthet˝o, u´ gynevezett s´em´akkal (schema), a helyi ig´enyeknek megfelel˝oen. • Szabv´anyos´ıtott form´atumot e´ s protokolt haszn´alt, ´ıgy lehet˝os´eg van rendszerek k¨oz¨otti egy¨uttm˝uk¨od´esre. • T´amogatja az egyszer˝u adat replik´al´ast, t¨obbsz¨or¨oz´est. Ezeken fel¨ul ezek az adatb´azisok nem t´amogatj´ak a tranzakci´okezel´est e´ s a visszaforgat´ast. Az LDAP rendszerek eredete az X.500-as “directory” szolg´altat´asokt´ol sz´armaztathat´o, de ugyanakkor egyszer˝ubb: • A TCP/IP h´al´ozaton fut. Az X.500-as rendszerek a DAP protokollt haszn´alj´ak. • Csak a legfontosabb szolg´altat´asok vannak megval´os´ıtva. • Adatform´atuma sz¨oveges e´ s egyszer˝ubb. Fontos, hogy az LDAP “csak” egy protokoll e´ s nem szoftver. A protokoll csak a c´ımt´ar szolg´altat´ashoz val´o hozz´af´er´est szab´alyozza. A protokoll egy konkr´et programban van megval´os´ıtva e´ s az adatok t´arol´as´ara szolg´al´o adatb´azist is egy m´asik programnak kell biztos´ıtania. Ez az adatb´azis a back end. Az LDAP protokolt el˝osz¨or 1990-ben implement´alt´ak a University of Michigen-en. A szabad forr´as´u implement´ac´oja az OpenLDAP (http://www.openldap.org). Az OpenLDAP implement´aci´o t¨obb r´eszb˝ol e´ s ezakb˝ol a legfontosabbak: • d´emonok (daemon): slapd az OpenLDAP daemon e´ s slurpd az adat replik´al´o daemon • adatb´azis k¨ornyezet: Az OpenLDAP t´amogatja a Berkeley DB e´ s GNU GDBM adatb´azisokat
87
dc=hu dc=net dc=example
szervezet
szervezeti egység
ou=Groups ou=People
személy uid=smith 12.1. a´ bra: Inform´aci´o faszerkezetben, LDAP alatt. • seg´ıt˝o programok (utility): ldapadd (bejegyz´es hozz´aad´asa), ldapmodify (bejegyz´es m´odos´ıt´asa), ldapdelete (t¨orl´es), ldapsearch (keres´es), ldappasswd (jelsz´o v´alt´as). • kapcsol´od´o seg´ıt´o programok: slapdpasswd (k´odolt jelszavak gener´al´asa) • konfigur´aci´os file-ok.
12.1 C´ımt´ar szerkezete Az LDAP az inform´aci´ot egy faszerkezetben t´arolja, ahol minden csom´opont egy bejegyz´es (entry). A bejegyz´esnek van t´ıpusa, amely meghat´arozza a bejegyz´esnek milyen attrib´utumai, tulajdons´agai lehetnek. Minden bejegyz´esre lehet hivatkozni a “Distinguished Name” (DN) seg´ıts´eg´evel. A DN l´enyeg´eben a cs´ucshoz vezet˝o u´ tvonalat adja meg. Egy p´elda faszerkezet a 12.1. a´ br´an l´athat´o. Mivel az adatokat nem ilyen grafikusan form´aban a´ br´azoljuk, hanem sz¨oveges file-ban ez´ert minden csom´opontot pontosan meg kell adnunk, hogy hol helyezkedik el a faszerkezetben. Az egyik elterjedt form´atum az LDIF. Az LDIF (LDAP Data Interchange Format) form´atum az RFC 2849-es dokumenumban van defini´alva.1 A form´atum egyszer˝u sz¨oveges dokumentumot defini´al amiben ASCII karaktereket lehet haszn´alni, vagy az egy´eb karaktereket base64-es k´odol´asban. Az LDIF form´atumot az LDAP szolg´altat´ason k´ıv¨ul a Netscape Communicator haszn´alta e´ s a Mozilla Application Suite jelenleg is haszn´alja az e-mail c´ımek t´arol´as´ara.
12.1.1 S´em´ak
12.2 Szerver telep´ıt´es e´ s be´all´ıt´as Az OpenLDAP telep´ıt´ese nem bonyolult, de id˝ot vehet ig´enybe minden megfelel˝o be´all´ıt´asa. Az OpenLDAP telep´ıt´es´enek el˝ofelt´etele a k¨ovetkez˝o szoftverek: • Adatb´azis kezel˝o: 1 B´ ar t¨obb kieg´esz´ıt´est
javasoltak az e´ vek sor´an, egyel˝ore csak az RFC 4525-¨os sz´am´u dokumentum van hivatalosan elfogadva.
88
R¨ovid´ıt´es cn
Angol n´ev Common Name
ou dc
Organizational Unit Domain Component
dn
Distinguished Name
RDN UPN
Magyar´azat Az egyedi objektumra hivatkozik, p´eld´aul szem´ely neve, szoba, amire majd keresni fogunk. Az a szervezeti egys´eg aminek a szem´elyek r´eszei. Egy domain komponense. P´eld´aul a www.google.com-ot ´ıgy ´ırn´ank le: dc=www,dc=google,dc=com Ez az az egyedi n´ev, amivel a c´ımt´ar egy bejegyz´es´ere egyedi m´odon hivatkozhatunk.
Relative Distinguished Name User Principal Name 12.1. t´abla: LDAP nevek
– GNU gdbm: http://www.fsf.org – Berkeley DB: http://www.sleepycat.com • Transport Layer Security (TLS/SSL): http://www.openssl.org • Cyrus SASL k¨onyvt´ar: http://asg.web.cmu.edu/sasl/ Debian alatt a k¨ovetkez˝o csomagokat kell e´ s e´ rdemes telep´ıteni a szerverre: apt-get install slapd ldap-utils migrationtools illetve m´eg az NSCD daemon-ra is sz¨uks´eg lehet, a gyorsabb hozz´af´er´es miatt. A migrationtools csomag seg´ıts´eg´evel a m´ar l´etez˝o felhaszn´al´okat lehet a´ tvinni az LDAP adatb´azisba. Az install´al´as sor´an a csomag l´etrehoz egy k¨ul¨on felhaszn´al´ot e´ s csoportot e´ s az LDAP rendszer filejai ehhez a felhaszn´al´ohoz fognak tartozni. Ha k´ezi u´ ton szeretn´enk ezeket a be´all´ıt´asokat elv´egezni akkor a k¨ovetkez˝o utas´ıt´as sorozatot kellene kiadni: # # # # # # # # # #
adduser openldap chown -R openldap:openldap /etc/ldap chmod 770 /etc/ldap find /etc/ldap -type f -exec chmod 440 {} \; find /etc/ldap -type d -exec chmod 770 {} \; chown -R openldap:openldap /var/lib/ldap chmod 750 /var/lib/ldap rm /var/lib/ldap/* chown -R openldap:openldap /var/spool/slurpd rm /var/spool/slurpd/*
12.2.1 LDAP szerver be´all´ıt´asa A telep´ıt´es ut´an be kell a´ ll´ıtani az LDAP szervert. A konfigur´aci´os file a´ ltal´aban a /etc/ldap/slapd.conf helyen tal´alhat´o. Egy minta konfigur´aci´os file a 12.2.1. t´abl´azatban l´athat´o. Az els˝o n´egy sor a haszn´alt s´em´akat t¨olti be. A pidfile opci´o adja meg, hogy a szerver processzus azonos´ıt´oj´at melyik file-ban t´aroljuk. Az argsfile opci´oval az slapd szerver argumentumait lehet megadni. A “back end” adatb´azis hely´et a directory opci´oval adhatjuk meg. Az ´ıgy megadott k¨onyvt´arnak a LDAP szerver ind´ıt´asa el˝ott m´ar l´eteznie kell e´ s a jogosults´aga olyan legyen, hogy csak a tulajdonos felhaszn´al´o ´ırhassa, olvashassa (mode 700), illetve legyen az LDAP felhaszn´al´o tulajdon´aban. A backend e´ s database opci´okkal az adatb´azist adjuk meg.
89
include include include include
/etc/openldap/schema/core.schema /etc/openldap/schema/cosine.schema /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/nis.schema
pidfile argsfile directory
/var/run/slapd/slapd.pid /var/run/slapd/slapd.args /var/lib/ldap
backend database
hdb hdb
suffix rootdn rootpw
"dc=example,dc=hu" "cn=admin,dc=example,dc=hu" {MD5}blablablabla==
# opcion´ alisan password-hash schemacheck index loglevel
{MD5} on objectClass eq 256 12.2. t´abla: slapd konfigur´aci´os file
ACL be´all´ıt´asok Kontroll´alhatjuk, hogy az LDAP egyes r´eszeihez, ki milyen jogokkal f´erhessen hozz´a. Erre az´ert van sz¨uks´eg, mert a c´ımt´ar olyan adatokat is t´arol, melyre t¨obb programnak is sz¨uks´ege van e´ s “anonymous” m´odon akarjuk kiolvasni (pl. felhaszn´al´oi e´ s csoport azonos´ıt´o), de ugyanitt t´aroljuk az e´ rz´ekeny adatokat is (pl. jelszavak), amelyeket csak maga a felhaszn´al´o e´ s az adminisztr´ator e´ rhet el. A hozz´af´er´est nagyon finoman lehet szab´alyozni P´eld´aul a jelszavakat v´edelm´et a k¨ovetkez˝o m´odon lehet megadni: access to by by by by
attrs=userPassword dn="cn=admin,dc=example,dc=hu" write anonymous auth self write * none
Ez a be´all´ıt´as az /etc/ldap/slapd.conf file-ban azt adja meg, hogy a jelsz´o attrib´utum eset´en az adminisztr´atornak e´ s mag´anak a felhaszn´al´onak ´ır´asi joga van, a n´evtelen felhaszn´al´onak (anonymous) azonos´ıtania kell mag´at e´ s mindenki m´as sem ´ırni sem olvasni nem tudja a jelszavakat. Ha azt akarjuk biztos´ıtani, hogy csak az adminisztr´ator tudja ´ırni a c´ımt´arat, de mindenki m´as olvashassa (az el˝oz˝o k¨ot¨otts´eggel, hogy a jelszavakat nem), akkor a k¨ovetkez˝o sorokat kell m´eg elhelyezni az /etc/ldap/slapd.conf file-ba: access to * by dn="cn=admin,dc=example,dc=hu" write by * read Az alap be´all´ıt´as az LDAP szerver eset´en: access to * by * read
90
vagyis mindenkinek szabad olvas´asi hozz´af´er´est biztos´ıt a teljes c´ımt´arhoz. Ezekn´el a hozz´af´er´esi be´all´ıt´asokn´al figyelni kell arra, hogy a rendszer fentr˝ol lefel´e alkalmazza a szab´alyokat e´ s amire van m´ar be´all´ıt´as azt az alatta lev˝o be´all´ıt´as m´ar nem ´ırja fel¨ul. Ezek t¨ukr´eben e´ rdemes v´egiggondolni a be´all´ıt´asokat, hogy mihez enged¨unk hozz´ef´er´est e´ s mihez nem. Jelszavak gener´al´asa LDAP-hoz Ahhoz, hogy az /etc/ldap/slapd.conf file-ban vagy a c´ımt´arban meg tudjunk adni k´odolt jelszavakat a slappasswd programot lehet haszn´alni. A programnak meg lehet adni, hogy crypt, MD5, SHA vagy SSHA form´atumban akarjuk a k´odolt jelsz´ot megkapni. P´eld´aul egy k´epzeletbeli jelsz´o eset´en ezt kapjuk: $ slappasswd -h {MD5} New password: Re-enter new password: {MD5}adkjhieruhaldsjfbasdfef== (A program a szabv´anyos kimenetre nyomtatja az eredm´enyt, ami a´ t´ır´any´ıthatunk egy file-ba e´ s ´ıgy elmenthetj¨uk.)
12.3 C´ımt´ar felt¨olt´ese Az LDAP c´ımt´ar gy¨okere, maga a szervezet:2 dn: dc=example.dc=hu objectClass: dcObject objectClass: organization o: Ez egy pelda szervezet A gy¨ok´eren k´ıv¨ul, mag´at az adminisztr´atort is hozz´a kell adni a c´ımt´arhoz: dn: cn=admin,dc=example,dc=hu objectClass: organizationalRole cn: admin A k´et alapvet˝o bejegyz´esen k´ıv¨ul a t¨obbi bejegyz´es m´ar opcion´alis e´ s t¨obbf´elek´eppen elrendezhet˝o. (Persze ahhoz, hogy az oper´aci´os rendszer valamilyen alrendszere haszn´alni tudja a bejegyz´eseket, ahhoz megfelel˝o form´aba kell rendezni o˝ ket.) P´eld´aul a felhaszn´al´ok nyilv´antart´as´ahoz sz¨uks´eges k´et tov´abbi bejegyz´es, egy a felhaszn´al´oknak e´ s egy a csoportoknak: dn: ou=Groups,dc=example,dc=hu ou: Groups cn: Csoportok objectClass: organizationalRole description: Felhasznaloi csoportok dn: ou=People,dc=example,dc=hu ou: People cn: Emberek objectClass: organizationalRole description: Ceg felhasznaloi 2A
k¨ovetkez˝o sz¨ovegr´eszeket lehet egy file-ba, vagy k¨ul¨on-k¨ul¨on file-okba rakni rakni.
91
12.3.1 Hozz´aad´o parancsok Ha bejegyz´est szeretn´enk a c´ımt´arhoz hozz´aadni, akkor az ldapadd parancsot lehet haszn´alni. A bejegyz´eseket ments¨uk el egy file-ba, majd a k¨ovetkez˝o paranccsal adjuk hozz´a: $ ldapadd -x -W -D "cn=admin,dc=example,dc=hu" -f /tmp/bejegyzesek.ldif Az egyes opci´ok jelent´ese: -x : Egyszer˝u azonos´ıt´ast haszn´ajunk, ne SASL-t (l´asd 12.6. bekezd´es). -W : Az egyszer˝u azonos´ıt´ashoz a jelsz´ot rejtett m´odon k´erj¨uk be e´ s ne a parancssorban, nyitott sz¨ovegk´ent. -D : Megadja azt a dn mez˝ot, amivel a kapcsol´od´ashoz sz¨uks´eges felhaszn´al´ot egy´ertelm˝uen megadjuk. -f : Ezzel az opci´oval adjuk meg, hogy melyik file-ban tal´alhat´oak a bejegyz´esek.
12.3.2 Felhaszn´al´ok a c´ımt´arban Egy felhaszn´al´o bejegyz´es´et a k¨ovetkez˝ok´eppen lehet megadni LDIF form´atumban: dn: uid=smith,ou=People,dc=example,dc=hu uid: smith cn: John Smith objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount uidNumber: 5000 gidNumber: 100 gecos: John Smith felhasznalo homeDirectory: /home/smith loginShell: /bin/sh userPassword: {MD5}blablabla== shadowLastChange: 0 shadowMax: 99999 shadowWarning: 7 Egy csoport defin´ıci´oja: dn: cn=loosers,ou=Groups,dc=example,dc=hu objectClass: posixGroup cn: loosers gidNumber: 1100 description: Group of loosers Fontos, hogy az uidNumber nem szerepelhet a /etc/passwd file-ban mint uid (felhaszn´al´oi azonos´ıt´o), illetve a gidNumber m´ar defini´alva legyen vagy a /etc/group file-ban vagy az LDAP adatb´azisban.
12.3.3 Egy´eb parancsok Bejegyz´esek m´odos´ıt´as´ara az ldapmodify parancs, m´ıg egy bejegyz´es t¨orl´es´ere az ldapdelete parancs haszn´alhat´o.
92
12.4 LDAP egyszeru˝ haszn´alata Ha root-k´ent szeretn´enk a teljes adatb´azist ki´ırni LDIF form´atumban, akkor a slapcat parancsot lehet haszn´alni. A parancs a szabv´anyos kimenetre ´ırja ki a c´ımt´arat, az adatb´azis sorrendj´eben e´ s nem a hierarchia sorrendj´eben. Ez´ert az ´ıgy kapott kimenetet szerkeszteni kell, ha az ldapadd paranccsal akarjuk haszn´alni. Ha a c´ımt´arat egy file-ba szeretn´enk elmenteni, t´arol´as szemponj´ab´ol, akkor a -l opci´o haszn´alhat´o: $ slapcat -l /root/backup/ldap.ldif Az elmentett c´ımt´ar vissza´all´ıt´as´ara a slapadd parancs haszn´alhat´o: $ slapadd -l /root/backup/ldap.ldif Arra figyelni kell, hogy a slapadd parancs nem v´egez ellen˝orz´eseket a neveken illetve a s´em´an! ´Igy a´ ltal´aban az ldapadd parancsot haszn´aljuk, ha a c´ımt´arhoz hozz´a akarunk adni egy bejegyz´est!
12.4.1 Keres´es a c´ımt´arban Az LDAP c´ımt´arban a keres´esre az ldapsearch parancs haszn´alhat´o. A parancs kapcsolatot nyit (binding) az LDAP szerver fel´e e´ s a megadott param´eterek alapj´an a keres´es v´egrehajt´odik. Ha minden bejegyz´est szeretn´enk lek´erdezni a k¨ovetkez˝o parancsot lehet kiadni: $ ldapsearch -x ahol a -x opci´o azt jelenti, hogy egyszer˝u azonos´ıt´ast haszn´aljunk, de pedig SASL-t.3 Egy keres´eshez h´arom dolgot kell megadni: • a keres´es kezdete (base): egy DN ahol a keres´est kezdeni kell. Csak az adott csom´opont alatti bejegyz´esekben t¨ort´enik a keres´es. • keres´esi hat´ok¨or (scope): – base: csak a gy¨ok´er csom´opont szerepel a keres´esben. Csak egy vagy nulla bejegyz´est ad vissza a keres´es. – one: a DN a´ ltal megadott bejegyz´esben e´ s az egy szinttel alatta lev˝o bejegyz´esekben v´egez keres´est. – sub: a DN-t˝ol indulva az alatta lev˝o teljes alf´aban keres. • sz˝ur˝o: A sz˝ur˝o form´atum´at az RFC 4515-¨os dokumentum adja meg. Ha nem adunk meg sz˝ur˝ot, akkor az (objectClass=*), vagyis a mindent keres˝o, sz˝ur˝o lesz e´ rv´enyes. Keres´esi p´eld´ak • A gy¨ok´er bejegyz´es lek´er´ese: $ ldapsearch -x -b "dc=example,dc=hu" -s base 3A
fenti ACL be´all´ıt´asok (12.2.1. bekezd´es) eset´en egy felhaszn´al´o is ki tudja nyomtatni a teljes c´ımt´arat.
93
12.5 Felhaszn´al´o azonos´ıt´as LDAP alapj´an A k¨ovetkez˝o csomagokat kell install´alni egy kliens g´epen, mely LDAP autentik´aci´ot akar haszn´alni: apt-get install libnss-ldap ldap-utils A be´all´ıt´as sor´an a kliens g´epet u´ gy a´ ll´ıtjuk be, hogy a felhaszn´al´o azonos´ıt´as´ara nem csak az LDAP ´ szerver lesz alkalmas, hanem a lok´alis file-ok is megmaradnak. Erdemes ezt mindig k¨ovetni, mert ´ıgy mindig lesz legal´abb egy felhaszn´al´o amivel be tudunk jelentkezni a g´epre ha az LDAP szerver nem el´erhet˝o. A root felhaszn´al´o is import´alhat´o az LDAP adatb´azisba, de tartsuk meg a lok´alis file-okban is. Az /etc/nsswitch.conf file-ban meg kell adni, hogy mely adatok eset´en akarjuk az LDAP adatb´azis´at haszn´alni. P´eld´aul felhaszn´al´ok eset´en a felhaszn´al´oi n´ev e´ s adatok (passwd), csoportazonos´ıt´ok (group) e´ s maga a jelsz´o (shadow) is el´erhet˝o lok´alisan e´ s az LDAP adatb´azisban: passwd: group: shadow:
files ldap files ldap files ldap
Az NSS szervert (l´asd 6. fejezet) is konfigur´alni kell az /etc/libnss-ldap.conf file-on kereszt¨ul: host 127.0.0.1 base dc=example,dc=hu uri ldap://127.0.0.1/ rootbinddn cn=admin,dc=example,dc=hu A rootbinddn opci´o adja meg, hogy milyen felhaszn´al´ok´ent akarunk csatlakozni az LDAP szerverhez, amikor a root felhaszn´al´ok vagyunk. A hozz´atartoz´o jelsz´o t´arolhat´o az /etc/libnss-ldap.secret file-ban. Ebben az esetben a jelsz´o k´odolatlanul ker¨ul a file-ba, ´ıgy a tulajdonosa a root legyen e´ s csak root tudjon hozz´af´erni (mode 600). Opcion´alis: Amit m´eg nem adtunk meg, hogy a root-on k´ıv¨ul m´as felhaszn´al´ok e´ s programok milyen m´odon kapcsol´odnak az LDAP szerverhez. Alapesetben anonymous-k´ent t¨ort´enik a kapcsol´od´as, de arra is van lehet˝os´eg, hogy ellen˝orz¨ott m´odon, egy adott felhaszn´al´on kereszt¨ul kapcsol´odjunk az LDAP szerverhez. A felhaszn´al´oi azonos´ıt´o legyen: nss. ´Igy az /etc/libnss-ldap.conf fileban a megadand´o opci´ok: binddn cn=nss,dc=example,dc=hu o onak_megadott_jelsz´ al´ bindpw a_felhaszn´ ahol a binddn annak a felhaszn´al´onak a DN nev´et adja meg, akinek a nev´eben kapcsol´odni akarunk az LDAP szerverhez. A bindpw opci´oban, k´odolatlanul azt a jelsz´ot kell megadni, amelyik jelsz´ot a felhaszn´al´onak is megadtunk az LDAP adatb´azisban. (Mivel ebben a file-ban is k´odolatlan jelsz´o van, ez´ert az /etc/libnss-ldap.conf file is csak a tulajdonos felhaszn´al´o (openldap) a´ ltal legyen olvashat´o (mode 600). Term´eszetesen ehhez a m´odszerhez ezt a felhaszn´al´ot is hozz´a kell adni az LDAP adatb´azishoz e´ s az ACL be´all´ıt´asok a slapd.conf file-ban a k¨ovetkez˝ok lehetnek: access to attribute=userPassword by dn="cn=admin,dc=example,dc=hu" write by anonymous auth by * none access to * by dn="cn=admin,dc=example,dc=hu" write by dn="cn=nss,dc=example,dc=hu" read by * auth
94
Ebben az esetben a root meg tudja v´altoztatni a jelszavakat az LDAP szerveren, m´ıg a kliensekr˝ol csak lek´erdez´eseket lehet v´egezni. V´eg¨ul az /etc/ldap/ldap.conf file-ban a kliens programok sz´am´ara kell megadni, hogy hol e´ s milyen LDAP szerver e´ rhet˝o el. P´eld´aul ha a lok´alis g´epen tal´alhat´o az LDAP szerver: BASE: URI:
dc=example,dc=hu ldap://127.0.0.1
12.5.1 LDAP kipr´ob´al´asa Ebben az a´ llapotban az LDAP rendszer m´ar haszn´alhat´o e´ s v´egezhet¨unk lek´erdez´eseket. P´eld´aul ha fel van install´alva a finger csomag, akkor ellen˝orizhetj¨uk, hogy a felhaszn´al´o l´etezik-e: $ finger smith Login: maxldap Name: John Smith felhasznalo Directory: /home/smith/ Shell: /bin/sh Last login Mon Jun 2 16:53 (CEST) on pts/1 from some-client.subnet.hu No mail. No Plan.
12.5.2 PAM be´all´ıt´asa LDAP haszn´alat´ara Az LDAP e´ s PAM (l´asd 5. fejezet) rendszerek o¨ sszekapcsol´as´ahoz tov´abbi programra e´ s be´all´ıt´asokra van sz¨uks´eg. A fenti be´all´ıt´asok m´eg nem biztos´ıtj´ak, hogy a felhaszn´al´o azonos´ıt´as´an´al e´ s autentik´aci´oj´an´al is haszn´alhat´o. Minden esetre ehhez az al´abbi csomagot kell install´alni: apt-get install libpam-ldap Debian rendszeren az al´abbi file-okba u´ j sorokat kell besz´urni, hogy a PAM rendszer is figyelembe vegye az LDAP adatb´azisban t´arolt adatokat: /etc/pam.d/common-auth /etc/pam.d/common-password /etc/pam.d/common-session /etc/pam.d/common-account L´enyeg´eben mindenhol a pam_unix.so sorok f˝ol´e (!) kell beilleszteni a pam_ldap.so modult. A m´asik v´altoztat´as, hogy a pam_unix.so modul v´eg´ere beillesztett¨uk a try_first_pass kifejez´est. Erre a kifejez´esre az´ert van sz¨uks´eg, hogy a rendszer ne k´etszer k´erdezze be a jelsz´ot, ha a jelsz´o nem az LDAP adatb´azisban van. A kifejez´es arra utas´ıtja a pam_unix.so modult, hogy a kor´abban megadott jelsz´ot haszn´alja. ´Igy a file-ok p´eld´aul a k¨ovetkez˝ok lehetnek: # /etc/pam.d/common-account file-ban account sufficient pam_ldap.so account required pam_unix.so try_first_pass # /etc/pam.d/common-auth file-ban auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure # /etc/pam.d/common-password file-ban password sufficient pam_ldap.so password required pam_unix.so nullok
95
try_first_pass
obscure
md5
try_first_pass
# /etc/pam.d/common-session file-ban session sufficient pam_ldap.so session required pam_unix.so try_first_pass A sufficient opci´o adja meg, hogy az LDAP-os azonos´ıt´as elegend˝o, m´ıg ha ez nem siker¨ul, akkor a jelsz´o azonos´ıt´as a lok´alis file-ok alapj´an m´ar k¨otelez˝o (required). Egy /etc/pam_ldap.conf file-t is l´etre kell hozni e´ s kit¨olteni. A szerveren a file tartalma: host 127.0.0.1 base dc=example,dc=hu uri ldap://127.0.0.1/ rootbinddn cn=admin,dc=example,dc=hu scope sub pam_password md5 pam_md5 local m´ıg a klienseken a k¨ovetkez˝o lehet, felt´etelezve, hogy a kliensekr˝ol csak olvasni akarunk: host 127.0.0.1 base dc=example,dc=hu uri ldap://127.0.0.1/ binddn cn=nss,dc=example,dc=hu bindpw a_felhaszn´ al´ onak_megadott_jelsz´ o pam_password md5 pam_md5 local A szerveren az admin felhaszn´al´o jelszava a /etc/ldap.secret file-ban t´arolhat´o, k´odolatlan m´odon. Ez a file is csak a felhaszn´al´o a´ ltal legyen olvashat´o (mode 600).
12.5.3 Debian specialit´as Amikor a Debian rendszer elindul az udev alrendszer az LDAP indul´asa el˝ott indul el e´ s a c´ımt´arakb´ol lek´erdez n´eh´any felhaszn´al´oi csoportot e´ s felhaszn´al´o megl´et´et. Az nsswitch.conf file-ban a felhaszn´al´ok lek´erdez´esi sorrendje: files ldap, ez´ert az oper´aci´os rendszer el˝osz¨or az /etc/passwd e´ s /etc/group file-okban keresi a felhaszn´al´okat e´ s csoportokat, majd az LDAP szervert k´erdezi le. Az udev alrendszer a´ ltal keresett csoportok e´ s felhaszn´al´ok alap esetben nem tal´alhat´ok sem a fileokban sem az LDAP szerveren ez´ert a bootol´as sor´an t¨obb hiba¨uzenetet kapunk e´ s a bootol´as is lassabb lesz: nss_ldap: could not connect to any LDAP server as (null) - Can’t contact LDAP server nss_ldap: failed to bind to LDAP server ldap://127.0.0.1: Can’t contact LDAP server
A hiba u¨ zenetek elt¨untet´es´ehez, e´ s ´ıgy a bootol´as felgyors´ıt´as´ahoz, a csoportokat e´ s felhaszn´al´okat hozz´a kell adni a rendszerhez. (Az LDAP-hoz nem adhatjuk, mert az LDAP rendszer m´eg nem indult el az udev alrendszer el˝ott, ´ıgy a file-okhoz kell hozz´aadni.) A sz¨uks´eges csoportokat e´ s felhaszn´al´ot a k¨ovetkez˝o parancsokkal adhatjuk a rendszerhez: $ $ $ $ $ $
addgroup --system scanner addgroup --system fuse addgroup --system tss addgroup --system kvm addgroup --system rdma adduser --no-create-home --ingroup tss --disabled-password --disabled-login tss
96
12.6 Biztons´agosabb LDAP azonos´ıt´as Az LDAP protokoll k´etfajta autentik´aci´ot (felhaszn´al´o azonos´ıt´ast) tesz lehet˝ov´e: egyszer˝u e´ s SASL. Az “egyszer˝u” azonos´ıt´as eset´en a jelsz´ot kell megadni. Itt e´ rdemes arra figyelni, hogy a jelsz´o k´odolatlanul utazhat a h´al´ozaton. Ennek elker¨ul´es´ere c´elszer˝u a kapcsolatot TLS felett haszn´alni. # /etc/openldap/slapd.conf include include include
/etc/openldap/schema/cosine.schema /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/nis.schema
# md5-tel titkos´ ıtsd a jelszavakat password-hash {md5} alis) agait (opcion´ es a TLS tulajdons´ ald az SSL ´ # Defini´ TLSCertificateFile /etc/ssl/ldap.pem TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem TLSCACertificateFile /etc/ssl/ldap.pem (Lejjebb...) database suffix rootdn rootpw directory index
ldbm "dc=genfic,dc=com" "cn=Manager,dc=genfic,dc=com" {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== /var/lib/openldap-ldbm objectClass eq
# /etc/openldap/ldap.conf BASE dc=genfic, dc=com URI ldaps://auth.genfic.com:636/ TLS_REQCERT allow SSL-tan´us´ıtv´any gener´al´asa: # cd /etc/ssl # openssl req -config /etc/ssl/openssl.cnf -new -x509 -nodes -out \ ldap.pem -keyout /etc/openldap/ssl/ldap.pem -days 999999 # chown ldap:ldap /etc/openldap/ssl/ldap.pem # /etc/conf.d/slapd OPTS="-h ’ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock’"
12.7 phpldapadmin
97
98
¨ A. Fuggel´ ek
Felhaszn´alt irodalom •
99
T´argymutat´o
100