книги хакеры / журнал хакер / 139_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ВыборрежимаработыSELinux
натождествопользователя, игнорируядругуюинформацию, например, оролипользователявсистеме, функциии уровнедоверияконкретнойпрограммыинеобходимостив целостностиданных. Каждаяучетнаязаписьимеетполную свободудействийвпределахсвоихполномочий.
Кактыпонимаешь, развернутьсясDAC особеннонегде: всеилиничего; винда— итадаетбольшевозможностейпо настройкедоступакобъектам. ПоэтомусегоднядляLinux доступнырешения, базирующиесянасовершеннодругой моделизащиты— MAC (Mandatory Access Control, прину-
дительныйконтрольдоступа). Онипозволяютопределить политикибезопасностинадвсемипроцессамииобъектами, решениеодоступепринимаетсянаосновебольшегоколичестваинформацииобобъекте, анетолькоосновываясьна тождествепользователя. ПричемMAC неотменяет, адополняетDAC, таккаксначалапроверяютсяправаUnix, и, если онизапрещаютдоступ, тодальнейшаяпроверкапростоне производится. Проверкаправвыполняетсятольковтом случае, еслистандартныеправаUnix разрешаютдоступк объекту. Любойобъектпомещаетсявнекуювиртуальнуюпесочницу, котораяпозволяетприложениювыполнятьтолько строгорегламентированныезадачи. Причемприописании доступакобъектуконкретныереализациимогутпридерживатьсяразныхпринципов: оченьстрогиеправилапотипу «чтонеразрешеноявно— запрещено» и«минимально необходимыепривилегии». Например, можнонастроить системутак, чтовеб-сервербудетслушатьсоединенияна строгоопределенномпорту, сможетчитатьфайлытолько вуказанномкаталогеитакдалее. Тоестьописатьповедениесистемывеенормальномсостоянии, создавжесткий каркас, закоторыйнельзябудетвыскочить. Этопозволяет выполнятьпрограммысправамиобычногопользователя, адоступкнеобходимымресурсамуказыватьприпомощи
политик. ВдистрибутивахLinux используютсядварешения: SELinux вRedHat иклонах, атакжеAppArmor вUbuntu.
Вядреверсии2.6.30 появилсякодещеодногопроекта— TOMOYO Linux (tomoyo.sf.jp), которомупророчатсветлое будущее, нопокапоумолчаниюоннигденеиспользуется. Давайрассмотримихособенности, атакжеплюсыиминусы.
СВЕРХЗАЩИЩЕННЫЙSELINUX
ПроектSELinux (Security Enhanced Linux, selinuxproject. org) зародилсявнедрахU.S. NSA (National Security Agency),
хмурыенеразговорчивыедядькикоторогопоставилисвоей цельюдопилитьLinux такимобразом, чтобыегоможнобыло спокойноиспользоватьнегде-нибудь, авправительственныхсистемах. Анонсированобщественностив2000 году, затемразработчикисправедливорешили: зачемчто-то делатьсамим, есливинтернетеестьмногожелающих? В
ГрафическийинструментSELinux Administration
результатесегодняпроектразвиваетсяподлицензиейGNU GPL иужевключенвсоставядраветки2.6.х, такжевыпол-
ненаадаптациядляFreeBSD иOpenSolaris.
РеализацияMAC требуетчеткогоописанияправил, что можетпривестикобразованиюбольшогоихколичества. ПоэтомувSELinux использованаконцепцияроль-основан-
ногоконтролядоступаRole-Based Access Control (RBAC), в
которойопределяютсяролиидоступпользователей. МеханизмзащитывSELinux носитназваниеType Enforcement (TE) ипозволяетзакрепитьзакаждымпроцессомифайлом, которыенеобходимоконтролировать, некуюметку. Если процесс, запущенныйотимениадминистратора, скомпрометирован, тоущерб, которыйможетбытьпричинен системе, ограничентолькотем, кчемуонможетобращаться, согласуясьсустановленнымидлянегоправилами(аони описываютповедениеоченьтонко). ТакжевSELinux реализованамногоуровневаясистемаобеспечениябезопас-
ности(MLS, Multi-Level Security model), ноеезадействуют тольковособыхслучаях, например, вправительственных многопользовательскихсистемах, требующихчрезвычайно высокогоуровнязащиты. Когдавпроцессеработысистемы субъектпытаетсяоказатьнекоедействиенаобъект, SELinux принимаетрешениеодопустимостиуказанногодействия, основываясьнаконтекстахбезопасностиобъектаи субъекта. Субъект— этопроцессы, выполняемыеотимени запустившегоихпользователя. Объект— элементыфайловойсистемы(файлы, каталоги, ссылки, сокетыипр.) или другиепроцессы, надкоторымивыполняютсядействия. И теперьсамоеважное, чтоотличаетSELinux отдругихрешений, описанныхдалее— всеважныезащитныеатрибуты сохраняютсявконтекстахбезопасности. Поэтомуфайловая системадолжнауметьхранитьдополнительныеатрибуты, и самиатрибутынужнокак-тозадать. Современныеядравсе обеспечивают, ноприсамостоятельнойпересборкеядра незабудьактивироватьпараметр«Extended attributes» в выбраннойфайловойсистеме.
Атрибутыустанавливаютсяприинициализациисистемы. Отсюдаделаемвывод, чтообъектужедолженсуществоватьнамоментустановкиатрибутов. Саматрибутвключает идентификаторвладельца, рольитипобъекта. Причем идентификаторSELinux (создаетсякомандойsemanage), хотяиможетсовпадатьвномересUID пользователяLinux (uid), ноэтодверазныевещи. Незабываемещеободном важномотличии— SELinux оперируетролями, поэтому несколькоучетныхзаписейLinux могутиметьоднуитуже учетнуюзаписьSELinux. Иглавное— выполнениекоманды
HTTP://WWW
links
•Сайт проекта SELinux — selinuxproject. org
•Сайт проекта
TOMOYO Linux — tomoyo.sf.jp
INFO |
info
Каждое приложение должно иметь доступ только к тем файлам и каталогам, которые действительно необходимы для его работы. И не более того.
DVD |
dvd
На прилагаемом
кжурналу диске ты найдешь видеоролик
кэтой статье
XÀÊÅÐ 08 /139/ 10 |
089 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
|
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
w Click |
to |
|
|
|
|
|
UNIXOID |
||||
|
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
Проекты LIDS, GRSecurity и RSBAC
Кромепроектов, описанныхвстатье, внастоящеевремяразвиваютсяидругие, позволяющиеповыситьзащитуLinux-систем
— LIDS (Linux Intrusion Detection System, lids.org), GRSecurity (grsecurity.org) иRSBAC (Rule Set Based Access Control, www.rsbac. org). Краткооних.
ПроектLIDS реализуетMAC, админможетчеткоуказатьразрешениядляфайловикаталогов. ПомимоэтогомеханизмыTPE (Trusted Path Execution) иTDE (Trusted Domain Enforcement) позволяют убедиться, чтопрограммаработаеттак, какпредназначено. Сайт проектанекотороевремябылзаброшен, хотяинструментыразвиваются.
Управлениепроизводитсяприпомощиутилитичем-тонапоми- наетнастройкуправилфайера.
# lidsconf -A -o /sbin -j READONLY
GRSecurity — разработка, охватывающаянесколькотехнологийукреплениябезопасности— MAC/ACL, улучшенныйchroot, рандомизацияTCP ISN иPID, ролеваясистемаконтролядоступа RBAC, функцииаудита, защитаадресногопространстваистека PaX (доступениотдельно). Большинствопараметровуказывается наэтапесборкиядра, затемприпомощиутилитыgradm настраиваютсяACL.
ПроектRSBAC, реализующиймандатныйиролевоймеханизмы доступа, ужев2000 годувовсюиспользовалсявзащищенныхдистрибутивах. Посути, этосреда, позволяющаясоздатьразличные моделидоступа. ИдеяосновананапубликацииМаршалаАбрамса иЛаПадула«Обобщеннаясредадляуправлениядоступом» (GFAC, Generalized Framework for Access Control). Кромеroot вОСпояв-
ляетсяучеткаадминистраторабезопасности, которыйиуправляет доступомкинформации.
Реализовано много интересных функций: отключение Linux DAC, сокрытие процессов, JAIL, поддержка PaX, антивирусный интерфейс Dazuko, контроль ресурсов Linux и многое другое. Например, можно организовать доступ к файлу в определенные часы.
su неменяетидентификатораSELinux. Тоестьroot здесьневсевластен. Проверитьэтолегко:
$ id –Z user_u:user_t:unconfined_t
Получаемпривилегиисуперпользователяипроверяемснова:
$ su
# id –Z user_u:user_t:unconfined_t
Еслизайтисразуподрутом, торольдругая:
# id -Z root:system_r:unconfined_t:SystemLow-SystemHigh
Изменитьрольможноприпомощикомандыnewrole. ПрииспользованииSELinux штатныекомандывыводятиконтекст. Чтобыпросмотреть контекстфайловипроцессов, набираем:
#ls -l –context /
#ps -ax -Z
Крометого, контекстможносчитатьпрямоиз/proc:
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
СмотримактивныепрофилиипараметрыAppArmor
# ps aux | grep syslogd
root 2729 0.0 0.0 5908 624 ? Ss 07:30 0:00 syslogd -m 0
# cat /proc/2729/attr/current system_u:system_r:syslogd_t:s0
ПредусмотренаработаSELinux втрехрежимах— disable (отключен), enforcing (политикивыполняются, все, чтонесоответствует— блокируется), permissive (политикианализируются, всенарушениязаносятся вжурнал«avc: denied», ноблокировкинепроизводятся). Узнатьтекущий режимпросто, как, впрочем, инекоторыедругиенастройки, достаточно прочитатьданныеизпсевдофайловойсистемы/selinux:
$ cat /selinux/enforce
Еслиполучим1, значит, SELinux активирован. Чтобыизменитьрежим работыналету, простозаписываемвэтотфайл0 или1:
# echo 0 > /selinux/enforce
Такжеможновоспользоватьсяутилитой«setenforce [ Enforcing | Permissive | 1 | 0 ]».
Собственнонастройкипроизводятсявконфигурационныхфайлах, размещенныхвкаталоге/etc. Вдистрибутивах, базирующихсянаRedHat,
доступенграфическийSELinux Administration Tool (system-config- selinux, пакетpolicycoreutils-gui). Так, режимработыустанавливаетсяв файле/etc/sysconfig/selinux (насамомделеэтоссылкана/etc/selinux/ config). Вчастности, режимработыопределяетпараметрSELINUX:
SELINUX=enforcing|permissive|disabled
ПоумолчаниювбольшинстведистрибутивовSELinux защищаетневсе демоны, атолькострогоопределенные: dhcpd, httpd, named, nscd, ntpd, portmap, snmpd, squid иsyslogd. Дляостальныхполитиканеопределена— unconfined_t. Чтобызащититьвсюсистему, необходимоизменить значениеSELINUXTYPE наstrict:
SELINUXTYPE=targeted|strict
Вкаталоге/etc/selinux/targeted/contexts находимописаниеконтекстов. Например, дляroot контекстописываетсятак:
# cat /etc/selinux/targeted/contexts/users/root system_r:unconfined_t:s0 system_r:unconfined_t:s0
system_r:initrc_t:s0 system_r:unconfined_t:s0
090 |
XÀÊÅÐ 08 /139/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ТипичнаяполитикаAppArmor
Сбиваем спесь со Skype
Наверное,большевсегопретензийсточкизрениябезопасностиу пользователявызываетSkype.Кудатольконелезетэтапрога(см.ста-
тьюКриса«Skype:скрытаяугроза», www.xakep.ru/post/38543/default. asp).Описываемыетехнологиикакразипозволяютобезопаситьсебя. Забегаявперед,скажу,чтопользователиужедавнонагенерировали профилидлябольшинствапопулярныхпрог,искайпздесьнеисклю-
чение.Смотри,например,здесь:www.cynapses.org/tmp/apparmor/ usr.bin.skype.Некоторыепрофилисобранывотдельномпакете— apparmor-profiles.
Нопрофильлегкосоздатьисамому.Дляэтоговкомплектеидетутилита aa-genprof(илипростоgenprof).Запускаемеесуказаниемисполняе- могофайлавкачествепараметра:
$ sudo aa-genprof /usr/bin/skype
Далееработаемкакобычно:звоним,отсылаемсообщения,принимаемфайлы,добавляемиудаляемучетки.Поокончаниипрерываем работувкаталоге/etc/apparmor.d/usr.bin.skype.Затемперезапускаем AppArmorилипростоактивируемпрофильвenforce-режиме:
$ sudo aa-enforce skype
ВсепроблемыизамечанияпоработепрофилейAppArmorищивлогах.
Чтобыпросмотретьвсеконтексты, связанныесhttpd, введитакую команду:
# grep -iR httpd /etc/selinux/targeted/contexts
Тыувидишь, чтодляразныхситуацийконтекстбудетотличаться. ТеперьполучимсписоквсехпараметровSELinux: «getsebool -a». Для установкииспользуйкомандуsetsebool (сключом'-P' длясохранения значенияпослеперезагрузки) илиграфическуюутилитуsystem-config- securitylevel.
Вывод«sestatus -v» покажетвсетекущиеустановки. Незабываемио журналах:
#dmesg | grep -i selinux SELinux: Initializing.
SELinux: Starting in permissive mode
#grep -iR selinux /var/log/messages
ВсевспомогательныеутилитыSELinux собранывнесколькихпаке-
тах: setools илиpolicycoreutils, policycoreutils-newrole. Первый, как правило, ужеустановленвсистеме, остальныхнет. Например, newrole, дающаявозможностьпользователюсменитьроль, доступнаименнов policycoreutils. Послеустановкивсистемеприсутствуюттольконаборы политикдляtargened, остальныенаборыполитикскачиваютсяв пакетахselinux-policy*. Сорцыполитикдляихсамостоятельнойсборки вынесенывselinux-policy-devel.
Разобратьсявболеечем200 файлах, имеющихнесколькотысячстрок, врукопашнуюоченьтрудно. Автоматизироватьэтузадачупризван питоновыйскриптaudit2allow (вpolicycoreutils), онгенерируетновые политикинаосновеанализажурналовиблокировокSELinux.
APPARMOR
ТехнологияApplication Armor изначальноразработанаImmunix Inc. Послетого, каксофтверныйгигантNovell приобрелэтукомпанию, кодоткрылиподлицензиейGNU GPL, азатемвключиливсостав openSUSE. ПозднееAppArmor сталдоступенивдругихдистрибутивах. НокогдакомандаImmunix покинулаNovell, дальнейшееразвитие проектаостановилось. ИхотявтомжеopenSUSE поддержкаAppArmor быласохранена, вдистрибутивинтегрировалиSELinux. Витогеначали разноситьсяслухиа-ля«AppArmor is dead», чтоуоднихвызвало радость, таккактеперьвсеусилияможноброситьнаразвитиеодной системызащиты, удругихкритику— отсутствиеконкуренцииещени кчемухорошемунеприводило. Сегодняапологетомэтойтехнологии
являетсяCanonical, разработчикикоторогонесмотряниначтопродолжаютразвитиеAppArmor. Так, впоследнихверсияхдобавленмеханизм кэшированияправил, чтопозволилоускоритьихзагрузку. Дляэтихже целей, ичтобызащититьсетевыесервисынараннемэтапезагрузки, частьпрофилейвынесливinitramfs. Иглавное— вUbuntu AppArmor
прикрутиликLSM (Linux Security Modules), задействовавsecurity_path
вместоvfs.
ОсновнаяидеяAppArmor состоитвтом, чтосистемазащитынедолжна бытьсложнойинедолжнамешать. ВотличиеотSELinux, AppArmor не используетрасширенныеатрибутыинезависитотфайловойсистемы. Доступкресурсамопределяетсянаосновепрофилей(profiles), которые привязаныкпутифайлаиликаталога, причемсамогофайламожетине бытьнамоментактивациипрофиля. Профильразрабатываетсяиндивидуальноподкаждоеприложение. Хотявэтоместьинедостаток: при переносефайлавSELinux занимполностьюсохраняетсяконтекстбезопасности, вAppArmor — нет, ноэтогоотнегоинетребовали. Хотя, если файлимеетдваимени, ипрофильблокируетдоступкодномуизних, естьвозможностьработатьсдругим. Этоследуетучитывать. Также, если средствамиSELinux можнопредусмотретьнесколькоуровнейдоступак объектудляразныхсубъектов, тоAppArmor этогонеумеет.
Внастоящеевремясозданыпрофилидлябольшинствапопулярных серверовиприложений, поэтомуналичиеактивногоAppArmor обычно незаметно, оннесоздаетпроблем. Крометого, вкомплектепоставки идутдваскриптаaa-genprof иaa-logprof, которыепомогутбыстросоздатьпрофильдляновойпрограммы. УправлениеAppArmor произво- дитсяприпомощиinit-скрипта, которыйзапускаетмодульядра, инициализируетпрофилиимонтируетпсевдофайловуюсистемуsecurityfs.
$ sudo /etc/init.d/apparmor start
Чтобыпросмотретьсписокзагруженныхпрофилей, достаточносчитать файл/sys/kernel/security/apparmor/profiles (илизапустить/etc/init.d/ apparmor status); взависимостиотвариантадистрибутиваServer/ Desktop количествоактивныхпрофилейбудетразлично. Самипрофили хранятсявфайлах(отдельнодлякаждогоприложения) вкаталоге/etc/ apparmor.d ивнутрисодержатописаниекаталоговиотдельныхфайлов, суказаниемправдоступа. Такжеуказываетсяработавсетиисовместимостьсдругимипрофилями. Дляупрощениязадачииспользуются регулярныевыражения. ПоумолчаниюпрофилиAppArmor работаютв принудительномenforce-режиме. Когдасервиснеможетвыйтизарамкиустановок, всепопыткиблокируютсяификсируютсявжурнале. При
XÀÊÅÐ 08 /139/ 10 |
091 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
UNIXOID
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
РедакторполитикTOMOYO Linux
необходимостиегоможноперевестивщадящийрежимcomplain, когда |
иможетиспользоватьсявядрах2.4 и2.6. Вторая(котораяужевядре) |
нарушениялишьфиксируются. Причем, вотличиеотSELinux, гдережим |
адаптированаподLSM, нопофункциональнымвозможностямусту- |
обученияактивируетсяглобально, вAppArmor егоможновключить |
паетверсии1.х: нетподдержкисетевыхфункций, обработкиатрибутов, |
дляотдельногопрофиля. Перевестипрофильвщадящийрежимможно |
POSIX-возможностей(насайтепредставленасравнительнаятаблица). |
тремяспособами: |
Внастоящеевремясоответствующиепакетыимеютсяврепозиториях |
• указатьвфайлепрофиляflags=(complain); |
многихдистрибутивов, нофактическиподдержказаявленапокатолько |
• использоватькомандуcomplain название_программы(вернутькоман- |
вMandriva. Кслову, вэтомдистрибутивепредлагаетсяиграфический |
дойenforce); |
интерфейсTomoyo GUI, позволяющийзапуститьинастроитьполитики |
• илиглобальнокомандой«echo 1 > /sys/kernel/security/apparmor/ |
приложений. Доступностьврепозиторияхпакетовдлябольшинства |
control/complain». |
дистрибутивовпозволяетбуквальновсчитанныеминутыперевестиОС |
Аещепрофилиотключаютсяналету, перегружаются, вобщем, полная |
нановуюсистемубезопасности. Например, Ubuntu 10.04: |
свободадействий. Собственно, простотаипривлекаетвAppArmor адми- |
|
нов, разработчиковипростыхпользователей. |
$ sudo echo 'deb http://osdn.dl.sourceforge.jp/ |
Дополнительныепрофилиможнонайтиврепозиториидистрибутива |
tomoyo/47128/ ./' >> /etc/apt/sources.list |
(apt-cache search apparmor), крометого, естьонлайн-банкпрофилей— |
$ sudo apt-get update |
apparmor.opensuse.org. |
$ sudo apt-get install linux-ccs ccs-tools |
Кслову, дляядер2.4/2.6 существоваларазработкаTrustees (trustees. |
|
|
|
sf.net), реализующаяACL a-ляNovell Netware, котораявудобнойформе |
Еслиядрособираетсясамостоятельно, активируйпараметр«Enable |
расписываладоступккаталогамвплотьдоуказанияотдельныхгруппи |
different security models» и«TOMOYO Linux Support» всекцииSecurity |
пользователейинезависелаотфайловойсистемы. Ксожалению, проект |
options. |
заглох, аэтобылабызолотаясерединамеждуSELinux иAppArmor. |
ПрибегломвзглядеTOMOYO оченьпохожнаAppArmor. Обесистемыкон- |
TOMOYO LINUX |
тролируютпуть(pathname based), аправилаимеютсходныйсинтаксис. |
Ноестьиотличия. Так, вTOMOYO можноуказатьповедениепрограммы |
|
ПроектTOMOYO Linux (tomoyo.sf.jp) начатв2003 годуяпонскойкомпа- |
взависимостиоттого, каконазапущена. Например, оболочка, запущен- |
ниейNTT DATA CORPORATION каклегкаяреализацияMAC дляLinuх- |
наячерезSSH, можетиметьбольшеограничений, чемзапущеннаяс |
ядра. ЧерездвагодалицензиюизменилинаGNU GPL ивыложиликод |
локальнойсистемы. Предусмотренапроверкадополнительныхпарамет- |
наSF.net. Некотороевремяпроектпредоставлялпатчииготовыесборки |
ров, скоторымивключенапрограмма, атакжепривилегий(UID/GUD). |
ядердляразныхдистрибутивов. Ноначинаясверсииядра2.6.30, код |
ПриложениявтерминологииTOMOYO называютсядоменами(domains). |
TOMOYO Linux включенвосновнуюветкуразработки, чтоужесамопо |
КонфигурационныефайлыTOMOYO находятсявкаталоге/etc/tomoyo, |
себе— Событиедлялюбогоподобногопроекта. |
послезапускасистемынастройкиимеютсвоеотражениев/proc/tomoyo, |
ВнастоящеевремясуществуетдвеверсииTOMOYO Linux. Перваявер- |
гдеихможноредактироватьналету. ПараметрыработыTOMOYO хранят- |
сияиспользуеторигинальныехуки, онадоступнатольковвидепатчей |
сяв/etc/tomoyo/profile.conf идоступныв/proc/tomoyo/profile. Именно |
ШаблоныполитикTOMOYO Linux |
здесьопределяютсярежимыработыTOMOYO — disable, permissive, |
enforsing иlearning (обучаясь, системасамастроитправила). Естьи |
|
|
другиефайлы: |
|
• manager.conf (/proc/tomoyo/manager) — программы, которыемогут |
|
изменитьполитикув/proc/tomoyo; |
|
• exception_policy.conf (/proc/tomoyo/exception_policy) — исключения |
|
дляполитикдомена; |
|
•domain_policy.conf (/proc/tomoyo/domain_policy) — политикидомена; |
|
• meminfo.conf (/proc/tomoyo/meminfo) — настройкаиспользования |
|
памятииквот. |
|
Послеустановкипакетаccs-tools необходимопровестиинициализацию |
|
TOMOYO, выполнивскрипт/usr/lib/ccs/tomoyo_init_police.sh, которыйи |
|
создастнужныеконфиги. Далеепотребуетсяперезагрузкасистемы. |
|
Затемможнозапускатьредакторполитик: |
|
|
|
# /usr/lib/ccs/editpolicy /etc/tomoyo/ |
|
|
|
Ещеоднанемаловажнаячерта— TOMOYO можетработатьпараллельно |
|
сSELinux иAppArmor.z |
092 |
XÀÊÅÐ 08 /139/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|||||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Реклама
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
||
P |
|
|
|
|
|
NOW! |
|
o |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
|
|
||||
w Click |
to |
|
|
|
|
|
|
|
UNIXOID |
|
||||
|
|
|
|
|
|
|
m |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
g |
.c |
|
Евгений Зобнин zobnin@gmail.com |
|||||
|
|
p |
|
|
|
|
|
|
|
|
||||
|
|
|
df |
|
|
n |
e |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Пингвин среактивным ранцем
УскоряемзапускприложенийвLinux
Linux становитсявсетяжелееитяжелее. Сегодняуженикогонеудивишь приложениями, времязапускакоторыхсоставляетнесколькоминут, окружениямирабочегостола, занимающими500 Мбоперативки, и нерасторопнойзагрузкойОС, напоминающейпоходженщиныпо магазинам. Естьлиспособывсеэтооптимизировать, существуетли лекарствоотожиренияпингвинов, гдевзятьножик, чтобыотрезатьвсе лишнее? Попробуемразобраться.
Завсевремясуществованиятолстыхпингвинов(период, отсчитываемыйпримерно смоментапоявленияGTK+ 2.X, X Free 4.X и Linux 2.6) былопридуманонемалоспособов ускорениязапускаприложенийивсейОС.
Некоторые из них уже давно успешно применяются в популярных дистрибутивах, другие до сих пор значатся экспериментальными. В этой статье мы посмотрим на них повнима-
тельнее и определим, насколько оправданным может быть их применение.
ПРЕДВАРИТЕЛЬНОЕ СВЯЗЫВАНИЕИЛИPRELINK
Пре-связываниеестьничтоиное, какмодификациязапускаемогофайласцельювключить внегорезультатыдинамическогосвязывания библиотек. Чтоэтозначит?
Встародавниевременаприложениябыли простыииспользоваливсвоейработевсего несколькодинамическизагружаемыхсистемныхбиблиотек. Тобыловремягосподстваформатаисполняемыхфайловa.out, особенность которыхзаключаласьвпредельнойпростоте. Файлыa.out всегдаточнознали, покакомуадресуонибудутзагруженывпамятьпроцесса, и покакимадресамбудутрасполагатьсяихвнут-
094 |
XÀÊÅÐ 08 /139/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
WARNING |
|
warning |
|
|
В установке prelink |
|
|
для Ubuntu нет |
|
|
необходимости. |
|
|
Этот дистрибутив |
|
|
использует |
|
|
альтернативный |
|
|
метод, называемый |
|
Редактируемконфигурациюутилиты |
DT_GNU_HASH |
|
и реализованный |
||
update-initramfs |
||
на уровне корневой |
||
|
||
|
библиотеки (glibc). |
Readahead вграфикеbootchart
ренниефункции, константыит.д. Этаособенность, содной стороны, давалаимпреимуществовскоростизагрузки, ас другой— создавалапроблемысосуществованиябиблиотеквпамяти(что, еслидвебиблиотекибудутзагруженыв памятьпоодномуадресу?). Проблемынадобылорешать, поэтомупоявилсяформатELF (егосоздателинасамомделе былипоклонникамикнигТолкиена:)), которыйснималс исполняемыхфайловответственностьзавыборадреса своегоразмещенияввиртуальнойпамятииперекладывал еенадинамическийлинковщик. Отнынеадресазагрузки приложений, библиотекивсехихсимволов(переменных, констант, функцийт.д.) вычислялисьдинамическинаэтапе загрузки.
ELF позволилUNIX/Linux сделатьогромныйшагвпереди статьсистемой, способнойзагружатьиисполнятьогромноеколичествоприложений, слинкованныхстакимже количествомбиблиотек, безвсякихпроблем. Однакосточки зренияпроизводительностиэтобылпровал. Процедура динамическогосвязыванияоченьбыстра, ипризапуске приложений, зависящихвсегоотнесколькихбиблиотек, онаневноситвпроцессзаметныхзадержек, ноеслиэто запускгромоздкогоприложениясзависимостямипорядка 50 библиотек, тозадержкаможетбытьвесьмасущественной (вплотьдонесколькихдесятковсекунд).
Такназываемоепре-связываниенаделяетELF-файлынаи- болеевыгоднойчертойформатаa.out. Запускаемыефайлы модифицируютсятакимобразом, чтобыужевключатьвсебя результатдинамическогосвязыванияи, соответственно, заранеезнатьсобственныеадресавпамятипроцессаине тратитьнаихвычислениевремявтечениезапуска. Процедурапре-связываниябылапредложенасотрудником Red Hat Jakub Jelinek ещев2004 годуиоказаласьочень удачнымметодомповышенияскоростизапускаприложений. Согласнотестам, онаможетдатьприрост, равный50% отпервоначальнойскоростизапуска, авособотяжелых случаях(OpenOffice, KDE, Gnome) — итогобольше. Приэтом дляускорениясистемыдостаточнозапуститьвсегоодну командуинемногоподождать.
Да, задействоватьмеханизмпре-связываниядействитель- нопросто. ДляэтогоужеупомянутыйвышеJakub Jelinek написалпрограммуподназваниемprelink. Онадоступна практическивлюбомLinux-дистрибутиве, поэтомусобирать изисходниковничегонепридется. Простоустановипакеты prelink, используяпакетныйменеджердистрибутива, и выполниследующуюкоманду:
# prelink -avmR
Аргументыкоманднойстрокивэтомслучаезначатследую- |
INFO |
щее: |
• v — выводить больше информации на экран;
• a — подвергнуть пре-связыванию все бинарные файлы;
• m — сохранить виртуальную память (нужно, если библиотек очень много);
• R — рандомизировать порядок следования участков памяти (повышает уровень защиты от атак на срыв стека).
Послеокончаниявыполненияприложенияможноначинать радоватьсяускорению. Однакостоитпомнитьонескольких ограничениях:
1. Prelink неспособенувеличитьскоростьзагрузкибинарников, скомпилированныхбезопции'-fPIC'. Ксожалению, такихбиблиотекдостаточномного, обычносборщикипакетовнарочноотключаютэтотфлагдляувеличенияпроизводительностиприложения;
2. Prelink неумеетобрабатыватьбиблиотекипроектаwine, поэтомуобускоренииWindows-софтапридетсязабыть; 3. Некоторыестатическиебиблиотекимогутперестать запускатьсяпослеобработкиprelink;
4. Послеустановкиновыхприложенийилибиблиотекоперациюпрелинкингарекомендуетсяповторить.
Дляудаленияprelink делаемтак:
# prelink -au
Далееможнотеретьпакетизсистемы.
ПРЕДВАРИТЕЛЬНАЯ ЗАГРУЗКАИЛИPRELOAD
Хорошимдополнениемкprelink станетдемонpreload, реализующиймеханизмпредварительнойзагрузкибиблиотекдлячастоиспользуемыхприложений. Работаявфоне, preload анализируетдействияпользователяисоставляет списокнаиболеечастоиспользуемыхприложений. В дальнейшемэтаинформацияприменяетсядлязаблаговременнойзагрузкиприложенийинеобходимыхимбиблиотек впамять, благодарячемухолодныйзапускпрограммы занимаетнамногоменьшевремени.
Демонpreload можетсущественноповыситьскоростьзагрузкиприложений, нопроизойдетэтотольковтомслучае, еслисистемаоснащенадостаточнобольшимобъемом памяти. Двагигабайта— этоминимум, прикоторомpreload
info
•Свой вариант prelink есть
и в Mac OS X. Там он носит имя
«prebinding».
•Реализация preload для Windows носит имя «Prefetcher» (позднее «SuperFetch») и доступна,
начиная с Windows XP.
•Вместо
классической системы init, дистрибутив Ubuntu использует систему параллельной загрузки сервисов upstart, которая может сократить среднее время инициализации системы до 15-20 секунд.
•cryopid.berlios.de —
домашняя страница
CryoPID.
•people.redhat.com/ jakub/prelink.pdf —
описание Prelink от авторов.
•behdad.org/preload. pdf — описание Preload от авторов.
•www.checkpointing. org — список ПО для заморозки процессов.
•dmtcp.source-
forge.net —
распределенная система заморозки процессов.
XÀÊÅÐ 08 /139/ 10 |
095 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
UNIXOID
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
даствыигрыш, применьшихобъемахонтолькопомешает. Пакет preload можнонайтивсоставелюбогосовременногодистрибутива, поэтомудляегоустановкидостаточноиспользоватьстандартный
менеджерпакетов:
$ sudo apt-get install preload
Далееследуетотредактироватьконфигурационныйфайл/etc/preload. conf. Демонвполнесносноработаетипристандартныхнастройках, однакокаждыйизнасиндивидуаленииспользуетсистемупо-своему, поэтому, вероятно, тызахочешьподогнатьpreload подсебя. Перечислю основныеопциивсекцииmodel:
•cycle — частотаобращенийксистемедлясборастатистики. Значение поумолчанию— 20 секунд. Вбольшинствеслучаевизменятьегоне имеетсмысла, однакоеслитычувствуешь, чтоpreload вредитпроизводительностисистемы, увеличьзначение.
•halflife — задаетинтервал, поистечениюкоторогоpreload будет забыватьнакопленнуюстатистикуна50%. Значениепоумолчанию— 168 часов(неделя). Рекомендуетсяуменьшитьзначениетем, кточасто меняетсофт, иувеличитьтем, ктоможетмесяцами/годамипользоваться однимитемженаборомприложений.
•minsize — минимальный размер объекта (программы, библиотеки), обрабатываемого preload. Значение по умолчанию — 2 000 000 байт (около 2 Мб), поэтому preload не будет выполнять предварительную загрузку файлов меньшего размера. Нет особой нужды менять это значение, однако если тебе кажется, что памяти будет достаточно и для кэширования более мелких приложений — уменьши значение.
•memtotal,memfree,memcached — этитриопциивзаимосвязаныи указываютнапотребляемыйpreload объемпамяти. Длярасчетовиспользуетсяследующаяформула: (общееколичествопамятих memtotal) + (память, доступнаяпристартех memfree) + (кэшх memcached).
Секцияsystem такжесодержиттриинтересныхдлянасопции:
•mapprefix — списоккаталогов, файлыкоторыхдолжныбытьпредварительнозагружены(имейввиду, чтоэтонетолькобинарникиибиблиотеки, ноидругиетипыфайлов).
•exeprefix — списоккаталоговсбинарнымифайлами.
•sortstrategy—способоптимизацииоперацийввода-вывода.Значениепо умолчанию—3(оптимизациядляжесткихдисков).Длятвердотельныхдисков лучшевсегоподойдетзначение1,длясетевыхфайловыхсистем—2.
Наэтомвсе, можешьперезагрузитьpreload:
$ sudo /etc/init.d/preload reload
Какилюбойдругойдемон, preload ведетлоги, которыетысможешь найтивфайле/val/log/preload.log. Информацияотекущемсостоянии preload иегокэшедоступнавфайле/var/lib/preload/preload.state.
ПРЕДВАРИТЕЛЬНОЕ ЧТЕНИЕИЛИREADAHEAD
Ubuntu, атакженекоторыедругиесовременныедистрибутивыLinux, используютсистемуreadahead вовремяинициализациисистемы. Каки демонpreload, readahead заранеезагружаетнеобходимыекомпоненты приложенийвоперативнуюпамятьсцельюускоритьихзапуск. Разница заключаетсялишьвтом, чтоreadahead частичноработаетвнутриядра Linux иоптимизированспециальнодляускоренияпроцессаинициализациисистемы.
Системаиспользуетутилиту/sbin/readahead-list, котораячитаетфайлы
/etc/readahead/boot и/etc/readahead/desktop изагружаетперечислен-
ныевнихфайлывовремяинициализациисистемы. Этапростаяиэффективнаясхема, которая, однако, имеетиочевидныенедостатки. Дело втом, чтолюбаястандартнаяустановкаUbuntu современемпретерпеваетизменениявколичествеустановленныхизагружаемыхвовремя стартаОСсервисов. Спискифайловвэтомслучаестановятсянеактуальнымиитребуютобновления. Параметрядраprofile позволяетперестроитьспискипредварительнозагружаемыхфайлов. Дляеговключения
Сокращениескоростизапускаприиспользовании
Preload
перезагрузисистему, вовремязагрузкинажми<Esc> длявходавменю загрузчика, далеенажми<e> идобавьвконецспискапараметровядра словоprofile. Нажми<b> длязагрузки. Инициализациясистемыврежимепрофилированиязайметвремя, поэтомубудьготовпотерпеть.
ЗАМОРОЗКАПРОЦЕССАИЛИCRYOPID
Иногдалучшийспособускоритьзапускприложения— простонеостанавливатьего. Длямногихюниксоидовработающиесуткаминапролет браузер, почтовыйиjabber-клиенты— обычноедело. Такиеприложения простонетсмыслазавершать, онимогутпонадобитьсявлюбуюминуту. Такпочемубынеразвитьэтуидеюдальшеинесделатьтак, чтобывместо остановкипроцессовихсостояниеможнобылобызаморозить, апозже
— восстановить, избавивпрограммуотнеобходимостикаждыйраз производитьсложнуюитрудоемкуюинициализациювнутреннегосостояния? Немыпервые, немыпоследние. CryoPID — простоеприложение длязаморозкипроцессовипоследующегоихвосстановления. Прогане требуетправroot илимодификацииядра, работаетнаархитектурахx86 иamd64 и, чтосамоеглавное, непривязываетзамороженныйпроцесск конкретноймашине. Послезаморозкипроцесспревращаетсявочто-то вродесамораспаковывающегосяархива, тылегкоможешьперенести егонадругуюмашинуипростозапустить. ПакетCryoPID естьдалеконев каждомдистрибутиве, поэтомуегопридетсяустановитьсамостоятельно:
$ cd /tmp
$ wget http://dagobah.ucc.asn.au/wacky/cryopid-0.5.9.1- i386.tar.gz
$ tar -xzf cryopid-0.5.9.1-i386.tar.gz $ cd cryopid-0.5.9.1/src
$ make
$ mkdir ~/bin
$ cp freeze ~/bin
Послеэтогоможнозапуститьпрограммуследующимобразом:
$ ~/bin/freeze имя-файла pid-поцесса
Ксожалению, CryoPID имеетнесколькопроблем, включаянеполную поддержкусокетовиX-приложений, атакжегенерируетмусорвсписке процессоввместоименивосстановленнойпрограммы.
ШУСТРАЯЗАГРУЗКАUBUNTU
Ubuntu быстра, насамомделебыстра. Скоростьзагрузкиэтогодистрибутиваоставляетдалекопозадимногиедругиелинуксыизаставляетзави- доватьпоклонниковBSD-систем. Однаконетпределовсовершенству, и вэтомразделемыпопробуемускоритьускоренное.
096 |
XÀÊÅÐ 08 /139/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ОптимизируемработуOpenOffice.org
ОкноуправлениясервисамивUbuntu
•Evolution Alarm Notifier — сигнализатор прихода почты в Evolution
•Print Queue Applet — апплет очереди печати
•Tracker — служба поиска и индексирования
|
|
7. Отключи автостарт ненужных приложений. Во время входа в |
|
|
|
систему происходит автозапуск большого количества различ- |
|
1.Отключитаймаутвgrub. Поумолчаниюзагрузчикждет3 секунды, |
ных приложений (в основном это апплеты). Не все они нужны, |
||
чтобыпользовательсмогизменитьпараметрызагрузки. Откройфайл |
поэтому открой System Æ Preferences Æ Applications startup |
||
/boot/grub/menu.lst, найдистроку«timeout=3» изамени3 на0. |
и удали все, что считаешь ненужным (например, апплет |
||
2.Отключиsplash. Ubuntu splash-screen, показываемыйвовремя |
bluetooth). Запуск оставшихся приложений можно немного |
||
загрузкисистемы, малоинформативенитребуетвремянасвоюзагрузку. |
оптимизировать с помощью следующего трюка: отредактируй |
||
Поэтомуоткрываемвсетотже/boot/grub/menu.lst иубираемопции |
строку запуска каждого из них так, чтобы она приняла пример- |
||
«quiet» и«splash» изпараметровзагрузкиядра. |
но такой вид: |
||
3.ОтключиIPv6. РаньшеподдержкапоканенужногопротоколаIPv6 |
|
||
вLinux былареализованаввидезагружаемогомодуля, поэтомудля |
sh -c "sleep 10; exec bluetooth-applet" |
||
ееотключениятребовалосьлишьслегкаотредактироватьфайл/etc/ |
sh -c "sleep 20; exec /usr/lib/evolution/2.28/ |
||
modprobe.d/aliases. СегодняIPv6 вшитпрямовядро, поэтомудляего |
evolution-alarm-notify" |
||
отключенияядрудолженбытьпереданпараметр«ipv6.disable=1». Сде- |
|
||
|
|||
латьэтоможно, отредактировавфайл/boot/grub/menu.lst. |
Длякаждогоследующегоприложениячислодолжноувеличиватьсяна |
||
4.Отключипроверкунавыходизспящегорежима. Вовремясвоей |
10. ТактысделаешьзагрузкуDE болееравномерной. |
||
загрузкиядровыполняетпроверку, выходитликомпизспящегорежима |
УСКОРЯЕМЗАПУСКТЯЖЕЛОВЕСОВ |
||
(suspend) иливыполняетобыкновеннуюзагрузку. Занимаетэтапро- |
|||
цедуравсегооднусекунду, однакоеетожеможносэкономить, добавив |
Многиетяжеловесныеприложения, используемыенамиповседневно, |
||
опцию«noresume» кпараметрамзагрузкиядра. Естественно, владель- |
слишкоммедлительныинеповоротливы. Нередконаихзапускуходит |
||
цамноутбуковэтогоделатьнестоит. |
большеминуты, чтодовольносильнораздражаетимешаетсконцентри- |
||
5. Оптимизируйinitramfs. ОбразRAM-дискаиспользуетсядляхране- |
роватьсянаработе. Попробуемэтоисправить. |
||
ниянизкоуровневыхкомпонентовОС, которыедолжныбытьдоступны |
•OpenOffice.org. Этот офисный пакет рекордсмен по потреблению |
||
ещедомонтированиякорневойфайловойсистемы. Поумолчаниюэтот |
ресурсов и неповоротливости, поэтому его оптимизации необходимо |
||
образсодержитвсевозможныекомпоненты, подобранныенавсеслучаи |
уделить особое внимание. Открываем Tools ÆOptions, переходим |
||
жизни. Безнихобразгрузитсявпамятьбыстрее, чтоспособствует |
к подразделу «Memory». Устанавливаем значение «Number of |
||
сокращениюобщеговременизагрузкисистемы. Открываемфайл |
steps» равным 20, это уменьшит размер истории отмены. В секции |
||
/etc/initramfs-tools/initramfs.conf, находимстроку«MODULES=most» и |
«Graphics cache» устанавливаем значение «Use for OpenOffice. |
||
заменяемеена«MODULES=dep». Далеепересобираемвседоступные |
org» в 128, «Memory per object» — в 20. В подсекции «Java» убираем |
||
образытолькоснеобходимымикомпонентами: |
галочку с опции «Use a Java runtime environment». Оптимизация |
||
|
|
позволяет поднять скорость запуска и время реакции. |
|
$ sudo update-initramfs -k all -u |
|
• Firefox. Огнелис— втораяпоуровнюпрожорливостиитормознутости |
|
|
|
программа. Начиненнаядостаточнобольшимколичествомплагинов, |
|
|
|
||
Послеобновленияядраобразыбудутсгенерированыавтоматически. |
онапревращаетсяизогненнойлисывзамороженнуючерепаху, ноесть |
||
6. Отключиненужныесервисы. ПоумолчаниювUbuntu активировано |
двапутиускоритьеезапуск. Первый— удалитьвсененужныеиредко |
||
множествофоновыхсервисовнавсеслучаижизни. Врядлитебенужны |
используемыеплагины. Этоподниметискоростьзапуска, ипроизво- |
||
онивсе, поэтомуидемотключать. ОткрываемSystem ÆAdministration |
дительность. Второй— оптимизироватьбазуsqlite, используемуюдля |
||
ÆServices ивидимсписоксервисов. Выборкандидатовнаотключение |
храненияданныхпрофиля: |
||
зависитотконкретнойситуации, новбольшинствеслучаевбезболез- |
|
||
ненноможнопожертвоватьследующим: |
$ find ~/.mozilla/firefox/ -name *.sqlite \ |
||
|
|
-exec sqlite3 {} VACUUM \; |
|
• Bluetooth Manager — менеджер устройств Bluetooth |
|
|
|
Делатьэтонеобходиморегулярно(например, развнеделю), таккак |
|||
• Check for new hardware drivers — проверка новых версий |
|
||
проприетарных драйверов |
|
базыпостояннорастутизахламляются.z |
|
|
|
097 |
|
XÀÊÅÐ 08 /139/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
UNIXOID |
||||
w Click |
to |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
m |
|
|||||
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
g |
.c |
|
Юрий «Adept» Видинеев adeptg@gmail.com |
|||
|
|
p |
|
|
|
|
|
|
|
|||
|
|
|
df |
|
|
n |
e |
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
Чудеса
трассировки
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Решениепроблемсприложениямиприпомощи утилитыstrace
Представьситуацию: тыпоставилновуюкласснуюпрогу, аонане запускаетсяилибезбожнотормозит. Илисетевойсервиспадаетпри непонятныхобстоятельствах. Досадно! Ситуацияусугубляетсятем, что нивконсольномвыводе, нивлогахничегоинтересногонет. Ноивэтом случаеможнопредпринятьряддействий, которые, еслиинепомогут устранитьпроблемувзапуске, тохотябыпозволятсоставитьправильный баг-репорт.
ЗНАКОМСТВО |
ных вызовов, выполненных процессом, а |
отсутствия какого-нибудь нужного файла; |
Первый помощник в таком случае — это |
также полученных им сигналов. Strace может |
• в некоторых случаях с помощью strace |
strace. Для тех, кто вдруг не читал статью в |
помочь в следующих ситуациях: |
быстрее, чем с помощью tcpdump, можно |
#10 за 2009 год («Танцы с бубном и на- |
• если приложение отказывается работать |
обнаружить проблемы с сетевыми прогами; |
пильником»), напомню, что работа strace |
из-за проблем с правами; |
• при проблемах с физическим или псев- |
заключается в перехвате и записи систем- |
• если приложение не запускается из-за |
доустройством (типа /dev/random или /dev/ |
098 |
XÀÊÅÐ 08 /139/ 10 |