LINUX-BG   Адрес : http://www.linux-bg.org
Повече сигурност с pam_limits
От: Никола Антонов
Публикувана на: 28-06-2003
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=352271146
По страниците на нашите форуми много често се обсъждат въпроси, свързани със сигурността, спори се коя е най-сигурната дистрибуция, дали Линукс е по-добър от "Прозоречната ОС" по отношение на сигурността и т.н. Най-често тези дискусии се разпалват до неистово крещене и неизслушване на опонента. Обикновено се говори за мрежова сигурност, настройки на 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 >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.17 usr + 0.03 sys = 0.20 CPU)