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

LXF156:По рецептам доктора Брауна

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

По рецептам доктора Брауна

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



Дай ра­бо­ту, на­сяльника

LXF156.sysadmin.spectru opt2.png

Мы все зна­ем, что Linux чу­де­сен, но мож­но ли с ним сде­лать карь­е­ру? Док­тор счи­та­ет, что да.

И ногда мои кур­сы по­сеща­ют сту­ден­ты, «от­ды­хаю­щие от ра­бо­ты» (то есть по­про­сту без­ра­бот­ные) – они пла­тят за обу­чение из сво­его кар­ма­на, на­деясь улуч­шить свои пер­спек­ти­вы на рын­ке тру­да в бу­ду­щем. Как пре­по­да­ва­тель, я ощущаю осо­бую от­вет­ст­вен­ность, когда кто-то хо­чет, что­бы я уве­ли­чил его шан­сы за­ра­бо­тать на хлеб. Мы все зна­ем, что Linux – луч­шая ОС на планете, но дей­ст­ви­тель­но ли обу­чение на кур­сах сис­тем­но­го ад­минист­ри­ро­вания в Linux – правильный вы­бо­р для этих лю­дей?

Сайт itjobswatch.co.uk фор­ми­ру­ет ста­ти­сти­ку рын­ка тру­да, со­би­рая ин­фор­ма­цию с сай­тов ва­кан­сий в сфе­ре IT. Ста­ти­сти­ка, разумеется, осно­ва­на на по­ис­ке по клю­че­вым сло­вам в опи­саниях ва­кан­сий, и к ней нуж­но от­но­сить­ся с осто­рож­но­стью. Но она по­зво­ля­ет по­нять неко­то­рые ин­те­рес­ные мо­мен­ты, и я про­вел сча­ст­ли­вое ут­ро за вво­дом по­ис­ко­вых за­про­сов в этот сайт. Ни­же при­ве­де­ны неко­то­рые добытые мною по­ка­за­те­ли.

По­ка­за­те­ли осно­ва­ны на средних зна­чениях за три ме­ся­ца (конец ин­тер­ва­ла – 26 ян­ва­ря 2012 г.). Для сравнения так­же при­во­дят­ся по­ка­за­те­ли за тот же пе­ри­од год и два го­да на­зад. Боль­ше все­го вдох­нов­ля­ет не аб­со­лют­ное зна­чение циф­р, а то, что во всех сфе­рах ми­ра СПО (по­иск по “Tomcat”, “PHP”, “Hadoop”, “Drupal”, “Red Hat” и “Ubuntu”) – стой­кий восхо­дя­щий тренд.

Путь толь­ко на­верх

Правда, часть этих тех­но­ло­гий возник­ла со­всем недав­но, и един­ст­вен­ный путь для них – на­верх. Об­рат­ный ре­зуль­тат, впро­чем, де­мон­ст­ри­ру­ют за­про­сы по на­званиям основ­ных сис­тем UNIX (та­кие как “Solaris”, “HPUX” и “AIX”) – ко­ли­че­­ст­во всех их без ис­клю­чения по­сто­ян­но па­да­ет.

Конеч­но, с кон­кре­ти­за­ци­ей рода ра­бо­ты и ме­сто­по­ло­жения циф­ры падают. Ес­ли вы, скажем, раз­ра­бот­чик Drupal и ище­те ра­бо­ту в Тэ­му­ор­те, за­будь­те об этом. Ее нет. Но не верь­те мне на сло­во – зай­ди­те на itjobswatch.co.uk и убе­ди­тесь са­ми.

Кон­тей­не­ры OpenVZ

Ис­поль­зуй­те свое «же­ле­зо» на пол­ную си­лу с OpenVZ, лег­кой про­грам­мой для вир­туа­ли­за­ции, иде­аль­ной для хос­тинг-про­вай­де­ров.

В ми­ре безд­на тех­но­ло­гий вир­туа­ли­за­ции. Да­же ес­ли ог­раничить­ся толь­ко при­менимы­ми в Linux, най­дет­ся доста­точ­но, что­бы гла­за за­сле­зи­лись: Bochs, DOSEMU, KVM, VServer, OpenVZ, Parallels, раз­лич­ные вер­сии VMWare, QEMU, Xen... спи­сок мож­но про­дол­жить.

Се­го­дня я хо­чу рас­ска­зать вам об OpenVZ. Это тех­но­ло­гия яд­ра Linux, по­зво­ляю­щая за­пускать несколь­ко вир­ту­аль­ных ча­ст­ных сер­ве­ров (VPS) на од­ном фи­зи­че­­ском ком­пь­ю­те­ре. Ка­ж­дый из сер­ве­ров при этом вы­гля­дит как от­дель­ный сер­вер с от­дель­ны­ми досту­пом root, IP-ад­ре­сом, таб­ли­цей про­цес­сов, фай­ло­вой сис­те­мой, пра­ви­ла­ми бранд­мау­эра и т. д. От средств пол­ной вир­туа­ли­за­ции вро­де Xen или VMWare эту про­грам­му от­ли­ча­ет то, что в ка­ж­дом эк­зем­п­ля­ре VPS ис­поль­зу­ет­ся од­на и та же раз­де­ляе­мая ко­пия яд­ра Linux. По­это­му, на­при­мер, с OpenVZ нель­зя за­гру­зить эк­зем­п­ляр Windows 7 и эк­зем­п­ляр RedHat, и нель­зя за­гру­жать мо­ду­ли яд­ра неза­ви­си­мо в ка­ж­дый VPS. Но «про­стран­ст­во поль­зо­ва­те­ля» в ка­ж­дом VPS мо­жет быть раз­ным, по­это­му мож­но, на­при­мер, за­пустить CentOS и SUSE ря­дом на од­ном и том же яд­ре. Это эф­фек­тив­ное ре­шение, и мож­но соз­дать доста­точ­но пол­ную ил­лю­зию от­дель­но ад­минист­ри­руе­мых ком­пь­ю­те­ров, что­бы удов­ле­тво­рить поль­зо­ва­те­лей, ко­то­рые не хо­тят мно­го пла­тить за хостинг-услу­ги. Это де­ла­ет OpenVZ при­вле­ка­тель­ной тех­но­ло­ги­ей для хостинг-про­вай­де­ров, же­лаю­щих по­лу­чить мак­си­маль­ную при­быль при ог­раничен­ных вло­жениях в обо­ру­до­вание.

На­чи­на­ем

OpenVZ – тех­но­ло­гия, на осно­ве ко­то­рой ра­бо­та­ют Virtuozzo Containers. Это ком­мер­че­­ская вир­туа­ли­за­ция сер­ве­ра от Parallels (www.parallels.com/products/pvc) – ком­пании, по­жа­луй, луч­ше все­го из­вест­ной на­столь­ны­ми про­дук­та­ми для вир­туа­ли­за­ции, по­зво­ляю­щи­ми за­пустить Windows на Mac. Virtuozzo Containers не бес­пла­тен, но ес­ли вы хо­ти­те немно­го по­ра­бо­тать в команд­ной стро­ке, OpenVZ по­зво­лит восполь­зо­вать­ся этой тех­но­ло­ги­ей бес­плат­но. Она со­сто­ит из мо­ди­фи­ци­ро­ван­ной вер­сии яд­ра Linux, на­бо­ра ути­лит команд­ной стро­ки и кол­лек­ции шаб­ло­нов. Шаб­лон по су­ти пред­став­ля­ет со­бой сжа­тый tar-ар­хив па­ке­тов, ко­то­рые вы хо­ти­те уста­но­вить на VPS. Шаб­ло­ны уско­ря­ют соз­дание эк­зем­п­ля­ров VPS. Хостинг-про­вай­де­ры обыч­но на­чи­на­ют с уста­нов­ки ди­ст­ри­бу­ти­ва Linux на свое обо­ру­до­вание. В на­шем слу­чае они мо­гут за­гру­зить OpenVZ-вер­сию яд­ра, на­стро­ить его за­груз­ку в Grub и уста­но­вить ути­ли­ты про­стран­ст­ва поль­зо­ва­те­ля. И яд­ро, и ути­ли­ты доступ­ны в ви­де RPM-па­ке­тов на сай­те OpenVZ, по­это­му уста­нов­ка не долж­на быть слож­ной.

Как всегда, пред­вку­шая немед­лен­ное удо­воль­ст­вие, а за­гру­зил об­раз Live CD с сай­та OpenVZ (http://wiki.openvz.org/Download_live_CD) и уста­но­вил его на сер­вер Dell PowerEdge. Диск ме­ня немно­го раз­оча­ро­вал – не столь­ко из-за неук­лю­же­го ин­тер­фей­са команд­ной стро­ки, сколь­ко из-за воз­рас­та: в нем ис­поль­зу­ет­ся за­груз­чик Lilo и ста­рое яд­ро (2.6.18). Нет ни пре­дуста­нов­лен­ных шаб­ло­нов, ни yum, ни wget. Но за­то есть яд­ро OpenVZ, ути­ли­ты команд­ной стро­ки OpenVZ и man-страницы. И на нем есть ра­бо­чий сер­вер ssh, по­это­му я за­гру­зил шаб­лон CentOS с сай­та OpenVZ на сво­ем но­ут­бу­ке и ско­пи­ро­вал его ко­ман­дой scp на сер­вер сле­дую­щим об­ра­зом:

wget http://download.openvz.org/template/precreated/centos-5-x86_64.tar.gz

scp centos-5-x86_64.tar.gz root@192.168.1.144:/vz/templates/cache

Ус­та­но­вив шаб­лон, я смог под­клю­чить­ся к сер­ве­ру и соз­дать VPS, вот так:

# vzctl create 102 --ostemplate centos-5-x86_64

Creating container private area (centos-5-x86_64)

Performing postcreate actions

Container private area was created
(thumbnail)
OpenVZ: виртуальные частные серверы, создаваемые за секунды из готовых шаблонов, с установкой поверх общего ядра Linux.
# vzctl set 102 --hostname test102.example.com --save

Saved parameters for CT 102

 # vzctl set 102 --ipadd 192.168.1.102 --save

Saved parameters for CT 102

 # vzctl set 102 --userpasswd root:pink-turtle

Те­перь все го­то­во для за­пус­ка эк­зем­п­ля­ра:

 # vzctl start 102

Starting container ...

Container is mounted

Setting CPU units: 1000

Configure meminfo: 65536

Set hostname: test102.example.com

Container start in progress...

... и за­пус­ка в нем сер­ве­ра sshd:

 # vzctl exec 102 service sshd start

Starting sshd: [ OK ]

На­ко­нец, я мо­гу под­клю­чить­ся к но­во­му VPS по ssh:

 # ssh 192.168.1.102

root@192.168.1.102’s password:

[root@test102 ~]#

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

Ос­та­но­вим кон­тейнер

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


 # vzctl stop 102

Stopping container ...

Container was stopped

Container is unmounted

...а на­все­гда унич­то­жить – так:

 # vzctl destroy 102

Вы ви­ди­те, что ко­ман­да vzctl – «ра­бо­чая ло­шад­ка» для управ­ления кон­тейнером. Под­ко­ман­дой set за­да­ет­ся на­бор па­ра­мет­ров – оп­ре­де­ляя, нуж­но ли за­пускать кон­тейнер ав­то­ма­ти­че­­ски при за­груз­ке хоста, соз­дать па­ро­ли для учет­ных за­пи­сей поль­зо­ва­те­лей, до­ба­вить IP-ад­ре­са, за­дать MAC-ад­рес кон­тейнера и ли­ми­ты на по­треб­ление ре­сур­сов. Под­ко­ман­да exec по­зво­ля­ет за­пустить про­из­воль­ную ко­ман­ду в кон­тек­сте за­дан­но­го кон­тейнера. На­при­мер, спи­сок от­кры­тых пор­тов кон­тейнера мож­но вы­вес­ти так:

  1. vzctl exec 102 lsof -i

COMMAND PID USER FD TYPE DEVICE SIZE

NODE NAME

sshd 29989 root 3u IPv4 76125 TCP *:ssh (LISTEN)

sendmail 30015 root 4u IPv4 76193 TCP 127.0.0.1:smtp (LISTEN)

httpd 30033 root 3u IPv4 76232 TCP *:http (LISTEN)

httpd 30034 apache 3u IPv4 76232 TCP *:http (LISTEN)

У ка­ж­до­го кон­тейнера есть свой IP-ад­рес и свое лич­ное про­стран­ст­во но­ме­ров пор­тов. Так, порт 80 кон­тейнера 102 пол­но­стью от­де­лен от пор­та 80 кон­тейнера 103. «За ку­ли­са­ми» OpenVZ ис­поль­зу­ет гло­баль­ный файл на­строй­ки /etc/vz/vz.conf (при­ме­няе­мый ко всем кон­тейнерам) и фай­лы на­строй­ки кон­тейнеров /etc/vz/conf/xxx.conf, где xxx – иден­ти­фи­ка­тор кон­тейнера. Ус­та­нов­ка Live CD со­дер­жит при­ме­ры фай­лов, а под­роб­но­сти мож­но уз­нать на man-странице vz.conf. У хостинг-про­вай­де­ра ре­шения вро­де OpenVZ остав­ля­ют некое ощу­щение «всех яиц в од­ной кор­зине», в том смыс­ле, что ес­ли фи­зи­че­­ский сер­вер вый­дет из строя или бу­дет ата­ко­ван ха­ке­ром, он по су­ти останет­ся без вир­ту­аль­ных ча­ст­ных сер­ве­ров кли­ен­тов. Но это спра­вед­ли­во для всех тех­но­ло­гий вир­туа­ли­за­ции.

Управ­ля­ем ре­сур­са­ми

OpenVZ – не тех­но­ло­гия пол­ной вир­туа­ли­за­ции. Хо­тя ка­ж­дый кон­тейнер ви­дит свою соб­ст­вен­ную фай­ло­вую сис­те­му, он не ви­дит соб­ст­вен­ных дис­ко­вых раз­де­лов фик­си­ро­ван­но­го раз­ме­ра. Вме­сто это­го фай­ло­вая сис­те­ма кон­тейнера свя­зы­ва­ет­ся с фай­ло­вой сис­те­мой хоста, так что (на­при­мер) ка­та­лог /home кон­тейнера с иден­ти­фи­ка­то­ром 102 пред­став­ля­ет со­бой ка­та­лог /vz/private/102/home хоста.

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

По­следний хит­рый при­ем OpenVZ – воз­мож­ность пе­ре­но­са VPS с од­но­го уз­ла уст­ройств на дру­гой, да­же при ра­бо­таю­щем VPS. Для хостинг-про­вай­де­ра, ко­то­рый толь­ко что рас­ко­ше­лил­ся на до­полнитель­ное обо­ру­до­вание и хо­чет рас­пре­де­лить на­груз­ку поль­зо­ва­те­ля на но­вые ком­пь­ю­те­ры, это по­тря­саю­щая воз­мож­ность. На сай­те OpenVZ есть ру­ко­во­дство поль­зо­ва­те­ля, хо­тя местами его не помешало бы и об­но­вить, и пол­ный на­бор man-страниц (http://wiki.openvz.org/images/9/9a/Man_pages.pdf). Но луч­ший спо­соб зна­ком­ст­ва с ним – уста­но­вить про­грам­му и по­про­бо­вать что-нибудь сде­лать. В этом и заключается пре­лесть от­кры­то­го ПО.

Etcetera в ил­лю­ст­ра­ци­ях – часть 4

Изу­чай­те фай­лы в /etc ка­ж­дый ме­сяц с на­шим удоб­ным ру­ко­во­дством. В этот раз зна­ко­мим­ся с hosts.allow и hosts.deny.

(thumbnail)
Файл /etc/hosts.allow позволяет отфильтровать подключения к сервису путем идентификации клиентского компьютера.

Фай­лы /etc/hosts.allow и /etc/hosts.deny — фай­лы на­строй­ки ме­ханиз­ма управ­ления досту­пом, ко­то­рый на­зы­ва­ет­ся «оберт­ки TCP [TCP wrappers]» и пре­достав­ля­ет се­те­вым сер­ви­сам до­полнитель­ный уро­вень безо­пас­но­сти, по­зво­ляя управ­лять тем, ка­кие сер­ви­сы мо­гут быть доступ­ны с оп­ре­де­лен­ных кли­ент­ских ком­пь­ю­те­ров или се­тей. TCP wrappers бы­ли на­пи­са­ны Ви­ет­сой Венема [Wietsa Venema], ко­то­рый ра­бо­тал в Универ­си­те­те Эйн­дхо­ве­на и, по­жа­луй, бо­лее все­го из­вес­тен как ав­тор поч­то­вой сис­те­мы Postfix и та­ких ути­лит безо­пас­но­сти, как SATAN и Coroner’s Toolkit.

Су­ще­ст­ву­ет два под­хо­да в ис­поль­зо­вании TCP wrappers. Пер­вый – «неви­но­вен, по­ка ви­на не до­ка­за­на». В нем все под­клю­чения раз­ре­ше­ны, ес­ли они яв­но не за­бло­ки­ро­ва­ны в hosts.deny. Вто­рой – «ви­но­вен, по­ка не до­ка­за­но об­рат­ное»: все со­единения бло­ки­ру­ют­ся, ес­ли они яв­но не раз­ре­ше­ны в hosts.allow. Стро­гие ад­минист­ра­то­ры, не до­пускаю­щие те­чи на судне, на­вер­ня­ка вы­бе­рут вто­рой под­ход и нач­нут с фай­ла hosts.deny, со­дер­жа­ще­го все­го од­ну стро­ку:

ALL: ALL

LXF156.sysadmin.spectru opt5.png

За­тем они ука­жут раз­ре­шен­ные со­че­тания сер­вис/кли­ент в hosts.allow. Этот файл да­ет боль­шую гиб­кость в опи­сании со­единений кли­ен­тов. Мож­но вве­сти кон­крет­ный IP-ад­рес или на­бор ад­ре­сов (ско­рее все­го, здесь вы ука­же­те свою локаль­ную сеть) или имя ком­пь­ю­те­ра или до­ме­на. Од­на­ко уч­ти­те, что для имен ком­пь­ю­те­ров TCP wrappers при­хо­дит­ся вы­пол­нять об­рат­ные DNS-за­про­сы, а это влия­ет на про­из­во­ди­тель­ность.

На за­ре TCP wrappers про­вер­ки досту­па вы­пол­ня­лись от­дель­ной про­грам­мой tcpd. Обыч­но так на­зы­вае­мый «су­пер­сер­вер», та­кой как inetd, слу­шал вхо­дя­щие со­единения от имени сер­ви­са и за­тем за­пускал tcpd. По­сле вы­полнения про­ве­рок и об­ра­бот­ки па­ра­мет­ров, ука­зан­ных в hosts.allow и hosts.deny, tcpd за­пускал сер­вер. Се­го­дня inetd и tcpd поч­ти не ис­поль­зу­ют­ся. Од­на­ко на удив­ление мно­го сер­ви­сов все еще удо­стаи­ва­ют вниманием hosts.allow и hosts.deny по­сред­ст­вом биб­лио­те­ки libwrap (см. врез­ку).

Еще боль­ше поль­зы

Кро­ме управ­ления досту­пом к сер­ви­су пу­тем иден­ти­фи­ка­ции ком­пь­ю­те­ра кли­ен­та, TCP wrappers мо­гут вы­пол­нять и дру­гие дей­ст­вия при под­клю­чении кли­ен­та. Мож­но за­пи­сать в жур­нал все за­про­сы на под­клю­чение (с по­мо­щью syslog), от­пра­вить кли­ен­ту со­дер­жи­мое за­ранее за­дан­но­го фай­ла «баннера» (час­то как со­об­щение «толь­ко для ав­то­ри­зо­ван­ных поль­зо­ва­те­лей») или за­пустить лю­бую ко­ман­ду обо­лоч­ки. На man-странице hosts_access опи­сан ба­зо­вый син­так­сис hosts.allow и hosts.deny, а на man-странице hosts_options – до­полнитель­ные воз­мож­но­сти. А про­чтя ори­ги­наль­ный до­ку­мент Венемы (ftp://ftp.porcupine.org/pub/security/tcp_wrapper.pdf), вы уз­нае­те, что основ­ным мо­ти­вом раз­ра­бот­ки TCP wrappers бы­ло от­сле­жи­вание по­пы­ток ха­ке­ра взло­мать ком­пь­ю­тер­ную сис­те­му в Эйн­дхо­ве­не.


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