LXF163: Bash: Аудит и профилирование
|
|
|
Bash: Знакомимся с несколькими мощными утилитами
Содержание |
Bash: Аудит и профилирование
Злостный рэпер Шашанк Шарма говорит, что Bash скачет как Джаггер. Хм-м... Сами разберемся.
Вопреки недавнему опросу на 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\
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
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 и восславить его невероятную эффективность. |