Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
14.93 Mб
Скачать

 

 

 

 

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

Соседние файлы в папке журнал хакер