Журнал LinuxFormat - перейти на главную

LXF165-166:Руб­ри­ка си­сад­ми­на

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Про­фи­ли­ро­вание и оп­ти­ми­за­ция)
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
 
[[Категория:Постоянные рубрики]]   
 
[[Категория:Постоянные рубрики]]   
 
''''''
 
 
 
'''Доктор обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает.'''
 
'''Доктор обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает.'''
  
Строка 354: Строка 351:
  
 
Су­ще­ст­ву­ет мно­же­ст­во ути­лит ре­зерв­но­го ко­пи­ро­вания на раз­ные слу­чаи жизни. В про­стей­шем слу­чае восполь­зуй­тесь rsync для эф­фек­тив­но­го пе­ре­но­са сво­ей фай­ло­вой сис­те­мы на уда­лен­ный ком­пь­ю­тер, или соз­дай­те ар­хив с фай­ла­ми на съем­ном но­си­те­ле с по­мо­щью tar. Ес­ли вы это де­лае­те, помните о том, от че­го за­щи­щае­тесь. Я ре­гу­ляр­но де­лаю ар­хи­вы сво­ей лич­ной фай­ло­вой сис­те­мы на внешний же­ст­кий диск с по­мо­щью tar, но, к сво­ему сты­ду, но­шу этот диск в сум­ке для но­ут­бу­ка вме­сте со всем осталь­ным. Так я за­щи­ща­юсь от неис­прав­но­сти же­ст­ко­го дис­ка, но не от кра­жи сум­ки для но­ут­бу­ка.
 
Су­ще­ст­ву­ет мно­же­ст­во ути­лит ре­зерв­но­го ко­пи­ро­вания на раз­ные слу­чаи жизни. В про­стей­шем слу­чае восполь­зуй­тесь rsync для эф­фек­тив­но­го пе­ре­но­са сво­ей фай­ло­вой сис­те­мы на уда­лен­ный ком­пь­ю­тер, или соз­дай­те ар­хив с фай­ла­ми на съем­ном но­си­те­ле с по­мо­щью tar. Ес­ли вы это де­лае­те, помните о том, от че­го за­щи­щае­тесь. Я ре­гу­ляр­но де­лаю ар­хи­вы сво­ей лич­ной фай­ло­вой сис­те­мы на внешний же­ст­кий диск с по­мо­щью tar, но, к сво­ему сты­ду, но­шу этот диск в сум­ке для но­ут­бу­ка вме­сте со всем осталь­ным. Так я за­щи­ща­юсь от неис­прав­но­сти же­ст­ко­го дис­ка, но не от кра­жи сум­ки для но­ут­бу­ка.
{{Врезка|right|Заголовок= Это не на­ша по­ли­ти­ка|Ширина=10%|Содержание=  
+
{{Врезка|right|Заголовок= Это не на­ша по­ли­ти­ка|Ширина=25%|Содержание=  
 
Ес­ли вы сис­тем­ный ад­минист­ра­тор Linux, то ва­ша жизнь бу­дет го­раз­до про­ще, ес­ли у ком­пании есть по­ли­ти­ка безо­пас­но­сти. Это обширная те­ма, и мне не хо­чет­ся на­чи­нать со­став­лять по­ли­ти­ку за вас.
 
Ес­ли вы сис­тем­ный ад­минист­ра­тор Linux, то ва­ша жизнь бу­дет го­раз­до про­ще, ес­ли у ком­пании есть по­ли­ти­ка безо­пас­но­сти. Это обширная те­ма, и мне не хо­чет­ся на­чи­нать со­став­лять по­ли­ти­ку за вас.
  
Строка 360: Строка 357:
  
 
Ес­ли вам нуж­ны при­ме­ры, зай­ди­те на infotech.com или на сайт SANS (http://bit.ly/SvgZrk).}}  
 
Ес­ли вам нуж­ны при­ме­ры, зай­ди­те на infotech.com или на сайт SANS (http://bit.ly/SvgZrk).}}  
{{Врезка|left|Заголовок=Вы слы­ша­ли это и рань­ше... |Ширина=10%|Содержание=
+
{{Врезка|left|Заголовок=Вы слы­ша­ли это и рань­ше... |Ширина=25%|Содержание=
 
Ес­ли у вас есть подпис­ка на LXF и доступ к элек­трон­ной вер­сии или ста­рые но­ме­ра жур­на­ла, мо­же­те вер­нуть­ся к несколь­ким ранним стать­ям, по­свя­щен­ным безо­пас­но­сти.
 
Ес­ли у вас есть подпис­ка на LXF и доступ к элек­трон­ной вер­сии или ста­рые но­ме­ра жур­на­ла, мо­же­те вер­нуть­ся к несколь­ким ранним стать­ям, по­свя­щен­ным безо­пас­но­сти.
  
Строка 438: Строка 435:
  
 
Клас­си­че­­ская ути­ли­та для этих це­лей – tripwire, и ее от­кры­тая вер­сия все еще доступ­на (http://bit.ly/h2pr9). Од­на­ко пол­но­цен­ная вер­сия уров­ня пред­при­ятия ста­ла ком­мер­че­­ским про­дук­том от Tripwire, Inc. Еще од­на ком­мер­че­­ская ути­ли­та – Cimtrak. Так­же мо­же­те взгля­нуть на AIDE (Automatic Intrusion Detection Environment – сре­да ав­то­ма­ти­че­­ско­­го оп­ре­де­ления втор­жений), ко­то­рая ско­рее все­го есть в ре­по­зи­то­ри­ях ва­ше­го ди­ст­ри­бу­ти­ва. Уч­ти­те, что эти ути­ли­ты нуж­но на­страи­вать, и от­че­ты, как и лог-фай­лы, бес­по­лез­ны, ес­ли их не чи­тать.
 
Клас­си­че­­ская ути­ли­та для этих це­лей – tripwire, и ее от­кры­тая вер­сия все еще доступ­на (http://bit.ly/h2pr9). Од­на­ко пол­но­цен­ная вер­сия уров­ня пред­при­ятия ста­ла ком­мер­че­­ским про­дук­том от Tripwire, Inc. Еще од­на ком­мер­че­­ская ути­ли­та – Cimtrak. Так­же мо­же­те взгля­нуть на AIDE (Automatic Intrusion Detection Environment – сре­да ав­то­ма­ти­че­­ско­­го оп­ре­де­ления втор­жений), ко­то­рая ско­рее все­го есть в ре­по­зи­то­ри­ях ва­ше­го ди­ст­ри­бу­ти­ва. Уч­ти­те, что эти ути­ли­ты нуж­но на­страи­вать, и от­че­ты, как и лог-фай­лы, бес­по­лез­ны, ес­ли их не чи­тать.
{{Врезка|right|Заголовок= Под зам­ком|Ширина=10%|Содержание=
+
{{Врезка|right|Заголовок= Под зам­ком|Ширина=25%|Содержание=
 
Ес­ли вы не за­да­ли па­роль для BIOS, помните, что ка­ж­дый, у ко­го есть фи­зи­че­­ский доступ к сер­ве­ру, смо­жет за­гру­зить его с соб­ст­вен­но­го но­си­те­ля и по­лу­чить пол­ный доступ. При за­дании па­ро­ля BIOS за­да­ча услож­ня­ет­ся лишь немно­го, разве что те­перь зло­умыш­леннику по­на­до­бит­ся от­верт­ка, что­бы снять же­ст­кий диск. Нуж­но ог­раничить фи­зи­че­­ский доступ к сер­ве­ру и по­ве­сить фи­зи­че­­ский за­мок или установить ка­кую-то сис­те­му с элек­трон­ны­ми кар­та­ми. Ка­ж­дый раз, когда я при­хо­жу чи­тать кур­сы в ком­панию с боль­шим да­та-цен­тром, я всегда про­шу по­ка­зать мне сер­вер­ную и поч­ти всегда слы­шу: «Из­вините, нет». }}  
 
Ес­ли вы не за­да­ли па­роль для BIOS, помните, что ка­ж­дый, у ко­го есть фи­зи­че­­ский доступ к сер­ве­ру, смо­жет за­гру­зить его с соб­ст­вен­но­го но­си­те­ля и по­лу­чить пол­ный доступ. При за­дании па­ро­ля BIOS за­да­ча услож­ня­ет­ся лишь немно­го, разве что те­перь зло­умыш­леннику по­на­до­бит­ся от­верт­ка, что­бы снять же­ст­кий диск. Нуж­но ог­раничить фи­зи­че­­ский доступ к сер­ве­ру и по­ве­сить фи­зи­че­­ский за­мок или установить ка­кую-то сис­те­му с элек­трон­ны­ми кар­та­ми. Ка­ж­дый раз, когда я при­хо­жу чи­тать кур­сы в ком­панию с боль­шим да­та-цен­тром, я всегда про­шу по­ка­зать мне сер­вер­ную и поч­ти всегда слы­шу: «Из­вините, нет». }}  
 
Ес­ли вы при­шли из ми­ра Windows, то, на­вер­ное, ин­те­ре­суе­тесь, по­че­му я не пред­ло­жил вам уста­но­вить ан­ти­ви­рус (один из мо­их сы­но­вей на сво­ей по­следней ра­бо­те управ­лял ин­фра­струк­ту­рой круп­но­го про­грамм­но­го про­ек­та и про­во­дил, ка­жет­ся, по­ло­ви­ну сво­его вре­мени за уста­нов­кой, об­нов­лением и за­пуском ан­ти­ви­русных про­грамм). Вре­до­носное ПО в Linux пред­став­ля­ет со­бой го­раз­до мень­шую про­бле­му – час­тич­но, по­доз­ре­ваю, по­то­му, что Linux го­раз­до ре­же ста­но­вит­ся це­лью атак пло­хих парней, а так­же из-за бо­лее вы­со­ко­го уров­ня безо­пас­но­сти.
 
Ес­ли вы при­шли из ми­ра Windows, то, на­вер­ное, ин­те­ре­суе­тесь, по­че­му я не пред­ло­жил вам уста­но­вить ан­ти­ви­рус (один из мо­их сы­но­вей на сво­ей по­следней ра­бо­те управ­лял ин­фра­струк­ту­рой круп­но­го про­грамм­но­го про­ек­та и про­во­дил, ка­жет­ся, по­ло­ви­ну сво­его вре­мени за уста­нов­кой, об­нов­лением и за­пуском ан­ти­ви­русных про­грамм). Вре­до­носное ПО в Linux пред­став­ля­ет со­бой го­раз­до мень­шую про­бле­му – час­тич­но, по­доз­ре­ваю, по­то­му, что Linux го­раз­до ре­же ста­но­вит­ся це­лью атак пло­хих парней, а так­же из-за бо­лее вы­со­ко­го уров­ня безо­пас­но­сти.

Текущая версия на 13:19, 5 ноября 2018

Доктор обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает.

Содержание

[править] По рецептам доктора Брауна

Эзо­те­ри­че­ское сис­тем­ное ад­ми­ни­ст­ри­ро­ва­ние из при­чуд­ли­вых за­во­ро­тов ки­шок сер­вер­ной

(thumbnail)
Д-р Крис Браун обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает

[править] Под­счет ядер

За ку­ли­са­ми энер­го­бло­ка со­об­ще­ст­ва, управ­ляю­ще­го раз­ра­бот­кой яд­ра Linux.

Вы слы­ша­ли о Мар­ке Брауне [Mark Brown] или То­ма­се Гляйк­снере [Thomas Gleixner]? Ду­маю, нет. Как и я. Но со­глас­но по­следнему от­че­ту от Linux Foundation, эти два раз­ра­бот­чи­ка внесли наи­боль­шее ко­ли­че­­ст­во из­менений в яд­ро, на­чи­ная с вер­сии 2.6.5.

Ис­ход­ные дан­ные для от­че­та фор­ми­ру­ют­ся пу­тем монито­рин­га из­менений на git.kernel.org. Ис­сле­ду­ют­ся во­про­сы «Бы­ст­ро ли это про­ис­хо­дит?», «Кто это де­ла­ет?», «Что они де­ла­ют?» и «Кто спон­сор?». В яд­ре Linux бо­лее 15 мил­лио­нов строк ко­да – это са­мый круп­ный про­ект со­вме­ст­ной раз­ра­бот­ки в ис­то­рии вы­чис­ли­тель­ной техники. Для сравнения, во всех се­ми книгах о Гар­ри Пот­те­ре – чуть боль­ше мил­лио­на слов.

Мно­гие сту­ден­ты мо­их кур­сов спра­ши­ва­ют: «Кто управ­ля­ет ядром?» Без­дум­ный от­вет – «Ни­кто», но на де­ле су­ще­ст­ву­ет хо­ро­шо от­ла­жен­ный про­цесс рас­смот­рения и ут­вер­ждения пат­чей-за­пла­ток яд­ра (кста­ти, “patch” – офи­ци­аль­ный тер­мин для опи­сания на­бо­ра из­менений: на­при­мер, для до­бав­ления но­вой функ­ции, под­держ­ки но­во­го уст­рой­ст­ва, ис­прав­ления ошиб­ки или уве­ли­чения про­из­во­ди­тель­но­сти). Обыч­но за­плат­ки рас­смат­ри­ва­ют­ся всей ко­ман­дой, за­тем ут­вер­ждают­ся раз­ра­бот­чи­ка­ми, от­ве­чаю­щи­ми за со­от­вет­ст­вую­щую под­сис­те­му, и, на­конец, принима­ют­ся в основ­ной ди­ст­ри­бу­тив Ли­ну­сом Тор­вальд­сом – у не­го ис­клю­чи­тель­ное пра­во ре­шать, что вой­дет в сле­дую­щий ре­лиз яд­ра.

Не­мно­го цифр: » 226 – столько ком­паний ра­бо­та­ет над ядром 3.2.

» 37 626 – ко­ли­че­­ст­во фай­лов в яд­ре 3.2.

» 14 – средний пе­ри­од вре­мени в ми­ну­тах ме­ж­ду при­менением пат­чей к яд­ру.

» 78 – среднее число дней от выпуска до вы­пуска.

» 12 243 – мак­си­маль­ное ко­ли­че­­ст­во пат­чей, ко­то­рое когда-ли­бо при­ме­ня­лось к вер­сии яд­ра.

» 17,9 – из­менения, при­хо­дя­щие­ся на до­лю ин­ди­ви­ду­аль­ных раз­ра­бот­чи­ков (%).

[править] Итак, вы хо­ти­те стать си­сад­ми­ном?

Пя­тая часть се­рии, ко­то­рая пре­вра­тит вас из но­вич­ка в звез­ду сис­тем­но­го ад­­ми­ни­ст­­ри­­ро­­ва­ния. Сей­час мы уста­но­вим web-сер­вер. На­конец в этой се­рии мы по­доб­ра­лись к то­му, что долж­ны де­лать сер­ве­ры – обслу­живать! Я ре­шил уста­но­вить web-сер­вер (хо­тя и не обыч­ный Apache), но по­пы­тал­ся обоб­щить про­цесс так, что­бы эти на­вы­ки при­го­ди­лись вам при уста­нов­ке лю­бо­го сер­ви­са.

На всех уро­ках этой се­рии мы поль­зу­ем­ся CentOS 6.2. Ес­ли вы хо­ти­те сле­до­вать за мной, уста­но­ви­те CentOS (мож­но и в вир­ту­аль­ную ма­ши­ну) в со­от­вет­ст­вии с опи­санием из пер­вой ста­тьи. У мно­гих команд из об­су­ж­дае­мых в этом ме­ся­це боль­шой объ­ем вы­ход­ных дан­ных, и на все здесь не хва­тит мес­та. Ес­ли вам нуж­ны под­роб­но­сти, то пол­ный транс­крипт мно­гих команд есть на на­шем сай­те: www.linuxformat.com/archives?issue=165, так что сме­лее об­ра­щай­тесь к нему в со­от­вет­ст­вую­щих мес­тах.

[править] Об­щая кар­ти­на

Конеч­но, де­та­ли уста­нов­ки и на­строй­ки сер­ви­са силь­но за­ви­сят от разновидности сер­виса, но в це­лом для это­го нуж­но вы­полнить сле­дую­щие ша­ги:

» Ус­та­но­вить сер­вис.

» Най­ти и про­честь его man-страницу (иногда для фай­ла на­строй­ки есть от­дель­ная man-страница).

» Из­менить его кон­фи­гу­ра­цию в со­от­вет­ст­вии со свои­ми по­треб­но­стя­ми.

» На­стро­ить за­пуск сер­ви­са при за­груз­ке сис­те­мы.

» За­пустить сер­вис вруч­ную.

» Про­ве­рить на­ли­чие со­об­щений об ошиб­ках и/или об успеш­ном за­пуске в лог-фай­ле.

» Про­ве­рить сер­вис.

[править] На­чи­на­ем

В мо­ей CentOS 6 был по умол­чанию уста­нов­лен клас­си­че­­ский HTTP-сер­вер Apache, но я ре­шил восполь­зо­вать­ся дру­гим сер­ве­ром – Lighttpd. На его сай­те (lighttpd.net) на­пи­са­но сле­дую­щее: «Lighttpd – на­деж­ный, бы­ст­рый, по­слушный и очень гиб­кий web-сер­вер, оп­ти­ми­зи­ро­ван­ный для вы­со­ко­про­из­во­ди­тель­но­го ок­ру­жения. У него очень неболь­шие тре­бо­вания к па­мя­ти по сравнению с дру­ги­ми web-сер­ве­ра­ми, и он бе­реж­но рас­хо­ду­ет ре­сур­сы про­цес­со­ра». Озвучивают его имя как “lighty [лег­кий]”.

Так как Apache уже уста­нов­лен на мо­ем ком­пь­ю­те­ре, нуж­но убе­дить­ся, что он не за­пу­щен, и не за­пускать его во вре­мя за­груз­ки. Ес­ли за­пустить и Lighttpd, и Apache, они оба по­про­бу­ют слу­шать порт 80, а это недо­пусти­мо.

# service httpd status

httpd is stopped

# chkconfig httpd --list

httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

Сер­вис от­клю­чен – от­лич­но. Но что­бы быть пол­но­стью уве­рен­ны­ми, луч­ше уда­лить httpd со­всем:

# rpm --erase httpd gnome-user-share

По­че­му я так­же уда­лил па­кет gnome-user-share? По­то­му что rpm го­во­рит, что он за­ви­сит от httpd, и я был вполне уве­рен, что он мне не ну­жен.

На­деж­но из­ба­вив­шись от Apache, пе­рей­дем к уста­нов­ке Lighttpd. Ока­зы­ва­ет­ся, что по­следнего нет в офи­ци­аль­ных ре­по­зи­то­ри­ях CentOS, как по­ка­зы­ва­ет бы­ст­рый по­иск:

# yum search lighttpd

No Matches found

Но, вве­дя в Google “CentOS6 lighttpd”, я на­шел rpmforge и за­гру­зил от­ту­да неболь­шой rpm:

# wget http://packages.sw.be/rpmforge-release/rpmforgerelease-0.5.2-2.el6.rf.i686.rpm

Это вер­сия для 32-бит­ных сис­тем. Что­бы за­гру­зить 64-бит­ную вер­сию, из­мените i686 на x86_64. Ко­ман­да rpm -qlp с этим па­ке­том по­ка­за­ла, что это не па­кет lighttpd, он про­сто со­дер­жит файл .repo, ука­зы­ваю­щий на ре­по­зи­то­рий rpmforge. Он так­же со­дер­жит фай­лы оп­ре­де­ления ре­по­зи­то­ри­ев для APT, ути­ли­ты управ­ления па­ке­та­ми Debian, но здесь они нам не нуж­ны.

Ус­та­но­вим па­кет:

# rpm -i rpmforge-release-0.5.2-2.el6.rf.i686.rpm



warning: rpmforge-release-0.5.2-2.el6.rf.i686.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY

Вы уви­ди­те, что rpm жа­лу­ет­ся на невозмо­жность про­ве­рить циф­ро­вую подпись па­ке­та, так как у нее нет со­от­вет­ст­вую­ще­го пуб­лич­но­го клю­ча (на са­мом де­ле, клю­чи есть в па­ке­те!). Те­перь по­иск с yum бо­лее уда­чен:

# yum search lighttpd

lighttpd.i686 : Lightning fast webserver with light system

requirements [Мол­ние­нос­ный web-сер­вер со скром­ны­ми тре­бо­ва­ния­ми к сис­те­ме]

и мы мо­жем ус­та­но­вить его:

# yum install lighttpd

Так, по­ка не­пло­хо. По­смот­рим, что у нас есть, пе­ре­чис­лив фай­лы в па­ке­те:

# rpm -ql lighttpd

... здесь поя­вит­ся длин­ный спи­сок фай­лов ...

Этот спи­сок да­ет от­ве­ты на несколь­ко важ­ных во­про­сов (не за­будь­те, что пол­ный транс­крипт есть на на­шем сай­те):

» Ка­кие ис­пол­няе­мые фай­лы здесь есть? Их два: lighttpd и lighttpd-angel (что бы это ни бы­ло).

» Где на­хо­дят­ся фай­лы на­строй­ки? Файл на­строй­ки верхнего уров­ня – /etc/lighttpd/lighttpd.conf, а фай­лы на­строй­ки для от­дель­ных мо­ду­лей на­хо­дят­ся в ка­та­ло­ге /etc/lighttpd/conf.d.

» Ку­да по­ме­ща­ют­ся фай­лы, ко­то­рые дол­жен об­слу­жи­вать сер­вер? В ка­та­лог /srv/www/lighttpd (со­глас­но офи­ци­аль­но­му стан­дар­ту ие­рар­хии фай­ло­вой сис­те­мы – Filesystem Hierarchy Standard, им во­об­ще-то дол­жен быть /srv/www, но мно­гие сис­те­мы не сле­ду­ют это­му пра­ви­лу).

» Есть ли man-страницы? Да, есть од­на страница под на­званием lighttpd.

» Есть ли лог-файл? Да, это /var/log/lighttpd (на са­мом де­ле ока­за­лось, что это целый ка­та­лог с лог-фай­ла­ми).

» Есть ли дру­гая до­ку­мен­та­ция? Да, в ка­та­ло­ге /usr/share/doc/lighttpd-1.4.28 есть мно­го тек­сто­вых фай­лов.

Сле­дую­щий шаг – оз­на­ко­мить­ся с man-страницей. Она до­воль­но ко­рот­кая, так как лишь опи­сы­ва­ет па­ра­мет­ры команд­ной стро­ки и от­сы­ла­ет нас к фай­лам /usr/share/doc за бо­лее под­роб­ной ин­фор­ма­ци­ей. Это на­чи­на­ет ка­зать­ся долгой ка­торгой, а я хо­чу немед­лен­но­го удов­ле­тво­рения. По­это­му для минималь­ной де­мон­ст­ра­ции ра­бо­ты сер­ве­ра я сде­лал вот что.

Во-пер­вых, до­ба­вил од­ну стро­ку тек­ста в файл /srv/www/lighttpd/index.html, что­бы у сер­ве­ра бы­ло что об­слу­жи­вать. При же­лании мо­же­те до­ба­вить ту­да мно­го хит­ро­ум­но­го HTML-ко­да, но для это­го тес­та мне бы­ло доста­точ­но стро­ки:

This is a test from Chris! [Это тест Кри­са!]

За­тем по­пы­тал­ся за­пус­тить сер­вер:

# service lighttpd start

Starting lighttpd: 2012-09-06 15:16:43: (server.c.722) couldn’t set ‘max filedescriptors’ Permission denied

Ай-яй-яй. Что здесь не так? Со­об­щение об от­сут­ст­вии прав досту­па от про­цес­са, за­пу­щен­но­го от имени суперполь­зо­ва­те­ля-root, необыч­но и ско­рее все­го оз­на­ча­ет, что опе­ра­цию за­пре­ща­ет SELinux. Что­бы это про­ве­рить, я по­про­бо­вал от­клю­чить SELinux и сно­ва за­пустить сер­вер:

# setenforce 0
# service lighttpd start

Starting lighttpd: [ OK ]

Те­перь все хо­ро­шо. Ес­ли вы по­ду­ма­ли: «Ка­кое ум­ное и проница­тель­ное пред­по­ло­жение!», ска­жу, что за по­следние несколь­ко лет ра­бо­ты с сис­те­ма­ми в сти­ле RedHat 6 (в ко­то­рых SELinux по умол­чанию ра­бо­та­ет в при­ну­ди­тель­ном ре­жи­ме Enforcing) ка­ж­дый раз, когда что-то не ра­бо­та­ет и я не мо­гу най­ти вес­кой при­чи­ны, моя обыч­ная ре­ак­ция – по­про­бо­вать от­клю­чить SELinux. Это не со­всем пра­виль­ное ре­шение, но в на­шем слу­чае оно сра­бо­та­ло.

Хо­ро­ший спо­соб узнать, за­пу­щен ли сер­вер – про­ве­рить, слу­ша­ет ли он за­дан­ный порт (в дан­ном слу­чае, 80). Это лег­ко:

# lsof -i TCP:80

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

lighttpd 2030 lighttpd 4u IPv4 15277 0t0 TCP *:http (LISTEN)

– у нас все в по­ряд­ке.

Уч­ти­те, за­пуск сер­ви­са ко­ман­дой service не оз­на­ча­ет, что он бу­дет за­пускать­ся при за­груз­ке сис­те­мы. Для это­го нуж­но вы­полнить еще од­ну ко­ман­ду:

# chkconfig lighttpd on

[править] От­кры­ва­ем порт

Пре­ж­де чем под­клю­чить­ся к сер­ве­ру, нуж­но сде­лать еще од­ну вещь – от­крыть порт 80 в бранд­мау­эре. Это лег­ко сде­лать ути­ли­той system-config-firewall (см. эк­ран­ный снимок на стр. 61), ко­то­рой мож­но восполь­зо­вать­ся, да­же ес­ли у вас есть толь­ко ssh-доступ к сер­ве­ру. (Не за­крой­те слу­чай­но порт для ssh!). Ес­ли те­перь от­крыть в брау­зе­ре ад­рес сер­ве­ра (http://192.168.1.64 – у вас, конеч­но, IP-ад­рес бу­дет дру­гим), на эк­ране дол­жен поя­вить­ся текст, ко­то­рый был до­бав­лен в index.html.

Итак, вот оно – на­ше немед­лен­ное удов­ле­тво­рение! Мы смог­ли сде­лать это, не за­гля­ды­вая в фай­лы на­строй­ки; но у вас вряд ли по­лу­чит­ся про­дви­нуть­ся на­мно­го даль­ше, как сле­ду­ет не ра­зо­брав­шись в них и не из­менив их. Файл на­строй­ки верхнего уров­ня lighttpd (/etc/lighttpd/lighttpd.conf) – ти­пич­ный при­мер та­ко­го фай­ла, пол­ный по­яснений-ком­мен­та­ри­ев и за­ком­мен­ти­ро­ван­ных за­пи­сей. Иногда из-за этих ком­мен­та­ри­ев слож­но уви­деть за­пи­си, по­это­му вот ма­лень­кий при­ем, ко­то­рый по­мо­жет от них из­ба­вить­ся:

# grep -v ‘^#’ /etc/lighttpd/lighttpd.conf | grep -v ‘^$’


Эта ко­ман­да ис­клю­чит из со­дер­жи­мо­го фай­ла ком­мен­та­рии и пустые стро­ки. Вы­бе­рем несколь­ко основ­ных строк:

var.server_root = “/srv/www”

server.port = 80

server.username = “lighttpd”

server.document-root = server_root + “/lighttpd”

Они за­да­ют со­от­вет­ст­вен­но:

» Ба­зо­вый ка­та­лог. Не­сколь­ко дру­гих важ­ных ка­та­ло­гов за­да­ют­ся от­но­си­тель­но него.

» Но­мер пор­та, ко­то­рый бу­дет слу­шать сер­вер.

» Поль­зо­ва­тель, от имени ко­то­ро­го бу­дет за­пускать­ся сер­вер. Из­на­чаль­но он за­пуска­ет­ся от имени су­пер­поль­зо­ва­те­ля-root (что­бы свя­зать­ся с пор­том 80); за­тем пе­ре­клю­ча­ет­ся на ука­зан­но­го поль­зо­ва­те­ля. Этот поль­зо­ва­тель до­бав­ля­ет­ся в /etc/passwd при уста­нов­ке па­ке­та.

» Ка­та­лог, со­дер­жа­щий об­слу­жи­вае­мое со­дер­жи­мое.

В фай­ле lighttpd так­же час­то за­да­ют­ся па­ра­мет­ры про­из­во­ди­тель­но­сти. При­мер из это­го фай­ла – стро­ка

server.max-connections = 1024

По­хо­же, что раз­ра­бот­чи­ки за­да­ли их зна­чения пра­виль­но, и я не со­ве­то­вал бы вам ме­нять их, ес­ли толь­ко не (а) вы знае­те, что де­лае­те, и (б) вы смо­же­те объ­ек­тив­но из­ме­рить лю­бые из­менения в про­из­во­ди­тель­но­сти при из­менении па­ра­мет­ров.

[править] Та­ин­ст­вен­ный сад

Конеч­но, те­перь мож­но сде­лать мно­гое дру­гое – вклю­чить скрип­ты PHP CGI, на­стро­ить несколь­ко вир­ту­аль­ных хостов и т. д. Ка­ж­дое из этих дей­ст­вий сно­ва по­гру­зит вас в фай­лы. На са­мом де­ле при уста­нов­ке лю­бо­го сер­ви­са вы по­па­дае­те в но­вый мини-мир син­так­си­са фай­лов на­строй­ки. Это как от­крыть дверь в та­ин­ст­вен­ный сад, где вы доселе не бы­ва­ли.

Пре­ж­де чем за­кон­чить, вспомним о SELinux. Как вы помните, мы от­клю­чи­ли его, что­бы бы­ст­ро все по­пра­вить. Од­на­ко, как бы я ни от­но­сил­ся к SELinux, он свое де­ло де­ла­ет, и про­сто от­клю­чить его – не луч­шая идея. Вме­сто это­го нуж­но раз­ра­бо­тать но­вую по­ли­ти­ку SELinux, ко­то­рая по­зво­ли­ла бы Lighttpd де­лать то, что ему необходимо. Ока­зы­ва­ет­ся, это от­но­си­тель­но про­сто. Вот что нуж­но сде­лать: сна­ча­ла с по­мо­щью auditd мы за­пи­шем в жур­нал те дей­ст­вия, ко­то­рые lighttpd пы­та­ет­ся вы­полнить при за­пуске. За­тем восполь­зу­ем­ся ма­лень­кой удоб­ной про­грам­мой audit2allow (из па­ке­та policycoreutils-python), что­бы пре­об­ра­зо­вать за­пре­щен­ные опе­ра­ции, за­пи­сан­ные auditd в лог-файл, в пра­ви­ла по­ли­ти­ки SELinux. На­конец, мы уста­но­вим но­вые пра­ви­ла с по­мо­щью semodule.

Ко­ман­ды при­водятся ни­же. Не за­будь­те за­гля­нуть в пол­ный транс­крипт за под­роб­но­стя­ми.

Сна­ча­ла пе­ре­фор­ми­ру­ем всю по­ли­ти­ку SELinux. Это мо­жет за­нять ми­ну­ту или две:

# semodule -DB

Мне так­же при­шлось ус­та­но­вить про­грам­му audit2allow:

# yum install policycoreutils-python

Эта ко­ман­да ус­та­но­ви­ла еще во­семь па­ке­тов для раз­ре­ше­ния за­ви­си­мо­стей. За­тем пе­ре­за­пус­тим де­мон auditd:

# service auditd restart

Те­перь сно­ва вклю­чим SELinux и по­про­бу­ем пе­ре­за­пустить lighttpd. Да, сно­ва ниче­го не по­лу­чит­ся, но нам нуж­но пой­мать за­пре­щаю­щие со­об­щения. Они бу­дут за­пи­са­ны в /var/log/audit/audit.log:

# setenforce 1
# service lighttpd restart

Вот хит­рый мо­мент. Мы из­вле­ка­ем со­от­вет­ст­вую­щие со­об­ще­ния, за­пи­сан­ные auditd, и пе­ре­да­ем их audit2allow, ко­то­рая пре­об­ра­зу­ет их в пра­ви­ла по­ли­тик SELinux:

# grep lighttpd /var/log/audit/audit.log | audit2allow -M lighttpdmaxfds

Сей­час в те­ку­щем ка­та­ло­ге поя­вил­ся файл lighttpdmaxfds.te. Это обыч­ный тек­сто­вый файл. Так­же поя­вит­ся ском­пи­ли­ро­ван­ная (дво­ич­ная) вер­сия в lighttpdmaxfds.pp. Ее-то мы и за­гру­зим:

# semodule -i lighttpdmaxfds.pp

Те­перь lighttpd нор­маль­но за­пус­ка­ет­ся с вклю­чен­ным SELinux:

# service lighttpd restart

Stopping lighttpd: [FAILED]

Starting lighttpd: [ OK ]

На­ко­нец, при­ну­ди­тель­но пе­ре­фор­ми­ру­ем по­ли­ти­ку SELinux:

# semodule -B

(бла­го­да­рю за по­мощь Google и не­ко­го FL0 на сай­те Warp1337).

У ме­ня оста­лось мес­то толь­ко на па­ру слов о лог-фай­лах, о ко­то­рых за всем этим мы по­за­бы­ли. Для та­ких сер­ви­сов, как lighttpd, ко­то­рые пи­шут в свои жур­на­лы на­пря­мую (а не че­рез rsyslog), лог-фай­лы лег­ко най­ти, вы­ве­дя спи­сок фай­лов, от­кры­тых web-сер­ве­ром, на­при­мер, так:

# lsof -c lighttpd | grep /var/log

Ко­ман­да по­ка­зы­ва­ет, что это фай­лы /var/log/error.log и /var/log/access.log. В них нет ниче­го осо­бен­но ин­те­рес­но­го, но в лог-фай­ле с ошиб­ка­ми час­то есть со­об­щения, из ко­то­рых мож­но по­нять, по­че­му не ра­бо­та­ет сер­вис, осо­бен­но ес­ли это сер­вис вро­де bind (сер­вер DNS), очень при­дир­чи­вый к син­так­си­су фай­лов на­строй­ки и фай­лов зон. Вот удоб­ный спо­соб на­блю­дения за за­пуском сер­ве­ра: от­крой­те два тер­ми­на­ла ря­дом и в пер­вом за­пусти­те tail -f с именем лог-фай­ла (так вы смо­же­те ви­деть но­вые со­об­щения), а во вто­ром – за­пусти­те де­мон ко­ман­дой service.

Од­на из мо­их са­мых час­тых оши­бок при ре­шении про­блем – об­ра­щение к жур­на­лам в са­мую по­след­нюю оче­редь; на са­мом де­ле при ди­аг­но­сти­ке про­бле­мы прежде всего за­гляните имен­но в них.

В по­следней час­ти неболь­шой се­рии мы на­денем на­ши шля­пы безо­пас­но­сти и об­ра­тим­ся к этой те­ме. Уви­дим­ся! |

[править] Уст­ранение оши­бок

Конеч­но, при пер­вом за­пуске ваш сер­вис бу­дет ра­бо­тать от­лич­но, и вы мо­же­те пой­ти по­гу­лять и по­лю­бо­вать­ся ба­раш­ка­ми в небе. Но ес­ли что-то пой­дет не так, вот несколь­ко стан­дарт­ных ве­щей, ко­то­рые сто­ит про­ве­рить:

» За­пу­щен ли сер­вис на са­мом де­ле? (По­ищи­те его ко­ман­дой grep в вы­во­де ps -ef.)

» От­крыт ли нуж­ный(е) порт(ы)? (На этот во­прос от­ве­тит lsof -i.)

» От­крыт ли порт в бранд­мау­эре? (За­пусти­те iptables -L или восполь­зуй­тесь системной ути­ли­той настройки брандмауэра systemconfig-firewall.)

» По­яв­ля­ют­ся ли ка­кие-то со­об­щения в лог-фай­ле с мо­мен­та за­пуска сер­ви­са до по­пыт­ки об­ра­щения к нему?

[править] Про­фи­ли­ро­вание и оп­ти­ми­за­ция

Код тор­мо­зит? Требуется оп­ти­ми­за­ция? Изу­чи­те мир ста­ти­сти­ки про­из­во­ди­тель­но­сти яд­ра с perf.

По­доз­ре­ваю, что в ми­ре есть мно­же­ст­во во­пию­ще недо­заг­ру­жен­ных сер­ве­ров, вре­мя про­стоя ко­то­рых пре­вы­ша­ет 90 %. В са­мом де­ле, уве­ли­чение за­груз­ки сер­ве­ров – один из дви­жу­щих при­чин ис­поль­зо­вания вир­туа­ли­за­ции. Но на дру­гом кон­це спек­тра есть и мно­го сис­тем, ко­то­рые вы­жи­ма­ют про­из­во­ди­тель­ность из Linux до крайнего пре­де­ла. Ес­ли вы пы­тае­тесь на­це­дить из сво­их сер­ве­ров еще ка­пель­ку, рас­смот­ри­те ути­ли­ту монито­рин­га про­из­во­ди­тель­но­сти под на­званием perf, спо­соб­ную по­мочь най­ти наи­бо­лее час­то ис­поль­зуе­мые уча­ст­ки ко­да, оп­ти­ми­за­ция ко­то­рых принесет пло­ды с наи­боль­шей веро­ят­но­стью.

Perf – ин­тер­фейс команд­ной стро­ки к све­жей (ну, до­воль­но све­жей) воз­мож­но­сти яд­ра Linux: за­пи­си па­ра­мет­ров про­из­во­ди­тель­но­сти для вы­пол­няе­мо­го ко­да. Не­ко­то­рые из этих за­ме­ров ап­па­рат­ные, они ис­поль­зу­ют счет­чи­ки про­цес­со­ра для фик­са­ции та­ких со­бы­тий, как про­ма­хи кэ­ша или для под­сче­та ко­ли­че­­ст­ва вы­полнен­ных команд. А не­ко­то­рые – про­грамм­ные, в них с по­мо­щью тай­ме­ров или дру­гих про­грамм­ных со­бы­тий ана­ли­зи­ру­ет­ся по­ве­дение про­грам­мы.

Син­так­сис команд perf на­по­ми­на­ет син­так­сис rpm или git на­ли­чи­ем мно­же­ст­ва суб­команд. На­при­мер, perf list вы­ве­дет спи­сок доступ­ных со­бы­тий, perf top сфор­ми­ру­ет ди­на­ми­че­­ские дан­ные про­фи­ли­ро­вания для всей сис­те­мы (нечто вро­де top), perf record за­пи­шет за­дан­ные со­бы­тия для за­дан­ной ко­ман­ды (она так­же мо­жет под­клю­чить­ся к за­пу­щен­но­му про­цес­су), а perf report сфор­ми­ру­ет от­чет по сгенери­ро­ван­ным дан­ным. С perf annotate мож­но да­же спустить­ся до уров­ня ма­шин­ных команд. Она за­пустит за­дан­ную ко­ман­ду, раз­бе­рет ка­ж­дую функ­цию и сфор­ми­ру­ет от­чет с про­цент­ны­ми дан­ны­ми для ка­ж­дой вы­полнен­ной ко­ман­ды. Но не при­да­вай­те ре­зуль­та­там слиш­ком мно­го зна­чения, ес­ли вы­бор­ка мала. Помните шут­ку о лжи, гнус­ной лжи и ста­ти­сти­ке?

По­сле за­пуска perf у вас поя­вит­ся мно­жество цифр, как по­сле vmstat или cat /proc/interrupts; и уж будь­те уве­ре­ны, они вам о чем-то хо­тят со­об­щить, нуж­но толь­ко знать – что. Ду­маю, следует на­пи­сать ру­ко­во­дство с при­ме­ра­ми. Есть доб­ро­воль­цы?

«Не придавайте результатам много значения, если выборка мала.»


[править] Итак, вы хо­ти­те стать си­сад­ми­ном?

Шес­тая часть се­рии, ко­то­рая пре­вра­тит вас из но­вич­ка в звез­ду сис­тем­но­го ад­ми­ни­ст­ри­ро­ва­ния.

[править] По­го­во­рим о безо­пас­но­сти.

В этой, по­следней, час­ти се­рии я хо­чу об­ра­тить­ся к те­ме безо­пас­но­сти сер­ве­ров. На­вер­ное, оста­вить ее на­после­док бы­ло ошиб­кой, поскольку мож­но по­ду­мать, что безо­пас­ность – это то, чем мож­но за­нять­ся в по­след­нюю оче­редь, когда все осталь­ное уже сде­ла­но. Так поступать не сто­ит. Безо­пас­ность и ра­зум­ный уро­вень па­ра­нойи долж­ны быть за­ло­же­ны во всех ва­ших дей­ст­ви­ях. Кста­ти, ес­ли вам по­ка­жет­ся, что боль­шая часть то­го, о чем мы по­го­во­рим се­го­дня – нечто са­мо со­бой ра­зу­мею­щее­ся, для это­го есть при­чи­на. Для боль­шин­ст­ва из это­го.

Для на­ча­ла по­пы­та­ем­ся дать оп­ре­де­ление безо­пас­но­сти. Фор­маль­ная мо­дель безо­пас­но­сти опи­сы­ва­ет­ся мо­де­лью CIA – кон­фи­ден­ци­аль­ность (Confidentiality), це­ло­ст­ность (Integrity) и доступ­ность (Availability).

Кон­фи­ден­ци­аль­ность – это га­ран­тия то­го, что ин­фор­ма­ция на ва­ших сер­ве­рах доступ­на толь­ко тем, у ко­го есть пра­во ей поль­зо­вать­ся. Це­ло­ст­ность – это га­ран­тия то­го, что ин­фор­ма­ция со­хра­ня­ет­ся в пер­во­на­чаль­ном ви­де – это от­но­сит­ся не толь­ко к дан­ным, но и к про­грам­мам. А доступ­ность – это га­ран­тия то­го, что дан­ные и сер­ви­сы, пре­достав­ляе­мые сис­те­мой, доступ­ны имен­но долж­ным образом (на­при­мер, мож­но удов­ле­тво­рить два пер­вых тре­бо­вания, от­клю­чив ком­пь­ю­тер от се­ти и заперев его в сейф, но это не слиш­ком хо­ро­шо по­влия­ет на доступ­ность дан­ных; помните, что ата­ки, на­це­лен­ные на от­каз от об­слу­жи­вания и при­зван­ные небла­го­при­ят­но по­вли­ять на доступ­ность вашей сис­те­мы – од­на из са­мых по­пу­ляр­ных раз­но­вид­но­стей вредо­носных атак).

Безо­пас­ность – это не про­грам­ма, ко­то­рую мож­но уста­но­вить. Это по­сто­ян­ный про­цесс. По­это­му вот план под­держ­ки безо­пас­но­сти сис­те­мы из де­ся­ти пунк­тов.

1: Во­вре­мя за­гру­жай­те об­нов­ления безо­пас­но­сти сво­его ди­ст­ри­бу­ти­ва

Вре­мя от вре­мени в при­ло­жениях вы­яв­ля­ют­ся по­тен­ци­аль­ные уяз­ви­мо­сти. У круп­ных ди­ст­ри­бу­ти­вов Linux есть сер­ви­сы об­нов­ления, с ко­то­рых мож­но за­гру­зить об­нов­ления безо­пас­но­сти для ис­прав­ления этих оши­бок в те­чение пе­рио­да под­держ­ки ди­ст­ри­бу­ти­ва. Для RedHat 6 это 10 лет (но нуж­но при­об­ре­сти подпис­ку). В пре­ды­ду­щих вер­си­ях RedHat для при­менения за­плат ис­поль­зо­ва­лась ути­ли­та up2date, но от нее от­ка­за­лись в поль­зу yum; бла­го­да­ря мо­ду­лю рас­ши­рения yum-plugin-security, yum смо­жет вы­вес­ти спи­сок об­нов­лений безо­пас­но­сти и уста­но­вить их.

Дру­гой при­мер – ре­ли­зы Ubuntu Server с дол­го­сроч­ной под­держ­кой [Long Term Support], на­при­мер, 12.04 LTS, бес­плат­ны и под­дер­жи­ва­ют­ся в те­чение пя­ти лет. В Ubuntu для ав­то­ма­ти­че­­ской уста­нов­ки об­нов­лен­ных па­ке­тов мож­но восполь­зо­вать­ся па­ке­том unattendedupgrades – в нем мож­но на­стро­ить об­нов­ление всех па­ке­тов или толь­ко об­нов­лений безо­пас­но­сти.

2: Вы­би­рай­те на­деж­ные па­ро­ли

Лю­бая сис­те­ма, у ко­то­рой есть внешнее ин­тернет-под­клю­чение и сер­вис ау­тен­ти­фи­ка­ции (на­при­мер, ssh), еже­днев­но под­вер­га­ет­ся ты­ся­чам по­пы­ток несанк­циониро­ван­но­го вхо­да в сис­те­му от ав­то­ма­ти­зи­ро­ван­ных скрип­тов. Та­ко­ва жизнь.

Вы­бор на­деж­ных па­ро­лей для учет­ных за­пи­сей поль­зо­ва­те­ля жизнен­но необ­хо­дим. Я пи­сал об этом недав­но (см. LXF160) и не бу­ду по­вто­рять­ся. Но не за­будь­те о па­ро­лях на мар­шру­ти­за­то­рах и дру­гих се­те­вых уст­рой­ст­вах – никогда не остав­ляй­те их в зна­чениях по умол­чанию.

3: Ре­гу­ляр­но де­лай­те ре­зерв­ные ко­пии

Воз­мож­но, вы ду­мае­те, что ме­ж­ду ре­зерв­ным ко­пи­ро­ванием и безо­пас­но­стью нет пря­мой свя­зи. Но помните, что од­на из со­став­ляю­щих CIA – доступ­ность. По­это­му ес­ли пло­хие парни унич­то­жат ва­ши дан­ные (или ес­ли ваш неза­пят­нан­ный диск ис­пустит по­следний вздох и скон­ча­ет­ся), ре­зерв­ные ко­пии име­ют ре­шаю­щее зна­чение для во­зоб­нов­ления доступ­но­сти дан­ных.

Су­ще­ст­ву­ет мно­же­ст­во ути­лит ре­зерв­но­го ко­пи­ро­вания на раз­ные слу­чаи жизни. В про­стей­шем слу­чае восполь­зуй­тесь rsync для эф­фек­тив­но­го пе­ре­но­са сво­ей фай­ло­вой сис­те­мы на уда­лен­ный ком­пь­ю­тер, или соз­дай­те ар­хив с фай­ла­ми на съем­ном но­си­те­ле с по­мо­щью tar. Ес­ли вы это де­лае­те, помните о том, от че­го за­щи­щае­тесь. Я ре­гу­ляр­но де­лаю ар­хи­вы сво­ей лич­ной фай­ло­вой сис­те­мы на внешний же­ст­кий диск с по­мо­щью tar, но, к сво­ему сты­ду, но­шу этот диск в сум­ке для но­ут­бу­ка вме­сте со всем осталь­ным. Так я за­щи­ща­юсь от неис­прав­но­сти же­ст­ко­го дис­ка, но не от кра­жи сум­ки для но­ут­бу­ка.

Ес­ли у вас несколь­ко сер­ве­ров, вас мо­гут за­ин­те­ре­со­вать сред­ст­ва цен­тра­ли­зо­ван­но­го ре­зерв­но­го ко­пи­ро­вания, та­кие как BackupPC или Bacula, с по­мо­щью ко­то­рых мож­но де­лать ре­зерв­ные ко­пии несколь­ких сис­тем на один ком­пь­ю­тер. Для на­строй­ки обе­их по­тре­бу­ют­ся неко­то­рые уси­лия. По­ду­май­те о том, где бу­де­те хранить ре­зерв­ные ко­пии. Луч­ше все­го хранить их в дру­гом мес­те (это по­мо­жет, ес­ли ваш дом сго­рит дот­ла), но это неудоб­но, ес­ли нуж­но бы­ст­ро восста­но­вить дан­ные. Так­же нуж­но до­ве­рять тем, кто бу­дет хранить или шиф­ро­вать их. Ска­жем, мно­гие хра­нят их на об­ла­ке (на­при­мер, в Amazon S3), это по­зво­ля­ет бы­ст­ро восста­но­вить дан­ные и сто­ит по­ряд­ка 10 цен­тов за 1 ГБ в ме­сяц.

Не­дав­но Amazon за­пусти­ла но­вый сер­вис дол­го­вре­мен­но­го ар­хи­ви­ро­вания Glacier, вре­мя по­лу­чения дан­ных в ко­то­ром мо­жет со­став­лять до несколь­ких ча­сов. Рас­цен­ки на­чи­на­ют­ся от 1 цен­та за ГБ в ме­сяц. Ра­зу­ме­ет­ся, для ре­зерв­но­го ко­пи­ро­вания в об­ла­ко ну­жен хо­ро­ший ис­хо­дя­щий ка­нал.

4: Не за­пускай­те сер­ви­сов, ко­то­рые вам не нуж­ны

Это оче­вид­но. Ес­ли вам не нуж­но пре­достав­лять кли­ен­там, ска­жем, FTP, не за­пускай­те сер­вер FTP. Луч­ше не уста­нав­ли­вай­те его во­об­ще. Не то что он небезо­па­сен, но в сер­ве­рах FTP оп­ре­де­лен­но бы­ли об­на­ру­же­ны уяз­ви­мо­сти, по­зво­ляю­щие по­лу­чить доступ root. За­чем рис­ко­вать? Это бы­ло про­бле­мой ранних вер­сий Unix, в ко­то­рых все сер­ви­сы по умол­чанию бы­ли за­пу­ще­ны и при­хо­ди­лось от­клю­чать боль­шин­ст­во из них (конеч­но, и вре­ме­на тогда бы­ли про­ще). В со­вре­мен­ных ди­ст­ри­бу­ти­вах Linux по умол­чанию (обыч­но) вклю­чен толь­ко ssh.

5: Обу­чай­те сво­их поль­зо­ва­те­лей

Понимаю, что ес­ли мы го­во­рим о сер­ве­рах, труд­но по­нять, что име­ет­ся в ви­ду под «поль­зо­ва­те­лем». В дан­ном кон­тек­сте это нек­то, об­ла­даю­щий ин­фор­ма­ци­ей, ко­то­рая мо­жет по­мочь зло­умыш­ленникам ата­ко­вать ва­шу сис­те­му, или тот, у ко­го есть учет­ная запись на на­столь­ном ком­пь­ю­те­ре, под­клю­чен­ном к се­ти. По­лу­чение досту­па к та­ко­му ком­пь­ю­те­ру – пре­крас­ное на­ча­ло для зло­умыш­ленника, пы­таю­ще­го­ся по­добраться к кор­по­ра­тив­ной ба­зе дан­ных. Конеч­но, бы­ло бы здо­ро­во из­ба­вить­ся от нена­деж­ных ком­пь­ю­те­ров с Windows и за­менить их на ком­пь­ю­те­ры с Linux, но это по­тре­бу­ет вре­мени. По­это­му ­как минимум убе­ди­тесь, что поль­зо­ва­те­ли знакомы с осно­вами: не от­кры­вать вло­жения в пись­мах от незна­ко­мых лю­дей; бло­ки­ро­вать ком­пь­ю­тер, ухо­дя на обед; не со­об­щать нико­му свой па­роль; и не по­се­щать сай­ты, не имею­щие от­но­шения к ра­бо­те.

У SANS есть несколь­ко отличн­ных ре­сур­сов, ко­то­рые по­мо­гут в обу­чении поль­зо­ва­те­лей: www.securingthehuman.org и www.sans.org. И ес­ли у ва­шей ком­пании нет про­грам­мы обес­пе­чения безо­пас­но­сти, по­ду­май­те, как убе­дить сво­его босса на­чать ее.

6: Чи­тай­те жур­на­лы (или хо­тя бы от­че­ты)

Ну да, лог-фай­лы непод­дель­но скуч­ны, и вряд ли кто-то бу­дет их чи­тать. Но есть ути­ли­ты, на­при­мер, logwatch, ко­то­рые про­чи­та­ют их за вас и сгенери­ру­ют от­че­ты. На­при­мер, ко­ман­да

# logwatch --detail med --range Today --print

сфор­ми­ру­ет от­чет о се­го­дняшних ло­гах. В ди­ст­ри­бу­ти­вах logwatch час­то вклю­че­на и на­строе­на по умол­чанию. Обыч­но она за­пуска­ет­ся как еже­днев­ное за­дание cron и от­прав­ля­ет от­че­ты на поч­ту root. Но поль­зы от нее ника­кой, ес­ли не за­гля­ды­вать в от­че­ты. Что в них сле­ду­ет ис­кать? Со­об­щения о до­бав­лен­ных учет­ных за­пи­сях, ко­то­рые вам незна­ко­мы, о но­вых (неиз­вест­ных) уста­нов­лен­ных про­грам­мах и о по­вто­ряю­щих­ся ошиб­ках вхо­да в сис­те­му от та­ких про­грамм, как sshd и su.

7: Не от­клю­чай­те сред­ст­ва ман­дат­но­го кон­тро­ля досту­па

Ес­ли вы не поняли, о чем я, то под ними я имею в ви­ду та­кие ве­щи, как SELinux и AppArmor. Несколь­ко раз по­стра­дав от SELinux (как я на мо­их учеб­ных кур­сах), есть со­блазн его от­клю­чить. Ес­ли что-то не ра­бо­та­ет, мож­но вре­мен­но от­клю­чить SELinux, что­бы уз­нать, в нем ли де­ло, хо­тя ес­ли ваш уро­вень па­ра­нойи доста­точ­но вы­сок, вы не за­хо­ти­те это­го де­лать. Но от­клю­чать его со­всем – явно не луч­шая идея. У него есть свои за­да­чи (ес­ли у вас есть ста­рые но­ме­ра, за­гляните в LXF158, там я немно­го пи­сал об этом).

С по­мо­щью ути­ли­ты audit2allow мож­но соз­дать пра­ви­ла SELinux для при­ло­жений, у ко­то­рых их нет. Ме­ся­ц назад я рас­ска­зы­вал об этом. Для сис­тем с AppArmor есть ути­ли­та aa-genprof.

8: Изу­чи­те и безо­пас­но на­строй­те за­пускае­мые при­ло­жения

Здесь труд­но ска­зать что-то кон­крет­ное: все за­ви­сит от при­ло­жений. Вот несколь­ко при­ме­ров. Во-пер­вых, для де­мо­на sshd мож­но от­клю­чить вход в сис­те­му от имени суперполь­зо­ва­те­ля-root, что за­ста­вит поль­зо­ва­те­лей ис­поль­зо­вать обыч­ные учет­ные за­пи­си и при необ­хо­ди­мо­сти пе­ре­клю­чать­ся на root с по­мо­щью su. Убе­ди­тесь, что он на­стро­ен имен­но так (по­смот­ри­те зна­чение па­ра­мет­ра PermitRootLogin в /etc/ssh/sshd_config). Дру­гой при­мер – в Samba мож­но ог­раничи­вать диа­па­зо­ны IP-ад­ре­сов, в ко­то­рые она экс­пор­ти­ру­ет раз­де­ляе­мые ка­та­ло­ги. Убе­ди­тесь, что эти диа­па­зо­ны по­кры­ва­ют ва­шу сеть и ниче­го кро­ме.

9: На­строй­те бранд­мау­эр

За­пустить бранд­мау­эр с фильт­ра­ци­ей па­ке­тов в Linux про­сто, бла­го­да­ря ко­ду се­те­во­го фильт­ра, ко­то­рый встро­ен в яд­ро, и ко­ман­де iptables, ко­то­рая управ­ля­ет пра­ви­ла­ми. Од­на­ко ес­ли вы но­ви­чок в Linux, я не со­ве­то­вал бы за­пускать iptables на­пря­мую. На­бо­ры пра­вил для на­стоя­ще­го бранд­мау­эра мо­гут быть очень слож­ны­ми и тре­бу­ют глу­бо­ких знаний TCP/IP.

В RedHat поль­зуй­тесь ути­ли­той system-config-firewall. С ней лег­ко от­крыть нуж­ные пор­ты; так­же мож­но за­дать «до­ве­рен­ные» ин­тер­фей­сы, ко­то­рые не бу­дут фильт­ро­вать­ся (на­при­мер, для внут­ренних се­тей).

В Ubuntu есть небольшая ути­лит­ка ufw, ко­то­рая с по­мо­щью до­воль­но про­сто­го (по сравнению с iptables) син­так­си­са по­зво­ляет управ­лять пра­ви­ла­ми. На­при­мер, для от­кры­тия пор­та доста­точ­но скомандовать

$ sudo ufw allow ssh

А ес­ли хо­ти­те сде­лать кое-что по­хит­рее, мож­но сде­лать сле­дую­щее:

$ sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22

Так вы по­лу­чае­те боль­ше воз­мож­но­стей по сравнению с ути­ли­та­ми вро­де system-config-firewall.

С по­мо­щью до­воль­но удач­но на­зван­ной гра­фи­че­­ской про­грам­мы firestarter (www.fs-security.com) мож­но лег­ко за­да­вать пра­ви­ла и про­смат­ри­вать тра­фик, ко­то­рый бло­ки­ру­ет бранд­мау­эр. Стоит взгля­нуть и на shorewall (www.shorewall.net). Это еще од­на ути­ли­та, ко­то­рая сгенери­ру­ет на­бо­ры пра­вил iptables из опи­сания по­ве­дения бранд­мау­эра на язы­ке вы­со­ко­го уров­ня.

Мир Shorewall – это не щелч­ки мы­шью, а тек­сто­вые кон­фи­гу­ра­ци­он­ные фай­лы. В них мож­но за­дать определенные «зо­ны» и оговорить дви­жение тра­фи­ка ме­ж­ду ними. Это имен­но то, что требуется для на­строй­ки шлю­за, у ко­то­ро­го есть се­те­вые со­единения с внешним ми­ром, с внут­ренней ча­ст­ной се­тью и с «де­ми­ли­та­ри­зо­ван­ной зо­ной» пуб­лич­но доступ­ных сер­ве­ров.

10: Ре­гу­ляр­но за­пускай­те сред­ст­во об­на­ру­жения втор­жений

Прин­цип ра­бо­ты средств об­на­ру­жения втор­жений обыч­но со­сто­ит в том, что они де­ла­ют «снимок» фай­ло­вой сис­те­мы (или ука­зан­ных ва­ми час­тей) в ис­ход­ном, чис­том со­стоянии ком­пь­ю­те­ра, а за­тем пе­рио­ди­че­­ски де­ла­ют но­вые снимки и сравнива­ют их с ори­ги­на­лом. Снимок – не пол­ная ко­пия фай­лов, он со­дер­жит лишь та­кие па­ра­мет­ры, как раз­мер, вла­дель­ца, вре­мя досту­па и кон­троль­ную сум­му MD5 ка­ж­до­го фай­ла. Это­го обыч­но доста­точ­но для рас­по­зна­вания, что что-то бы­ло из­менено.

Обыч­но подобным образом нуж­но от­сле­жи­вать толь­ко сис­тем­ные ка­та­ло­ги, на­при­мер, /etc, /bin и /usr/bin, все из­менения в ко­то­рых долж­ны быть вам из­вест­ны. Конеч­но, та­кие ути­ли­ты ско­рее по­зво­ля­ют среа­ги­ро­вать на про­бле­му, чем пре­дот­вра­тить ее. Они не по­ме­ша­ют ха­ке­ру взло­мать вашу сис­те­му, но вы по крайней мере об этом уз­нае­те.

Клас­си­че­­ская ути­ли­та для этих це­лей – tripwire, и ее от­кры­тая вер­сия все еще доступ­на (http://bit.ly/h2pr9). Од­на­ко пол­но­цен­ная вер­сия уров­ня пред­при­ятия ста­ла ком­мер­че­­ским про­дук­том от Tripwire, Inc. Еще од­на ком­мер­че­­ская ути­ли­та – Cimtrak. Так­же мо­же­те взгля­нуть на AIDE (Automatic Intrusion Detection Environment – сре­да ав­то­ма­ти­че­­ско­­го оп­ре­де­ления втор­жений), ко­то­рая ско­рее все­го есть в ре­по­зи­то­ри­ях ва­ше­го ди­ст­ри­бу­ти­ва. Уч­ти­те, что эти ути­ли­ты нуж­но на­страи­вать, и от­че­ты, как и лог-фай­лы, бес­по­лез­ны, ес­ли их не чи­тать.

Ес­ли вы при­шли из ми­ра Windows, то, на­вер­ное, ин­те­ре­суе­тесь, по­че­му я не пред­ло­жил вам уста­но­вить ан­ти­ви­рус (один из мо­их сы­но­вей на сво­ей по­следней ра­бо­те управ­лял ин­фра­струк­ту­рой круп­но­го про­грамм­но­го про­ек­та и про­во­дил, ка­жет­ся, по­ло­ви­ну сво­его вре­мени за уста­нов­кой, об­нов­лением и за­пуском ан­ти­ви­русных про­грамм). Вре­до­носное ПО в Linux пред­став­ля­ет со­бой го­раз­до мень­шую про­бле­му – час­тич­но, по­доз­ре­ваю, по­то­му, что Linux го­раз­до ре­же ста­но­вит­ся це­лью атак пло­хих парней, а так­же из-за бо­лее вы­со­ко­го уров­ня безо­пас­но­сти.

Но ан­ти­ви­русные про­дук­ты для Linux, разумеется, су­ще­ст­вуют. По­пу­ляр­ное от­кры­тое ре­шение – программа ClamAV. Есть и ком­мер­че­­ские про­дук­ты, на­при­мер, Avast. Боль­шин­ст­во ви­русных сиг­на­тур, ко­то­рые они ищут – это ви­ру­сы для Windows, по­это­му за­пуск та­ких ути­лит в Linux за­щи­ща­ет ком­пь­ю­те­ры в основ­ном от неблаговидной ро­ли «пе­ре­носчи­ков», т. е. от на­ли­чия в них ин­фи­ци­ро­ван­ных фай­лов, ко­то­рые мо­гут быть пе­ре­да­ны на ком­пь­ю­те­ры с Windows.

На­де­юсь, что эта ста­тья не преврати­ла вас в маниакальных па­ра­нои­ков. Безо­пас­ность – это во мно­гом про­сто здра­вый смысл. Не забывайте, что од­на­ж­ды ска­зал пре­зи­дент Эй­зен­хауэр: «В на­прас­ных по­ис­ках аб­со­лют­ной безо­пас­но­сти мы станем бан­кро­та­ми». |

Персональные инструменты
купить
подписаться
Яндекс.Метрика