Title: KERNEL HACKS HOWTO (BETA) Author: Petr.Stanek@inec.cz Version: 11/12/1998 Obsoletes: Expiration: V dobe uvedeni rady jadra 2.2+ Info: Optimalizace jader pro vyzsi zateze. Copyright (C) 1998 INEC, Inc. All righs reserved. OBSAH 1) UVOD 2) Projevy 3) JAK NATO? 4) Preklad jadra 5) Zaver 1) Uvod ------- Na velice zatizenych linuxovych serverech dochazi k narazeni na pevne stanovene omezeni jadra pri prekladu. Nejcastejsim probleme byva povoleni maximalniho poctu soucasne otevrenych souboru (file descriptor) procesy jednoho uzivtele(UID). 2) Projevy ---------- Dojde k znefunkcnenim vsech sluzeb bezicich pod timto UID. V error logu se pak nachazeji hlasky typu "not ... open files" ..... Vzorny adepti Apache a Squid. Pokud se jedna o roota tak beh pod jeho UID spustenych sluzeb pokracuje, ale jiz nic dalsiho neudela. Nefunguje bash, ls, forkovani deamonu ...., jinak se to tvari ze celkem server funguje. V pripade utoku DOS a uspesnem vyrabeni zoombiku, se muze zacit take vycerpat tento limit a zapricinit "vytuhnuti" stroje. (sendmail, bind ... bezici pod rootem) 3) JAK NATO? ------------ Aktualni nastaveni limitu uzivatele zjistime pomoci [root@altair /root]# ulimit -a core file size (blocks) 1000000 data seg size (kbytes) unlimited file size (blocks) unlimited max memory size (kbytes) unlimited stack size (kbytes) 8192 cpu time (seconds) unlimited max user processes 256 pipe size (512 bytes) 8 open files 256 <<<<< To je ono ;-) virtual memory (kbytes) 2105343 Napravu provedeme zmenou hodnoty v zdrojacich aktualniho jadra. Otevreme si soubor /usr/src/linux/include/linux/fs.h Vyhledame retezec /* Fixed constants first: */ #undef NR_OPEN #define NR_OPEN 256 <<<<< To je ono ;-) Zmenime z puvodnic #define NR_OPEN 256 na pozadovanou #define NR_OPEN 1024 <<<<< Nova hodnota :-) A nezapomeneme ulozit !!! Pokud provozujete Squida, tak nezapomente take zvednout limit maximalniho poctu otevrenych souboru jednim procesem. (neni to same jako jednim uzivatelem!) OPEN_MAX in /usr/include/linux/limits.h #define OPEN_MAX 256 /* # open files a process may have */ zvednout na #define OPEN_MAX 3072 /* # open files a process may have */ 4)PREKLAD JADRA --------------- Preklad jadra a jeho test doporucuji provest bezpecnou cestou. (blbuvzdorne sam jsem to vyzkousel nechtene na sobe;-) 0] vlozit 100% funkcni disketu do /dev/fd0 (samozrejmne s povolenim zapisu na ni!) 1] cd /usr/src/linux 2] make dep 3] make clean 4] make zdisk 5] make modules 6] make modules_install 7] sync 8] reboot Vyhodou tohoto prekladu je 100% bezpecnost pred pripadnym nezdarem prekladu jadra a nedejboze znicenim funkcniho vmlinuz a lila. Pokud vse funguje OK, tak po kratkem pozorovani je mozno prelozit a zapsat nove jadro zpusobem jaky se na dannem serveru pouziva. Pokud to nefunguje, tak staci vytahnou disketu a opet rebootovat. (prezouvat se u toho nemusite;-) 5)Zaver ------------- Doporucuji nasadit na velmi zatizenych serverech provozujicich Apache, Squid, Bind ... Tato uprava byla k plne spokojenosti otestovana na jadrech 2.0.34-6