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

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

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Категория:Постоянные рубрики Д-р Крис Браун Доктор обучает, пишет и консультирует п…»)
 
Строка 1: Строка 1:
 
[[Категория:Постоянные рубрики]]   
 
[[Категория:Постоянные рубрики]]   
  
Д-р Крис Браун
+
''''''
  
Доктор обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает.
+
'''Доктор обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает.'''
  
Рас­ши­рение учеб­но­го порт­фо­лио
+
== По рецептам доктора Брауна ==
  
 +
''Эзо­те­ри­че­ское сис­тем­ное ад­ми­ни­ст­ри­ро­ва­ние из при­чуд­ли­вых за­во­ро­тов ки­шок сер­вер­ной''
 +
======
 +
[[Файл:Chris_fmt.png |left |100px |thumb|'''Д-р Крис Браун''' обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает]]
 +
{{Врезка|left|Заголовок= Рас­ши­рение учеб­но­го порт­фо­лио|Ширина=40%|Содержание=
 
Linux Foundation пред­ла­га­ет несколь­ко учеб­ных про­грамм, но ес­ли рань­ше они пред­на­зна­ча­лись для на­стоя­щих экс­пер­тов в об­лас­ти яд­ра (на­при­мер, «Внут­реннее уст­рой­ст­во и от­лад­ка яд­ра Linux» или «От­лад­ка драй­ве­ров уст­ройств в Linux»), то недав­но учеб­ное порт­фо­лио бы­ло рас­ши­ре­но и вклю­чи­ло кур­сы для поль­зо­ва­те­лей и ад­минист­ра­то­ров, та­кие как «Ад­минист­ри­ро­вание Linux» или «Ар­хи­тек­ту­ра об­ла­ка и его раз­вер­ты­вание». Ком­пания пред­ла­га­ет и бо­лее ко­рот­кие про­грам­мы про­дол­жи­тель­но­стью от двух ча­сов до двух дней, ка­саю­щие­ся ще­кот­ли­вой те­мы со­вмес­ти­мо­сти от­кры­то­го ПО, в ко­то­рой я так несве­дущ, что да­же не знаю, что с чем долж­но быть со­вмес­ти­мо или (бли­же к те­ме) по­че­му со­вмес­ти­мость от­кры­тых про­грамм обес­пе­чить сложнее, чем со­вмес­ти­мость за­кры­тых.
 
Linux Foundation пред­ла­га­ет несколь­ко учеб­ных про­грамм, но ес­ли рань­ше они пред­на­зна­ча­лись для на­стоя­щих экс­пер­тов в об­лас­ти яд­ра (на­при­мер, «Внут­реннее уст­рой­ст­во и от­лад­ка яд­ра Linux» или «От­лад­ка драй­ве­ров уст­ройств в Linux»), то недав­но учеб­ное порт­фо­лио бы­ло рас­ши­ре­но и вклю­чи­ло кур­сы для поль­зо­ва­те­лей и ад­минист­ра­то­ров, та­кие как «Ад­минист­ри­ро­вание Linux» или «Ар­хи­тек­ту­ра об­ла­ка и его раз­вер­ты­вание». Ком­пания пред­ла­га­ет и бо­лее ко­рот­кие про­грам­мы про­дол­жи­тель­но­стью от двух ча­сов до двух дней, ка­саю­щие­ся ще­кот­ли­вой те­мы со­вмес­ти­мо­сти от­кры­то­го ПО, в ко­то­рой я так несве­дущ, что да­же не знаю, что с чем долж­но быть со­вмес­ти­мо или (бли­же к те­ме) по­че­му со­вмес­ти­мость от­кры­тых про­грамм обес­пе­чить сложнее, чем со­вмес­ти­мость за­кры­тых.
  
Строка 16: Строка 20:
  
 
Мо­жет, в Apple и де­ла­ют пре­крас­ные ин­тер­фей­сы, но их при­ко­вы­вание к се­бе поль­зо­ва­те­ля и склон­ность к су­деб­ным ис­кам с боль­ши­ми день­га­ми мне несим­па­тич­ны. В мыслях у ме­ня некий жест с дву­мя паль­ца­ми, но бо­юсь его по­ка­зы­вать. Вдруг у Apple есть на него па­тент.
 
Мо­жет, в Apple и де­ла­ют пре­крас­ные ин­тер­фей­сы, но их при­ко­вы­вание к се­бе поль­зо­ва­те­ля и склон­ность к су­деб­ным ис­кам с боль­ши­ми день­га­ми мне несим­па­тич­ны. В мыслях у ме­ня некий жест с дву­мя паль­ца­ми, но бо­юсь его по­ка­зы­вать. Вдруг у Apple есть на него па­тент.
 +
}}
 +
===Под­счет ядер===
 +
 +
''За ку­ли­са­ми энер­го­бло­ка со­об­ще­ст­ва, управ­ляю­ще­го раз­ра­бот­кой яд­ра 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.)
 +
 +
» По­яв­ля­ют­ся ли ка­кие-то со­об­щения в лог-фай­ле с мо­мен­та за­пуска сер­ви­са до по­пыт­ки об­ра­щения к нему?

Версия 08:50, 2 ноября 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.)

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

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