от Никола Антонов(28-06-2003)

рейтинг (5)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

По страниците на нашите форуми много често се обсъждат въпроси, свързани със сигурността, спори се коя е най-сигурната дистрибуция, дали Линукс е по-добър от "Прозоречната ОС" по отношение на сигурността и т.н. Най-често тези дискусии се разпалват до неистово крещене и неизслушване на опонента. Обикновено се говори за мрежова сигурност, настройки на firewalls, преобладават лозунгите "... sux" и "... rulz"!

Истината е, че когато говорим за сигурност, на първо място трябва да мислим за локалната сигурност, после за мрежовата, а при Линукс, като мрежово ориентирана ОС, двата вида сигурност зависят взаимно един от друг. Айде, аз пак се разприказвах...

Всъщност, специалистите знаят, няма нищо по-лесно от това да скапете една система, независимо от дистрибуцията, достатъчно е да имате достъп до команден ред, дори не е необходим компилатор, дори не ви трябват и правата на root.

Вероятно повечето потребители-неспециалисти, като мен, не си дават сметка, че която и да е Линукс-дистрибуция по подразбиране не дава достатъчно сигурност, за да спим спокойно, особено ако предоставяме услуги за отдалечен достъп на системата си. Тема на този материал е защитата на системата от локални атаки, целящи претоварване на паметта или процесора и водещи до безотказно забиване на системата. Такива атаки, за жалост, се правят много лесно.

Например, достатъчно е да изпълните това в конзолата (посочено от Г. Чорбаджийски):

:(){ :|:&};:

Резултатът е доста неприятен.

Ето и някои други малки и лоши програмки, които водят смазващо скапване на любимата ни Линукс-система:

1. Стандартна fork-бомба:

int main()
{
       while(1)
               fork();
       return 0;
}

2. Препълване на паметта:

int main()
{

       char *p;
       while(1)
               p = (char *)malloc(sizeof(char) * 4096);
       return 0;
}

За да се спасим от подобен тип атаки, както и от опасността сами да изпълним вреден код (някоя недобре скалъпена програмка на C, например), можем да се възползваме от услугите на /etc/security/limits.conf. В него можем детайлно да поставим ограничения за определен тип потребители или за всички наведнъж (не се прапоръчва) - колко процеса могат да стартират, колко памет може да използва всеки един процес, колко процесорно време може да използват и т.н.

Да речем, че имаме два типа потребители - локални (т.е. доверени, използващи Х) и отдалечени (не им вярваме много, а и не им се полага да ползват графична среда). Едните потребители поставяме в групата users, а другите - в групата notrust.

@users          soft    core               10240
@users        hard    nproc           150
@users hard nofile  1024
@users hard stack 51200
@users          hard    memlock     102400
@users hard as   102400

@notrust        hard    core      5120
@notrust        hard    rss       15360
@notrust        hard    data      15360
@notrust        hard    nproc   15
@notrust -    maxlogins 4
@notrust        hard    nofile    64
@notrust        hard    stack   15360
@notrust        hard    fsize     51200
@notrust        hard    memlock     15360
@notrust        hard    cpu      2
@notrust        hard    as         25600

По този начин задаваме за членовете на двете групи различни ограничения за натоварване на системата. Особено важно е ограничението nproc (брой на процесите). За нормалната работа с Х е добре да имаме права на над 70 до 100 процеса (можете да видите някъде, че 40 са достатъчни, но не и ако ползвате пълноценно Х с Mozilla, OpenOffice, KDE и т.н.).

Какво казнат настройките? В самия файл е описано:

#        core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit
#        - maxlogins - max number of logins for this user
#        - priority - the priority to run user process with

Трябва да се обърне повече внимание на nproc (броя на процесите) и maxlogins (максимум логвания). Първото без второто няма много смисъл.

Да не забравим най-важното - в /etc/pam.d/login трябва да въведем задължително:

session  required  pam_limits.so

В противен случай зададените ограничения няма да работят.

По-подробно по темата:

http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap5sec44.html
http://www.dfdtech.net/linux/security/userlimits/
http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam-6.html#ss6.12
http://www.linux-bulgaria.org/lug-bg-list/archive/2003/Feb/0470.html

Благодарности на Г. Чорбаджийски за насоките.


<< Печат на кирилица с LPRNG и български език в LyX | Инсталация и стартиране на debian dosemu paradox4.5 >>