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

LXF163: Bash: Аудит и профилирование

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Ис­поль­зо­вание ausearch)
(Соз­да­ем за­клад­ку)
 
(не показаны 3 промежуточные версии 1 участника)
Строка 69: Строка 69:
  
 
С по­мо­щью ути­ли­ты ausearch лег­ко про­смат­ри­вать лог-фай­лы, ис­поль­зуя лю­бой из пе­ре­чис­лен­ных вы­ше па­ра­мет­ров в ка­че­­ст­ве фильт­ра. На­при­мер, ко­ман­да ausearch -ts today -k esoteric-commands ото­бра­зит все за­пи­си, со­от­вет­ст­вую­щие клю­чу esoteric-commands. Вы уви­ди­те, что для ка­ж­дой опе­ра­ции досту­па к фай­лу, его из­менения, ко­пи­ро­вания и т. д. есть запись. Флаг -ts за­да­ет вре­мен­ную от­мет­ку. Today оз­на­ча­ет, что нам ин­те­рес­ны все за­пи­си, сде­лан­ные се­го­дня.
 
С по­мо­щью ути­ли­ты ausearch лег­ко про­смат­ри­вать лог-фай­лы, ис­поль­зуя лю­бой из пе­ре­чис­лен­ных вы­ше па­ра­мет­ров в ка­че­­ст­ве фильт­ра. На­при­мер, ко­ман­да ausearch -ts today -k esoteric-commands ото­бра­зит все за­пи­си, со­от­вет­ст­вую­щие клю­чу esoteric-commands. Вы уви­ди­те, что для ка­ж­дой опе­ра­ции досту­па к фай­лу, его из­менения, ко­пи­ро­вания и т. д. есть запись. Флаг -ts за­да­ет вре­мен­ную от­мет­ку. Today оз­на­ча­ет, что нам ин­те­рес­ны все за­пи­си, сде­лан­ные се­го­дня.
{{Врезка|right|Заголовок=Скорая помощь |Ширина=10%|Содержание=Файл, на­блю­де­ние за ко­то­рым вы на­страи­вае­те, уже дол­жен су­ще­ст­во­вать, что­бы в audit мож­но бы­ло за­пи­сы­вать его из­ме­не­ния. }}  
+
{{Врезка|left|Заголовок=Скорая помощь |Ширина=10%|Содержание=Файл, на­блю­де­ние за ко­то­рым вы на­страи­вае­те, уже дол­жен су­ще­ст­во­вать, что­бы в audit мож­но бы­ло за­пи­сы­вать его из­ме­не­ния. }}  
 
В за­ви­си­мо­сти от ти­па фай­ла, на­при­мер, фай­ла .txt, ко­то­рый мож­но от­кры­вать в несколь­ких про­грам­мах, с по­мо­щью ausearch мож­но про­смот­реть лог-фай­лы для кон­крет­ных при­ло­жений. На­при­мер, же­лая уз­нать, когда файл был от­крыт в gedit, вы­полните ко­ман­ду ausearch -ts today -k text-file -x gedit. Флаг -x за­да­ет имя ин­те­ре­сую­ще­го нас при­ло­жения. Ана­ло­гич­но, мож­но ог­раничить по­иск кон­крет­ным поль­зо­ва­те­лем с userid или лю­бым дру­гим па­ра­мет­ром.
 
В за­ви­си­мо­сти от ти­па фай­ла, на­при­мер, фай­ла .txt, ко­то­рый мож­но от­кры­вать в несколь­ких про­грам­мах, с по­мо­щью ausearch мож­но про­смот­реть лог-фай­лы для кон­крет­ных при­ло­жений. На­при­мер, же­лая уз­нать, когда файл был от­крыт в gedit, вы­полните ко­ман­ду ausearch -ts today -k text-file -x gedit. Флаг -x за­да­ет имя ин­те­ре­сую­ще­го нас при­ло­жения. Ана­ло­гич­но, мож­но ог­раничить по­иск кон­крет­ным поль­зо­ва­те­лем с userid или лю­бым дру­гим па­ра­мет­ром.
  
Строка 75: Строка 75:
  
 
При всем несомненном удоб­ст­ве ра­бо­ты с ausearch, жут­кое ко­ли­че­­ст­во за­пи­сей го­во­рит о том, что при­дет­ся ис­кать игол­ку в сто­ге се­на. Здесь в де­ло всту­па­ет ути­ли­та aureport, ко­то­рая вы­ве­дет толь­ко нуж­ную нам ин­фор­ма­цию.
 
При всем несомненном удоб­ст­ве ра­бо­ты с ausearch, жут­кое ко­ли­че­­ст­во за­пи­сей го­во­рит о том, что при­дет­ся ис­кать игол­ку в сто­ге се­на. Здесь в де­ло всту­па­ет ути­ли­та aureport, ко­то­рая вы­ве­дет толь­ко нуж­ную нам ин­фор­ма­цию.
{{Врезка|right|Заголовок=Скорая помощь |Ширина=10%|Содержание=Мож­но до­ба­вить к од­но­му пра­ви­лу не­сколь­ко клю­чей (не­сколь­ки­ми фла­га­ми -k), а один и тот же ключ ис­поль­зо­вать в не­сколь­ких пра­ви­лах. }}  
+
{{Врезка|left|Заголовок=Скорая помощь |Ширина=10%|Содержание=Мож­но до­ба­вить к од­но­му пра­ви­лу не­сколь­ко клю­чей (не­сколь­ки­ми фла­га­ми -k), а один и тот же ключ ис­поль­зо­вать в не­сколь­ких пра­ви­лах. }}  
 
Начнем с про­сто­го от­че­та обо всей за­пи­сан­ной ста­ти­сти­ке. Ко­ман­да aureport вы­ве­дет от­чет обо всех за­пи­сан­ных со­бы­ти­ях, по­пыт­ках вхо­да в сис­те­му, про­цес­сах, сис­тем­ных вы­зо­вах и т. д., но она не слиш­ком по­лез­на. Ин­фор­ма­цию обо всех ана­ли­зи­руе­мых фай­лах мож­но по­лу­чить ко­ман­дой aureport -f, а вы­вес­ти спи­сок всех ис­пол­няе­мых фай­лов, за ко­то­ры­ми ве­дет­ся на­блю­дение – ко­ман­дой aureport -x. Глав­ная про­бле­ма с aureport в том, что она умеет генери­ро­вать толь­ко от­чет од­но­го ти­па за раз. То есть, нель­зя по­лу­чить от­чет о фай­ле и о за­пусках за один раз – ка­ж­дый нуж­но фор­ми­ро­вать от­дель­но.
 
Начнем с про­сто­го от­че­та обо всей за­пи­сан­ной ста­ти­сти­ке. Ко­ман­да aureport вы­ве­дет от­чет обо всех за­пи­сан­ных со­бы­ти­ях, по­пыт­ках вхо­да в сис­те­му, про­цес­сах, сис­тем­ных вы­зо­вах и т. д., но она не слиш­ком по­лез­на. Ин­фор­ма­цию обо всех ана­ли­зи­руе­мых фай­лах мож­но по­лу­чить ко­ман­дой aureport -f, а вы­вес­ти спи­сок всех ис­пол­няе­мых фай­лов, за ко­то­ры­ми ве­дет­ся на­блю­дение – ко­ман­дой aureport -x. Глав­ная про­бле­ма с aureport в том, что она умеет генери­ро­вать толь­ко от­чет од­но­го ти­па за раз. То есть, нель­зя по­лу­чить от­чет о фай­ле и о за­пусках за один раз – ка­ж­дый нуж­но фор­ми­ро­вать от­дель­но.
  
Строка 94: Строка 94:
 
Бла­го­да­ря тес­ной ин­те­гра­ции с уст­рой­ст­ва­ми сис­те­ма на­гру­жа­ет­ся очень незна­чи­тель­но, и это вы­де­ля­ет Oprofile из дру­гих про­фи­ли­ров­щи­ков. Поскольку ап­па­рат­ные счет­чи­ки про­из­во­ди­тель­но­сти раз­лич­ны для раз­ных ар­хи­тек­тур, Oprofile бу­дет ра­бо­тать не со все­ми ар­хи­тек­ту­ра­ми. На дан­ный мо­мент под­дер­жи­ва­ют­ся AMD Athlon, AMD64, се­мей­ст­во Intel, PowerPC, ARM, MIPS и несколь­ко дру­гих.
 
Бла­го­да­ря тес­ной ин­те­гра­ции с уст­рой­ст­ва­ми сис­те­ма на­гру­жа­ет­ся очень незна­чи­тель­но, и это вы­де­ля­ет Oprofile из дру­гих про­фи­ли­ров­щи­ков. Поскольку ап­па­рат­ные счет­чи­ки про­из­во­ди­тель­но­сти раз­лич­ны для раз­ных ар­хи­тек­тур, Oprofile бу­дет ра­бо­тать не со все­ми ар­хи­тек­ту­ра­ми. На дан­ный мо­мент под­дер­жи­ва­ют­ся AMD Athlon, AMD64, се­мей­ст­во Intel, PowerPC, ARM, MIPS и несколь­ко дру­гих.
  
Oprofile в дей­ст­вии
+
===Oprofile в дей­ст­вии===
  
 
Что­бы вклю­чить мо­дуль oprofile, не нуж­но ко­пать­ся в на­строй­ках яд­ра, но па­кет Oprofile уста­но­вить все рав­но нуж­но, так как в боль­шин­ст­ве ди­ст­ри­бу­ти­вов по умол­чанию его нет. Но он есть в ре­по­зи­то­ри­ях поч­ти всех ди­ст­ри­бу­ти­вов, и его мож­но уста­но­вить че­рез менед­жер па­ке­тов. Как и в слу­чае с ау­ди­том, так­же бу­дут уста­нов­ле­ны до­полнитель­ные ути­ли­ты, oprocontrol и opreport, ко­то­ры­ми мы восполь­зу­ем­ся для изу­чения ко­да.
 
Что­бы вклю­чить мо­дуль oprofile, не нуж­но ко­пать­ся в на­строй­ках яд­ра, но па­кет Oprofile уста­но­вить все рав­но нуж­но, так как в боль­шин­ст­ве ди­ст­ри­бу­ти­вов по умол­чанию его нет. Но он есть в ре­по­зи­то­ри­ях поч­ти всех ди­ст­ри­бу­ти­вов, и его мож­но уста­но­вить че­рез менед­жер па­ке­тов. Как и в слу­чае с ау­ди­том, так­же бу­дут уста­нов­ле­ны до­полнитель­ные ути­ли­ты, oprocontrol и opreport, ко­то­ры­ми мы восполь­зу­ем­ся для изу­чения ко­да.
Строка 105: Строка 105:
  
 
Ес­ли это пер­вый за­пуск про­фи­ли­ров­щи­ка, оставь­те его по­ра­бо­тать на вре­мя по­едания сэн­дви­ча, а за­тем вы­полните ко­ман­ду opcontrol --stop для оста­нов­ки про­фи­ли­ро­вания.
 
Ес­ли это пер­вый за­пуск про­фи­ли­ров­щи­ка, оставь­те его по­ра­бо­тать на вре­мя по­едания сэн­дви­ча, а за­тем вы­полните ко­ман­ду opcontrol --stop для оста­нов­ки про­фи­ли­ро­вания.
 +
{{Врезка|left|Заголовок= Аудит похитрее|Ширина=30%|Содержание= Команда auditctl умеет выполнять и более изощренный аудит – скажем, регистрировать все запуски Firefox или вызовы команды chmod. Мы уже обсудили опцию -w, которая активирует слежку на время. Другие полезные опции auditctl – -a и -A, они приписывают правила аудита к концу или к началу файла /etc/audit/audit.rules, соответственно. Чтобы описать правила, пользуйтесь ко­мандой auditctl -a list,action. Допустимые величины для list и action перечислены на man-странице auditctl.
  
 +
Аудит, включаемый командой
 +
 +
auditctl -a exit,always -S chmod -S
 +
chown -S mount -S umount
 +
 +
будет отслеживать все системные запросы на изменение владельцев или прав на файлы, и все операции (раз)монтирования.
 +
 +
Используя флаг -k, можно определить ключи для каждой из этих операций.}}
 
За­тем про­смот­ри­те за­пи­сан­ные дан­ные ко­ман­дой opreport; но, су­дя по на­ше­му опы­ту, луч­ше пе­ре­на­пра­вить вы­вод че­рез less, ина­че зна­чи­тель­ная часть дан­ных про­сто про­ле­тит неза­ме­чен­ны­ми: opreport | less:
 
За­тем про­смот­ри­те за­пи­сан­ные дан­ные ко­ман­дой opreport; но, су­дя по на­ше­му опы­ту, луч­ше пе­ре­на­пра­вить вы­вод че­рез less, ина­че зна­чи­тель­ная часть дан­ных про­сто про­ле­тит неза­ме­чен­ны­ми: opreport | less:
  
Строка 152: Строка 161:
 
Мы лишь поверхностно косну­лись простейших воз­мож­но­стей Oprofile, по­то­му что подлиное раскрытие ее потенциала вы­хо­дит за пре­де­лы этой ста­тьи. Бо­лее под­роб­ное об­су­ж­дение за­ве­ло бы нас в дебри про­грам­ми­ро­вания, а это не со­всем в русле на­ше­го уро­ка.
 
Мы лишь поверхностно косну­лись простейших воз­мож­но­стей Oprofile, по­то­му что подлиное раскрытие ее потенциала вы­хо­дит за пре­де­лы этой ста­тьи. Бо­лее под­роб­ное об­су­ж­дение за­ве­ло бы нас в дебри про­грам­ми­ро­вания, а это не со­всем в русле на­ше­го уро­ка.
  
За­клад­ки Bash
+
===За­клад­ки Bash===
  
 
Ос­та­вим выс­ший пи­ло­таж в покое и рас­смот­рим один из са­мых ве­се­лых про­ек­тов для команд­ной стро­ки, ко­то­рый наверняка оце­нят все поль­зо­ва­те­ли Bash.
 
Ос­та­вим выс­ший пи­ло­таж в покое и рас­смот­рим один из са­мых ве­се­лых про­ек­тов для команд­ной стро­ки, ко­то­рый наверняка оце­нят все поль­зо­ва­те­ли Bash.
Строка 162: Строка 171:
 
Те­перь со­храните файл под именем ~/.dirb, от­крой­те файл п~/.bashrc в тек­сто­вом ре­дак­то­ре и до­бавь­те в его конец стро­ку source ~/.dirb. За­кон­чив уста­нов­ку, мож­но соз­да­вать за­клад­ки в команд­ной стро­ке.
 
Те­перь со­храните файл под именем ~/.dirb, от­крой­те файл п~/.bashrc в тек­сто­вом ре­дак­то­ре и до­бавь­те в его конец стро­ку source ~/.dirb. За­кон­чив уста­нов­ку, мож­но соз­да­вать за­клад­ки в команд­ной стро­ке.
  
Соз­да­ем за­клад­ку
+
===Соз­да­ем за­клад­ку===
  
 
Что­бы соз­дать за­клад­ку на ка­та­лог, сна­ча­ла пе­рей­ди­те в него обыч­ной ко­ман­дой cd:
 
Что­бы соз­дать за­клад­ку на ка­та­лог, сна­ча­ла пе­рей­ди­те в него обыч­ной ко­ман­дой cd:
Строка 173: Строка 182:
  
 
Те­перь в ка­та­лог ~/Music мож­но пе­рей­ти ко­ман­дой g, ко­то­рая оз­на­ча­ет go to directory [пе­рей­ти в ка­та­лог]: g m. Об­ра­ти­те внимание на про­бе­лы, помещенные ме­ж­ду дву­мя бу­к­ва­ми в обе­их ко­ман­дах.
 
Те­перь в ка­та­лог ~/Music мож­но пе­рей­ти ко­ман­дой g, ко­то­рая оз­на­ча­ет go to directory [пе­рей­ти в ка­та­лог]: g m. Об­ра­ти­те внимание на про­бе­лы, помещенные ме­ж­ду дву­мя бу­к­ва­ми в обе­их ко­ман­дах.
 
+
{{Врезка|right|Заголовок= Скорая помощь|Ширина=10%|Содержание=
 +
Ес­ли вы хо­ти­те про­фи­ли­ро­вать яд­ро, вам по­на­до­бит­ся сжа­тый файл vmlinux. В боль­шин­ст­ве ди­ст­ри­бу­ти­вов стан­дарт­ное яд­ро из­ме­не­но, по­это­му най­ди­те пра­виль­ный файл.}}
 
С DirB мож­но по­за­быть о cd, вме­сто нее поль­зу­ясь g. В смыс­ле, ко­ман­да g ра­бо­та­ет и для пол­но­го пу­ти.
 
С DirB мож­но по­за­быть о cd, вме­сто нее поль­зу­ясь g. В смыс­ле, ко­ман­да g ра­бо­та­ет и для пол­но­го пу­ти.
  
 
За­клад­ку не обязательно обозначать одной буквой – она мо­жет со­сто­ять и из несколь­ких. На­при­мер, ес­ли m ссы­ла­ет­ся на ка­та­лог ~/Music, мож­но соз­дать за­клад­ку mo для ка­та­ло­га с се­мей­ным ви­део.
 
За­клад­ку не обязательно обозначать одной буквой – она мо­жет со­сто­ять и из несколь­ких. На­при­мер, ес­ли m ссы­ла­ет­ся на ка­та­лог ~/Music, мож­но соз­дать за­клад­ку mo для ка­та­ло­га с се­мей­ным ви­део.
 
+
 
Ко­ман­да sl вы­ве­дет спи­сок всех за­кла­док на ка­та­ло­ги. За­тем ко­ман­дой d мож­но про­смот­реть путь до ка­та­ло­га. Так, ко­ман­да d m вы­ве­дет на эк­ран /home/linuxlala/Music/.
 
Ко­ман­да sl вы­ве­дет спи­сок всех за­кла­док на ка­та­ло­ги. За­тем ко­ман­дой d мож­но про­смот­реть путь до ка­та­ло­га. Так, ко­ман­да d m вы­ве­дет на эк­ран /home/linuxlala/Music/.
  

Текущая версия на 14:28, 20 октября 2018


Bash: Зна­ко­мим­ся с не­сколь­ки­ми мощ­ны­ми ути­ли­та­ми


Содержание

[править] Bash: Ау­дит и про­фи­ли­ро­ва­ние

Зло­ст­ный рэ­пер Ша­шанк Шар­ма го­во­рит, что Bash ска­чет как Джаг­гер. Хм-м... Са­ми раз­бе­рем­ся.

(thumbnail)
Наш эксперт Ша­шанк Шар­ма бо­лее че­ты­рех лет пи­шет о сво­бод­ном ПО для раз­лич­ных из­да­ний, вклю­чая Linux.com. Он со­ав­тор кни­ги «Fedora для на­чи­наю­щих».

Во­пре­ки недавнему оп­ро­су на TuxRadar, кла­во­лю­бы вро­де нас про­сто мо­лят­ся на Bash. Ни Rolling Stones, ни Status Quo, ни ста­рая до­б­рая команд­ная стро­ка не те­ря­ют по­пу­ляр­но­сти. Ес­ли обыч­ные поль­зо­ва­те­ли об­ра­ща­ют­ся к Bash лишь что­бы ра­зок по­чи­тать man-страницы, то для опыт­ных и утом­лен­ных гра­фи­че­­ским ин­тер­фей­сом поль­зо­ва­те­лей Bash со сво­им без­гранич­ным на­бо­ром ути­лит в за­па­се мо­жет сде­лать го­раз­до боль­ше. На на­шем уро­ке мы об­су­дим несколь­ко та­ин­ст­вен­ных и мощ­ных ути­лит, ко­то­рые не ка­ж­до­му по зу­бам.

Начнем с auditd, де­мо­на яд­ра Linux – он уме­ет неза­мет­но сле­дить за поль­зо­ва­те­ля­ми и фай­ла­ми и со­став­лять под­роб­ные от­че­ты. Ес­ли вы хо­ти­те над­зи­рать за сво­ей фай­ло­вой сис­те­мой, auditd – ваш ин­ст­ру­мент. За­тем мы рас­смот­рим Oprofile, мощ­ную ути­ли­ту команд­ной стро­ки; с ее по­мо­щью мож­но ис­сле­до­вать, час­то ли ис­поль­зу­ет­ся кэш L2 или про­ис­хо­дит об­ра­щение к па­мя­ти, сле­дить за ко­ли­че­­ст­вом ап­па­рат­ных пре­ры­ваний и де­лать мас­су дру­гих кру­тых штук с ядром или во­об­ще лю­бым ко­дом. Бу­ду­чи по­клонника­ми Bash, мы рас­смот­рим и несколь­ко за­бав­ных про­ек­тов, вро­де DirB, ко­то­рый здо­ро­во об­лег­ча­ет на­ви­га­цию по Bash. Начнем!

[править] Ути­ли­ты Auditd

Де­мон auditd – мощней­шая и на­дежней­шая ути­ли­та для сле­жения за фай­ла­ми в Linux. Она обес­пе­чи­ва­ет ау­дит сис­тем­ных вы­зо­вов, и вы мо­же­те на­блю­дать поч­ти за всем, что тво­рит­ся на ком­пь­ю­те­ре. Она так­же фор­ми­ру­ет под­роб­ные от­че­ты для по­сле­дую­ще­го ана­ли­за, и хо­тя в ней са­мой ника­ко­го ме­ханиз­ма безо­пас­но­сти нет, эти под­роб­ные от­че­ты по­мо­гут за­щи­тить ва­шу сис­те­му го­раз­до эф­фек­тивнее.

Мо­дуль audit яв­ля­ет­ся ча­стью яд­ра Linux, на­чи­ная с вер­сии 2.6. Так­же нуж­но уста­но­вить до­полнитель­ный па­кет auditd, ес­ли он еще не уста­нов­лен. Он со­дер­жит поль­зо­ва­тель­ские ути­ли­ты, та­кие как auditctl, aureport, ausearch и autrace; их мож­но на­стро­ить и при­ме­нять для от­сле­жи­вания из­менений в фай­ло­вой сис­те­ме. Этот па­кет есть в ре­по­зи­то­ри­ях ва­ше­го ди­ст­ри­бу­ти­ва, и он лег­ко уста­нав­ли­ва­ет­ся че­рез ути­ли­ту управ­ления па­ке­та­ми ва­ше­го ди­ст­ри­бу­ти­ва.

У ка­ж­дой из этих ути­лит есть своя man-страница, где пе­ре­чис­ле­ны оп­ции ее за­пуска.

Ути­ли­та auditctl на­страи­ва­ет де­мон и вклю­ча­ет либо от­клю­ча­ет ау­дит. Для по­ис­ка необ­хо­ди­мых за­пи­сей в фай­лах жур­на­лов ау­ди­та по име­нам поль­зо­ва­те­лей, име­нам фай­лов, про­цес­сам и т. д. поль­зуй­тесь ути­ли­той ausearch, а для соз­дания об­ще­го от­че­та по жур­на­лам – ути­ли­той aureport.

Фай­лы на­строй­ки auditd на­хо­дят­ся в ка­та­ло­ге /etc/audit/. В фай­ле auditd.conf за­да­ют­ся рас­по­ло­жение лог-фай­ла, па­ра­мет­ры его очи­ст­ки (ро­та­ции), его раз­мер и раз­лич­ные дру­гие дей­ст­вия, на­при­мер, по со­бы­ти­ям с по­чтой или дис­ком, за­даю­щие, как нуж­но по­сту­пить с лог-фай­ла­ми, ес­ли дис­ко­вое про­стран­ст­во за­кон­чит­ся.

По­трать­те несколь­ко ми­нут на зна­ком­ст­во с на­строй­ка­ми по умол­чанию в auditd.conf – неко­то­рые вы, воз­мож­но, за­хо­ти­те из­менить, ска­жем, flush и freq, ко­то­рые оп­ре­де­ля­ют спо­соб и час­то­ту за­пи­си лог-фай­лов на диск.

Еще один файл в ка­та­ло­ге /etc/audit/ – audit.rules – со­дер­жит ко­ман­ды, за­гру­жае­мые при за­пуске де­мо­на audit. Но файл auditd.conf важнее, так как необ­хо­ди­мые ди­рек­ти­вы де­мо­ну audit лег­ко от­пра­вить ко­ман­дой auditctl.

[править] На­блю­дение за фай­ла­ми

За­дать на­строй­ки ау­ди­та фай­лов мож­но с по­мо­щью auditctl или до­ба­вив эти же ко­ман­ды в файл audit.rules – в этом слу­чае де­мон audit при­сту­пит к ра­бо­те сра­зу по­сле за­пуска. Фор­мат фай­ла audit.rules несколь­ко иной, и мы рас­ска­жем о нем чуть поз­же. За­да­вать пра­ви­ла монито­рин­га в audit.rules или нет – ваш лич­ный вы­бор: ни тот, ни дру­гой спо­соб не об­ла­да­ют осо­бы­ми пре­иму­ще­ст­ва­ми или недостат­ка­ми. При на­строй­ке монито­рин­га фай­лов мож­но за­дать дей­ст­вия, ко­то­рые нуж­но от­сле­жи­вать и за­пи­сы­вать, на­при­мер, read, write, execute и attribute [чтение, запись, ис­полнение или из­менение ат­ри­бу­тов]. Эту ра­бо­ту сде­ла­ет ко­ман­да

auditctl -w ~/Documents/esoteric-commands.odt -p war -k esoteric-commands

Здесь флаг -w за­да­ет файл, ко­то­рый нуж­но от­сле­жи­вать, с пол­ным пу­тем до него, а флаг -p за­да­ет пра­ва досту­па, за ко­то­ры­ми мы хо­тим на­блю­дать. В дан­ном слу­чае w и r оз­на­ча­ет write и read, а а – из­менение ат­ри­бу­тов фай­ла. Все сис­тем­ные вы­зо­вы к фай­лу, за­пра­ши­ваю­щие эти три пра­ва досту­па, бу­дут за­пи­са­ны.

В от­ли­чие от -w и -p, флаг -k не обя­за­те­лен, но вы ско­ро пой­ме­те, что это са­мая важ­ная часть ко­ман­ды auditctl! Жур­на­лы всех ау­ди­тов сво­дят­ся в один лог-файл, и со вре­менем он так раз­рас­тет­ся, что най­ти за­пи­си для ин­те­ре­сую­ще­го вас фай­ла бу­дет непро­сто.

Пусть вы на­блю­дае­те за 20 фай­ла­ми, и по­сле двух ме­ся­цев ре­ги­ст­ра­ции опе­ра­ций чтения и за­пи­си хо­ти­те по­лу­чить ин­фор­ма­цию по од­но­му из этих фай­лов. Вы вряд ли смо­же­те про­смот­реть весь лог-файл, что­бы най­ти за­пи­си для это­го фай­ла. По­жа­луй, вы никогда их не най­де­те! Здесь-то и по­мо­жет флаг -k. Это со­кра­щение от key [ключ], и для ка­ж­до­го из за­даний на ау­дит мож­но соз­дать свой ключ. По­том нуж­но лишь вы­брать ре­зуль­та­ты из лог-фай­лов по за­дан­но­му клю­чу, и вуа­ля – го­то­во!

Спи­сок всех ак­тив­ных пра­вил вы­во­дит­ся ко­ман­дой auditctl -l. Ко­ман­да auditctl -D уда­лит все пра­ви­ла. Ре­гистр име­ет зна­чение: ключ -d ис­поль­зу­ет­ся для уда­ления одиноч­ных пра­вил.

[править] Раз­би­ра­ем­ся в жур­на­лах

По­сле на­строй­ки ау­ди­та для од­но­го или двух фай­лов зай­ди­те в ка­та­лог /var/log/audit/ и от­крой­те файл audit.log. Про­кру­ти­те его, и вы пой­ме­те, что ра­зо­брать­ся во всей этой ин­фор­ма­ции не так-то про­сто. К сча­стью, с по­мо­щью ути­ли­ты ausearch мож­но вы­де­лить ин­фор­ма­цию о нуж­ных фай­лах по клю­чам та­ким об­ра­зом:

# ausearch -k esoteric-command

time->Sun Jul 29 20:30:11 2012\

type=PATH msg=audit(1343574011.954:348): item=0 name=”/home/linuxlala/Documents/LXF-esoteric-commands.odt”\

inode=543696 dev=08:05 mode=0100644 ouid=1000 ogid=1000 rdev=00:00\

type=CWD msg=audit(1343574011.954:348): cwd=”/home/linuxlala”\

type=SYSCALL msg=audit(1343574011.954:348): arch=40000003 syscall=5 success=yes exit=39 a0=bff2dc28 a1=8002 a2=0 a3=0 items=1 ppid=1 pid=3299\

auid=4294967295 uid=1000 gid=1000 euid=1000

suid=1000fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none)ses=4294967295 comm=”soffice.bin” exe=”/usr/lib/libreoffice/program/soffice.bin” key=”esoteric-commands”

Вам сра­зу бро­сят­ся в гла­за клю­че­вые сло­ва вро­де ‘time’, ‘name’, ‘uid’, ‘exe’, ‘key’ и др. Они, со­от­вет­ст­вен­но, опи­сы­ва­ют: вре­мя; имя от­сле­жи­вае­мо­го фай­ла; поль­зо­ва­те­ля, об­ра­тив­ше­го­ся к фай­лу; имя при­ло­жения, об­ра­тив­ше­го­ся к фай­лу; ключ, за­дан­ный в ко­ман­де auditctl.

[править] Ис­поль­зо­вание ausearch

С по­мо­щью ути­ли­ты ausearch лег­ко про­смат­ри­вать лог-фай­лы, ис­поль­зуя лю­бой из пе­ре­чис­лен­ных вы­ше па­ра­мет­ров в ка­че­­ст­ве фильт­ра. На­при­мер, ко­ман­да ausearch -ts today -k esoteric-commands ото­бра­зит все за­пи­си, со­от­вет­ст­вую­щие клю­чу esoteric-commands. Вы уви­ди­те, что для ка­ж­дой опе­ра­ции досту­па к фай­лу, его из­менения, ко­пи­ро­вания и т. д. есть запись. Флаг -ts за­да­ет вре­мен­ную от­мет­ку. Today оз­на­ча­ет, что нам ин­те­рес­ны все за­пи­си, сде­лан­ные се­го­дня.

В за­ви­си­мо­сти от ти­па фай­ла, на­при­мер, фай­ла .txt, ко­то­рый мож­но от­кры­вать в несколь­ких про­грам­мах, с по­мо­щью ausearch мож­но про­смот­реть лог-фай­лы для кон­крет­ных при­ло­жений. На­при­мер, же­лая уз­нать, когда файл был от­крыт в gedit, вы­полните ко­ман­ду ausearch -ts today -k text-file -x gedit. Флаг -x за­да­ет имя ин­те­ре­сую­ще­го нас при­ло­жения. Ана­ло­гич­но, мож­но ог­раничить по­иск кон­крет­ным поль­зо­ва­те­лем с userid или лю­бым дру­гим па­ра­мет­ром.

По умол­чанию ausearch под­клю­ча­ет­ся к те­ку­ще­му лог-фай­лу, но с по­мо­щью фла­га -f мож­но ука­зать дру­гой, ес­ли вы хо­ти­те что-то по­ис­кать в ар­хив­ных лог-фай­лах.

При всем несомненном удоб­ст­ве ра­бо­ты с ausearch, жут­кое ко­ли­че­­ст­во за­пи­сей го­во­рит о том, что при­дет­ся ис­кать игол­ку в сто­ге се­на. Здесь в де­ло всту­па­ет ути­ли­та aureport, ко­то­рая вы­ве­дет толь­ко нуж­ную нам ин­фор­ма­цию.

Начнем с про­сто­го от­че­та обо всей за­пи­сан­ной ста­ти­сти­ке. Ко­ман­да aureport вы­ве­дет от­чет обо всех за­пи­сан­ных со­бы­ти­ях, по­пыт­ках вхо­да в сис­те­му, про­цес­сах, сис­тем­ных вы­зо­вах и т. д., но она не слиш­ком по­лез­на. Ин­фор­ма­цию обо всех ана­ли­зи­руе­мых фай­лах мож­но по­лу­чить ко­ман­дой aureport -f, а вы­вес­ти спи­сок всех ис­пол­няе­мых фай­лов, за ко­то­ры­ми ве­дет­ся на­блю­дение – ко­ман­дой aureport -x. Глав­ная про­бле­ма с aureport в том, что она умеет генери­ро­вать толь­ко от­чет од­но­го ти­па за раз. То есть, нель­зя по­лу­чить от­чет о фай­ле и о за­пусках за один раз – ка­ж­дый нуж­но фор­ми­ро­вать от­дель­но.

C aureport мож­но фор­ми­ро­вать раз­но­об­раз­ные от­че­ты, на­при­мер, по про­цес­сам, сис­тем­ным вы­зо­вам, поль­зо­ва­те­лям и т. д. Пол­ный спи­сок мож­но най­ти на ее man-странице.

[править] Oprofile: что и как

Ска­жи­те в присутствии поль­зо­ва­те­лей Linux сло­ва «сис­тем­ный про­фи­ли­ров­щик», и чуть менее чем все от ужа­са приобретут сходство с ино­планетянами из «28 дней спустя». Фильм и прав­да неплох – и вы­ра­жение их лиц то­же убе­ди­тель­но! Сво­ей дурной ре­пу­та­ци­ей сис­тем­ные про­фи­ли­ров­щи­ки вро­де Oprofile обя­за­ны то­му, что о них не рас­ска­жешь, не упо­мя­нув о «про­вер­ке про­из­во­ди­тель­но­сти» и «счет­чи­ках про­из­во­ди­тель­но­сти про­цес­со­ра».

Oprofile – сис­тем­ная про­грам­ма для ана­ли­за про­из­во­ди­тель­но­сти лю­бо­го при­ло­жения в ва­шей сис­те­ме, будь то яд­ро или вообще произвольный ко­д. У боль­шин­ст­ва обыч­ных поль­зо­ва­те­лей никогда не бу­дет по­во­да ее применить, но ес­ли вы раз­ра­бот­чик или «же­ле­зячник» и хо­ти­те убе­ре­диться, что сис­тем­ные ре­сур­сы ис­поль­зу­ют­ся пра­виль­но, Oprofiler – то, что вам надо.

Как и си­сте­ма ау­ди­та, Oprofile со­сто­ит из мо­ду­лей яд­ра и сис­тем­но­го де­мо­на, со­би­раю­ще­го дан­ные с ра­бо­таю­щей сис­те­мы.

С Oprofile легко оценить про­из­во­ди­тель­ность лю­бо­го ко­да, вы­пол­няю­ще­го­ся в сис­те­ме, вклю­чая яд­ро, мо­ду­ли яд­ра, об­ра­бот­чи­ки пре­ры­ваний яд­ра, раз­де­ляе­мые биб­лио­те­ки и при­ло­жения. Про­грам­ма ис­поль­зу­ет дан­ные ап­па­рат­ных счет­чи­ков про­из­во­ди­тель­но­сти, имею­щие­ся в боль­шин­ст­ве со­вре­мен­ных про­цес­со­ров, и за­пи­сы­ва­ет ста­ти­сти­ку, с по­мо­щью ко­то­рой мож­но оп­ре­де­лить «уз­кие мес­та» в сво­ем ко­де и внести необ­хо­ди­мые из­менения для борьбы с ними.

Ап­па­рат­ные счет­чи­ки про­из­во­ди­тель­но­сти предусмотрены в боль­шин­ст­ве со­вре­мен­ных про­цес­со­ров. Это встро­ен­ные ре­ги­ст­ры, в которые мож­но за­пи­сы­вать ап­па­рат­ные со­бы­тия, та­кие как об­ра­щения к па­мя­ти, про­ма­хи кэ­ша, так­то­вые цик­лы про­цес­со­ра и т. д.

Бла­го­да­ря тес­ной ин­те­гра­ции с уст­рой­ст­ва­ми сис­те­ма на­гру­жа­ет­ся очень незна­чи­тель­но, и это вы­де­ля­ет Oprofile из дру­гих про­фи­ли­ров­щи­ков. Поскольку ап­па­рат­ные счет­чи­ки про­из­во­ди­тель­но­сти раз­лич­ны для раз­ных ар­хи­тек­тур, Oprofile бу­дет ра­бо­тать не со все­ми ар­хи­тек­ту­ра­ми. На дан­ный мо­мент под­дер­жи­ва­ют­ся AMD Athlon, AMD64, се­мей­ст­во Intel, PowerPC, ARM, MIPS и несколь­ко дру­гих.

[править] Oprofile в дей­ст­вии

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

С opcontrol ана­ли­зи­ро­вать ка­ж­дое при­ло­жение или код не обя­за­тель­но. На са­мом де­ле, как только вы за­пустите ко­ман­ду opcontrol --start, Oprofile начнет регистрировать вообще всю деятельность ва­шей сис­те­мы подряд. Эта ко­ман­да бу­дет ана­ли­зи­ро­вать и яд­ро; ес­ли этого вам не требуется, ука­жи­те па­ра­метр --no-vmlinux.

Хо­тя вы­пол­няе­мые про­грам­мой дей­ст­вия ка­жут­ся слож­ны­ми, Oprofile поч­ти не на­гру­жа­ет сис­те­му, и в фоне вы его да­же не за­ме­ти­те.

Пре­кра­ща­ет сбор дан­ных ко­ман­да opcontrol --stop. По умол­чанию лог-фай­лы хра­нят­ся в ка­та­ло­ге /var/log/oprofile/, а файл /root/.oprofile/daemonrc управ­ля­ет по­ве­дением opcontrol. Па­ра­мет­ров на­строй­ки не так уж мно­го, не счи­тая вклю­чения или от­клю­чения про­фи­ли­ро­вания яд­ра. Это воз­мож­но бла­го­да­ря то­му, что мож­но за­да­вать на­строй­ки на ле­ту, как мы сде­ла­ли с па­ра­мет­ром --no-vmlinux.

Ес­ли это пер­вый за­пуск про­фи­ли­ров­щи­ка, оставь­те его по­ра­бо­тать на вре­мя по­едания сэн­дви­ча, а за­тем вы­полните ко­ман­ду opcontrol --stop для оста­нов­ки про­фи­ли­ро­вания.

За­тем про­смот­ри­те за­пи­сан­ные дан­ные ко­ман­дой opreport; но, су­дя по на­ше­му опы­ту, луч­ше пе­ре­на­пра­вить вы­вод че­рез less, ина­че зна­чи­тель­ная часть дан­ных про­сто про­ле­тит неза­ме­чен­ны­ми: opreport | less:

CPU: Core 2, speed 1862 MHz (estimated)

Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles)

count 100000

CPU_CLK_UNHALT...|

samples| %|


14924909 26.5600 no-vmlinux

12378992 22.0294 libflashplayer.so

7661915 13.6350 libxul.so

3480139 6.1932 libc-2.13.so

3002265 5.3428 libavcodec.so.52.72.2

2859126 5.0880 libspeexdsp.so.1.5.0

986232 1.7551 libpthread-2.13.so

850065 1.5128 libmad.so.0.2.1

718010 1.2778 Xorg

CPU_CLK_UNHALT...|

samples| %|


Этот неболь­шой фраг­мент являет собой менее 1 % всех за­пи­сан­ных дан­ных, но на нем про­ще будет дать по­яснения.

В верхней час­ти вы ви­ди­те опи­сание ар­хи­тек­ту­ры сис­те­мы, в дан­ном слу­чае это Intel Core 2. В ка­ж­дом бло­ке с дан­ны­ми три столб­ца. В пер­вом столб­це ука­за­но ко­ли­че­­ст­во со­б­ран­ных дан­ных; во вто­ром – вре­мя, по­тра­чен­ное на этот про­цесс; в треть­ем – все пе­ре­хва­чен­ные про­цес­сы. На­при­мер, ес­ли смот­реть ви­део с YouTube из Firefox, об­ра­щение к биб­лио­те­ке Flash бу­дет пе­ре­хва­че­но и поя­вит­ся в треть­ем столб­це.

Ес­ли вы пред­по­чли бы сна­ча­ла по­ра­бо­тать в гра­фи­че­­ском ин­тер­фей­се, что­бы по­лу­чить пред­став­ление о про­ис­хо­дя­щем, прежде чем очертя голову ринуться в командную строку, имеет смысл обратиться к oprofilegui. В этой про­грам­ме мож­но на­стро­ить все ком­понен­ты Oprofile – на­при­мер, вы­брать сис­тем­ные со­бы­тия для монито­рин­га, по­сле че­го на­строй­ки бу­дут за­пи­са­ны в файл /root/.oprofile/daemonrc. Если вы уста­нов­ите эту про­грам­му, ее мож­но будет за­пускать из тер­ми­на­ла ко­ман­дой oprof_start.

Мы лишь поверхностно косну­лись простейших воз­мож­но­стей Oprofile, по­то­му что подлиное раскрытие ее потенциала вы­хо­дит за пре­де­лы этой ста­тьи. Бо­лее под­роб­ное об­су­ж­дение за­ве­ло бы нас в дебри про­грам­ми­ро­вания, а это не со­всем в русле на­ше­го уро­ка.

[править] За­клад­ки Bash

Ос­та­вим выс­ший пи­ло­таж в покое и рас­смот­рим один из са­мых ве­се­лых про­ек­тов для команд­ной стро­ки, ко­то­рый наверняка оце­нят все поль­зо­ва­те­ли Bash.

Про­ект DirB иде­аль­но под­хо­дит тем, кто по­дол­гу проси­живает в команд­ной стро­ке и хо­тел бы побы­ст­рее пе­ре­клю­чать­ся ме­ж­ду ка­та­ло­га­ми. То есть, ес­ли вам час­то при­хо­дит­ся на­би­рать длин­ные пу­ти до вло­жен­ных ка­та­ло­гов, с DirB мож­но соз­дать за­клад­ки для этих ка­та­ло­гов. С эти­ми за­клад­ка­ми мож­но бу­дет пе­рей­ти в нуж­ный ка­та­лог на­жа­ти­ем па­ры кла­виш.

От­крой­те ссыл­ку http://www.verilog.net/dirb.info/bashDirB.txt и ско­пи­руй­те текст, появившийся на эк­ране, в свой излю­бленный тек­сто­вый ре­дак­тор. Пер­вая стро­ка под на­чаль­ным ком­мен­та­ри­ем PS1=”\[\033]0;\w\007\]\t \!>“ нам без надобности – она из­ме­ня­ет внешний вид тер­ми­на­ла, ото­бра­жение те­ку­ще­го ка­та­ло­га и дру­гих дан­ных; по­это­му за­ком­мен­ти­руй­те ее, приписав в начале строки значок #.

Те­перь со­храните файл под именем ~/.dirb, от­крой­те файл п~/.bashrc в тек­сто­вом ре­дак­то­ре и до­бавь­те в его конец стро­ку source ~/.dirb. За­кон­чив уста­нов­ку, мож­но соз­да­вать за­клад­ки в команд­ной стро­ке.

[править] Соз­да­ем за­клад­ку

Что­бы соз­дать за­клад­ку на ка­та­лог, сна­ча­ла пе­рей­ди­те в него обыч­ной ко­ман­дой cd:

cd ~/Music

Те­перь на­бе­ри­те s m, и все будет го­то­во. Бу­к­ва m – это за­клад­ка для на­ше­го ка­та­ло­га ~/Music, соз­дан­ная с по­мо­щью DirB. s, как лег­ко пред­по­ло­жить, оз­на­ча­ет save directory bookmark [со­хранить за­клад­ку для ка­та­ло­га].

С по­мо­щью s мож­но соз­да­вать за­клад­ки и без пе­ре­хо­да в ка­та­лог, но тогда потребуется ука­зы­вать пол­ный путь до ка­та­ло­га, на­при­мер: s PP /home/linuxlala/Pictures/picnic-2010. Так как DirB чув­ст­ви­тель­на к ре­ги­ст­ру, мож­но соз­дать за­клад­ки pp и PP, ука­зы­ваю­щие на раз­ные ка­та­ло­ги.

Те­перь в ка­та­лог ~/Music мож­но пе­рей­ти ко­ман­дой g, ко­то­рая оз­на­ча­ет go to directory [пе­рей­ти в ка­та­лог]: g m. Об­ра­ти­те внимание на про­бе­лы, помещенные ме­ж­ду дву­мя бу­к­ва­ми в обе­их ко­ман­дах.

С DirB мож­но по­за­быть о cd, вме­сто нее поль­зу­ясь g. В смыс­ле, ко­ман­да g ра­бо­та­ет и для пол­но­го пу­ти.

За­клад­ку не обязательно обозначать одной буквой – она мо­жет со­сто­ять и из несколь­ких. На­при­мер, ес­ли m ссы­ла­ет­ся на ка­та­лог ~/Music, мож­но соз­дать за­клад­ку mo для ка­та­ло­га с се­мей­ным ви­део.

Ко­ман­да sl вы­ве­дет спи­сок всех за­кла­док на ка­та­ло­ги. За­тем ко­ман­дой d мож­но про­смот­реть путь до ка­та­ло­га. Так, ко­ман­да d m вы­ве­дет на эк­ран /home/linuxlala/Music/.

Ес­ли на­доб­ность в за­клад­ке на ка­та­лог окончательно от­па­ла, уда­ли­те ее ко­ман­дой r. На­при­мер, r d уда­лит за­клад­ку на ~/Desktop.

В DirB есть и дру­гие ко­ман­ды, на­при­мер, p, ко­то­рая по­хо­жа на ко­ман­ду pushd в Bash.

На при­вы­кание к команд­ной стро­ке, безусловно, по­тре­бует­ся неко­то­рое вре­мя, осо­бен­но ес­ли вы пред­по­чи­тае­те мышь кла­виа­ту­ре; но с ав­то­до­полнением, рас­ши­рением ис­то­рии, DirB и дру­ги­ми ути­ли­та­ми, ко­то­рые способствуют вашему про­смот­ру сай­тов, по­лу­чению и от­прав­лению поч­ты, ра­бо­те с до­ку­мен­та­ми, под­клю­чению к уда­лен­ным ком­пь­ю­те­рам и да­же про­фи­ли­ро­ванию и вы­пол­нению ау­дита фай­ло­вой сис­те­мы, есть мно­же­ст­во веских при­чин обратиться к Bash и воссла­вить его невероятную эффективность. |

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