Чем открыть файл лога трассировки

Обновлено: 03.07.2024

Автотрассировщик Quick Route используется для трассировки несложных плат, содержащих небольшое число компонентов. Автотрассировщик PRO Route 2/4 трассирует однослойные и двухслойные платы без ограничения числа выводов или четырехслойные платы с числом выводов компонентов до 4000. Автотрассировщик PRO Route трассирует платы, имеющие до 30 слоев без указанных ограничений. Автотрассировщик SPECCTRA поставляется дополнительно и используется не только для трассировки соединений, но и для ручного или автоматического размещения компонентов на печатной плате. На сегодняшний день SPECCTRA является наиболее «продвинутым» автотрассировщиком печатных плат и используется при проектировании сложных печатных плат.

5.1. Автотрассировщик Quick Route

Автотрассировщик запускается из графического редактора РСВ с помощью меню Route/Autorouters. Диалоговое окно автотрассировщика Quick Route показано на рис. 5.1.

Автотрассировщик не требует указания границы печатной платы в слое Board и не изменяет топологию предварительно проложенных пользователем проводников. Предварительно на плате должны быть размещены все компоненты, определены все электрические связи. Некоторые связи могут быть уже проведены. Можно задать области запрета для трассировки по команде Place/KeepOut.

Рис. 5.1. Окно автотрассировщика Quick Route

В области Strategy диалогового окна находятся следующие кнопки:

Кнопка Load загружает готовый файл стратегии. Кнопка Save сохраняет выбранный файл стратегии для текущего проекта. Кнопка Set Base устанавливает параметры стратегии и имена перечисленных выше трех файлов по умолчанию.

Кнопка Layers вызывает для проверки или возможных изменений диалоговое окно Options Layers.

Кнопка Net Attrs вызывает диалоговое окно Edit Nets для просмотра и редактирования атрибутов цепей или редактирования атрибутов.

Кнопка Via Style вызывает диалоговое окно Options Via Style для просмотра и редактирования стеков контактных площадок. Переходные отверстия, которые всегда располагаются в узлах сетки трассировки, для различных цепей можно задавать с помощью атрибута VIASTYLE. Максимальный диаметр переходного отверстия ограничен двумя шагами сетки трассировки.

После нажатия на кнопку Passes в диалоговом окне Pass Selection (рис. 5.2) простановкой соответствующих флажков выбираются типы проходов трассировки.

Рис. 5.2. Окно выбора шагов трассировки

Horizontal — трассировка простых трасс только горизонтальными линиями без переходных отверстий с минимальными, отклонениями от горизонтальной линии.

Vertical — трассировка простых трасс только вертикальными линиями без переходных отверстий с минимальными отклонениями от вертикальной линии.

«Z» Routes (2 vias) — формирование фрагментов цепи, имеющих три проводника (вертикальные и горизонтальные), расположенных в двух разных слоях и соединяемых двумя переходными отверстиями. Такая конфигурация имеет вид буквы Z с различной ее ориентацией. Проводники размещаются на расстоянии не более 100 mil (2,5 мм) от сторон прямоугольника, вершины которого расположены в центре двух соединяемых трассой контактных площадок. Если противоположные слои платы имеют ориентацию трассы отличную от ортогональной, то данный проход не используется.

Via Minimisazion — уменьшает число переходных отверстий на разведенной плате.

Последние два прохода рекомендуется использовать совместно после полного завершения трассировки.

Рис. 5.3. Окно трассировщика Quick Route

Команда Route/Info выводит текущую информацию о ходе трассировки (рис. 5.4).

Рис. 5.4. Окно текущей информации о ходе трассировки

Команда Route/Cancel прекращает процесс трассировки, а пользователь должен сделать выбор — временно прекратить трассировку и запомнить промежуточные результаты (Stop Routing and Save), или прекратить трассировку без сохранения результатов (Cancel Routing and do not save).

После окончания трассировки .LOG формируется информация о результатах выполнения отдельных шагов трассировки и итоговые данные.

Пример такого файла приведен ниже. 2000 РСВ Version 15.10.17 Routing Log File

Input file: 2000\Demo\Demo1_u.pcb Output file: 2000\Demo\RDemo1_u.pcb Strategy file: 2000\Demo\Demo1_u.STR

All dimensions are in mils unless stated. (Все размеры даны в mil.)

Routed by: Quick Route (Тип трассировщика.) Start time: 11:46:09 Free memory: 2029727744

Strategy selections: (Стратегия трассировки.) Routing grid: 25.0 (Шаг сетки трассировки.)

Layer selections: (Выбор слоев).

Signal Bias or Plane Clearances (Расстояния между контактными пло щадками и линиями трасс.)

Layer Selection V-V

Тор Ног 13 13 13 13 13 13

Bottom Ver 13 13 13 13 13 13

* Selected by router.

В этой статье описывается использование диагностических трассировок в Microsoft System Center Essentials 2010 и System Center Operations Manager.

Оригинальная версия продукта: Microsoft System Center Essentials 2010, Microsoft System Center 2007
Исходный номер КБ: 942864

В статье содержатся сведения об изменении реестра. Перед внесением изменений рекомендуется создать резервную копию реестра. и изучить процедуру его восстановления на случай возникновения проблемы. Дополнительные сведения о том, как восстановить реестр, восстановить и изменить его, см. в этой Windows.

Общие сведения

В этой статье обсуждаются средства, доступные для запуска и остановки отслеживания, если вас попросят сделать это представителем Microsoft CSS. В статье также обсуждаются новые функции, предоставляемые в System Center Essentials 2010 г., в System Center Essentials 2007 г. SP1, в System Center Operations Manager 2007 SP1, а также в более поздних версиях.

Расположение средств отслеживания

Папка установки для каждой роли, например роли агента, роли сервера управления или роли шлюза, содержит папку с именем Tools. В папке Tools находятся следующие файлы:

  • StartTracing.cmd
  • StopTracing.cmd
  • TracelogSM.exe
  • TracingGuidsBid.txt
  • TracingGuidsUI.txt
  • TracingGuidsNative.txt
  • TracingReadMe.txt

System Center Essentials 2010, System Center Essentials 2007 sp1 и System Center 2007 SP1 вводят следующие дополнения:

  • FormatTracing.cmd
  • ViewRealtimeTracing.cmd
  • TraceFmtSM.exe
  • OpsMgrTraceTMF.cab
  • Default.tmf
  • System.tmf

Начало отслеживания

В System Center Essentials 2010 System Center 2007 sp1 и более поздних версий автоматически начинается отслеживание роли агента и роли сервера управления. Трассировка будет использовать только выход ошибки. Двоичные файлы трассировки пишутся в windows\logs\OpsMgrTrace папку. Прежде чем изменить уровень трассировки для вывода трассировки, необходимо сначала остановить трассировку.

Чтобы начать диагностику, выполните следующие действия:

На компьютере, на котором необходимо начать трассировку, выберите Начните, выберите Запуск, введите cmd и нажмите кнопку ОК.

В командной подсказке используйте cd команду для изменения каталога Инструментов.

StartTracing LEVEL Введите, а затем нажмите ВВОД. В этой команде замените LEVEL на нужный уровень трассивки. Используйте символы верхнего шкафа, чтобы указать уровень трассивки. Доступны следующие уровни:

Например, введите StartTracing WRN .

При начале трассировки вывод трассировки будет записан в следующие двоичные файлы:

  • MOMTraceNative.etl
  • MOMTraceBID.etl
  • MOMTraceUI.etl

Для Windows 7 Windows Server 2008, Windows Server 2008 R2 и более поздних версий файлы находятся по адресу windows\logs\OpsMgrTrace .

Остановка отслеживания

Чтобы остановить отслеживание диагностики, выполните следующие действия:

  1. Выберите Начните, выберите Выполнить, введите cmd, а затем нажмите кнопку ОК.
  2. В командной подсказке используйте cd команду для изменения каталога Инструментов.
  3. StopTracing.cmd Введите, а затем нажмите ВВОД.

Преобразование существующих трассировок в текстовый формат

Чтобы преобразовать существующие файлы трассировки в трассировку текста, сначала необходимо прекратить отслеживание с помощью StopTracing.cmd команды.

Информация в преобразованных трассировок имеет очень низкий уровень детализации (уровень отламки). Поэтому преобразованные следы требуют знания исходных кодов и отслеживаемого компонента. Мы рекомендуем выполнять преобразование трассировки только в том случае, если это требуется представителю CSS.

  1. Выберите Начните, выберите Выполнить, введите cmd, а затем нажмите кнопку ОК.
  2. В командной подсказке используйте cd команду для изменения каталога Инструментов.
  3. FormatTracing.cmd Введите, а затем нажмите ВВОД.

Просмотр преобразованных файлов трассировки

Файлы трассировки, преобразованные в текст с помощью пакетного файла, можно просмотреть с помощью текстового редактора, например FormatTracing.cmd Блокнот.

Отслеживание времени загрузки включено по умолчанию

При обычной установке сервера управления с началом службы HealthService начинаются три сеанса трассировки. По умолчанию делается только отслеживание ошибок. В файлы трассировки пишется мало сведений. Расположение и имена созданных файлов трассировки по умолчанию являются следующими:

Folder Имя файла Описание
windows\logs\OpsMgrTrace TracingGuidsBID.etl Трассировка выходных данных для управляемых компонентов кода
windows\logs\OpsMgrTrace TracingGuidsNative.etl Трассировка выходных данных для компонентов родного кода
windows\logs\OpsMgrTrace TracingGuidsUI.etl Трассировка вывода для пользовательского интерфейса управляемого кода (пользовательский интерфейс OpsMgr)

Каждый сеанс включен с круговой трассировой и имеет максимальный размер файла 100 мегабайт (МБ). Типичный размер файла .etl для недавно созданного .etl-файла — 16 килобайт (КБ).

Отключение отслеживания времени загрузки

При неправильном изменении реестра с использованием редактора реестра или другого способа могут случиться серьезные проблемы. Для решения этих проблем может потребоваться переустановка операционной системы. Компания Microsoft не может гарантировать, что эти проблемы могут быть решены. Вносите изменения в реестр на ваш страх и риск.

Три поставщика трассировки автоматически запущены на любой роли, содержаной службу HealthService. Файлы трассировки записаны в windows\logs\OpsMgrTrace папку. Как правило, файлы .etl в этой папке будут небольшими, особенно для роли Агента. Однако для роли сервера управления, если установка диспетчера операций становится неработоспособной, один или несколько из этих файлов потенциально могут вырасти до максимального настраиваемого размера в 100 МБ каждый. К этим файлам относятся следующие:

  • TracingGuidsBid.etl
  • TracingGuidsNative.etl
  • TracingGuidsUI.etl
  • предыдущие файлы .etl

Если из-за небольшого размера раздела загрузки отключать трассировку уровней отключать, можно добавить значение реестра на компьютер, на котором работает роль Сервера управления или роль Агента, на котором необходимо отключить трассировку. Для этого выполните указанные ниже действия.

Если отслеживание отключено, это может повлиять на устранение неполадок диспетчера операций в будущем, так как будет потеряна любая информация о низком уровне отслеживания. Будущие hotfixes, пакеты служб или обновления продуктов могут удалить запись реестра и включить отслеживание снова. По умолчанию этот ключ реестра не существует. Отслеживание по умолчанию включено, если удалить этот ключ реестра или изменить его значение до 0.

Выберите Начните, выберите Выполнить, введите regedit, а затем нажмите кнопку ОК.

Найдите и выделите следующий подраздел реестра:

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Operations Manager\3.0\

Создание подкайки с именем Tracing .

В области Details создайте значение REG_DWORD с именем DisableAutoTracing .

В поле Значение данных введите 1, а затем нажмите кнопку ОК.

Закройте редактор реестра.

При выполнении StopTracing.cmd пакетного файла из папки Tools трассировка диспетчера операций будет остановлена. Файлы .etl в папке могут быть удалены, если они больше не требуются для восстановления windows\logs\OpsMgrTrace дискового пространства.

Перемещение расположения вывода файлов трассировки по умолчанию

Если роль диспетчера операций или роль агента установлена на компьютере, где пространство раздела загрузки ограничено, может потребоваться переместить расположение файлов трассировки по умолчанию * (etl). Для этого выполните следующие действия:

Создайте новую папку на локальном диске с достаточной емкостью для дома файлов. Три файла трассировки по умолчанию не более 100 МБ каждый и три ранее используемых файла трассировки не более 100 МБ каждый равно общей потенциальной емкости файлов трассировки в 600 МБ.

Установите в папке по крайней мере следующие разрешения NT File System (NTFS), SYSTEM = Полный контроль, Администраторы = Полный контроль.

Найдите и откройте пакетный файл StartTracing.cmd в папке установки Tools. Используйте текстовый редактор, например Блокнот.

В пакетный файл StartTracing.cmd найдите SET OpsMgrTracePath заявление. Замените значение по умолчанию путем нового расположения. Делимит путь со знаками речи (), если путь содержит символ пространства.

Сохраните изменения в файле StartTracing.cmd.

Чтобы начать отслеживание в новой папке, запустите StopTracing.cmd пакетный файл. Затем запустите StartTracing.cmd пакетный файл. После запуска пакетного файла в новую папку будут записаны следующие StartTracing.cmd файлы:

  • TracingGuidsBid.etl
  • TracingGuidsNative.etl
  • TracingGuidsUI.etl

Прежде чем использовать команду для преобразования следов в текст, необходимо изменить команду, чтобы изменить переменную, чтобы указать на новую папку FormatTracing.cmd FormatTracing.cmd файлов OpsMgrTracePath трассировки.

Будущие hotfixes, пакеты служб или обновления продуктов могут изменить файлы в папке Tools. Это возвращает функциональные возможности на функциональные возможности по умолчанию. После обновления рекомендуется проверять дополнительные изменения.

Просмотр отслеживания в режиме реального времени

Рекомендуется не использовать пакетный файл для просмотра следов в режиме реального времени в производственной среде без консультаций ViewRealTimeTracing.cmd с Microsoft CSS. Просмотр следов в режиме реального времени, особенно при использовании параметров уровня трассировки информации или параметров уровня трассировки, может серьезно повлиять на производительность сервера.

При первом выполнении файла файлы трассировки, необходимые для преобразования следов, извлекаются в папку ViewRealTimeTracing.cmd SystemDrive\Program Files\System Center Operations Manager\Tools\TMF. Пакетный файл затем передает каждый файл определения трассировки ViewRealTimeTracing.cmd сеанса (Tools\TracingGuids*.txt) в папке Tools. Затем в окне Командная подсказка TraceFmtSM начинается отдельный экземпляр. Вывод сеансов трассировки для управляемых, родных и управляемых пользовательским интерфейсом трассировки выводит каждое окно.

Пакетный ViewRealTimeTracing.cmd файл принимает один необязательный параметр командной строки ( -ods ). Поставка этого параметра дополнительно выводит данные трассировки для отладки.

Ссылки

Дополнительные сведения о отслеживании диагностики перейдите в Microsoft Docs. Затем поиск отслеживания событий для Windows .

Где расположен нужный файл трассировки и как его найти?

SQL-Plus: Release 8.1.5.0.0 - Production on Fri 10 21:19:41 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to:

0racle8i Enterprise Edition Release 8.1.5.0.0 - Production With the Partitioning and Java options PL/SQL Release 8.1.5.0.0 - Production SQL> select Value

where Name = ' user_dump_desf /* Determine the destination of USER_DUMP_DEST */;

/* Determine the processes within your current shell. This is to determine the process ID of your SQL*Plus session */

1327 pts/2 0:00 ksh $ps -ef | grep 1279 /* Now scan all processes on the system and filter out the ones with your SQL*Plus's process ID. This is to determine the process ID of the server process that this SOL*Plus session is attached to */

oracle 1280 1279 0 21:41:00 ? 0:12 oracleprod815 (DESCRIPTION=aOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

$cd /u01/app/oracle/admin/prod815/udump /* Change directory to the USER_DUMP_DESTdirectory*/

-rw-ree 1 oracle dba 408548 Nov 10 21:04 prod815_ora_1280.trc

tkprof,

tkprof,

[print= ] [insert= ] [sys= ] [sort= ] table=schema.tablename Use 'schema.tablename' with 'explain^ option.

explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.

print=integer List only the first 'integer' SQL statements. aggregate=yes|no

List SQL statements and data inside INSERT statements.

record=filename Record non-recursive statements found in the trace file,

sort=option Set of zero or more of the following sort options: prscnt number of times parse was called prscpu cpu time parsing

prsqry number of buffers for consistent read during parse

prscu number of buffers for current read during parse prsmis number of misses in library cache during parse execnt number of execute was called

execpu cpu time spent executing exeela elapsed time executing exedsk number of disk reads during execute

execu number of buffers for current read during execute exerow number of rows processed during execute exemis number of library cache misses during execute fchcnt number of times fetch was called fchcpu cpu time spent fetching fchela elapsed time fetching fchdsk number of disk reads during fetch fchqry number of buffers for consistent read during fetch fchcu number of buffers for current read during fetch fchrow number of rows fetched userid userid of user that parsed the cursor

fchela-

tkprof,

Представь ситуацию: ты поставил новую классную прогу, а она не запускается или безбожно тормозит. Или сетевой сервис падает при непонятных обстоятельствах. Досадно! Ситуация усугубляется тем, что ни в консольном выводе, ни в логах ничего интересного нет. Но и в этом случае можно предпринять ряд действий, которые, если и не помогут устранить проблему в запуске, то хотя бы позволят составить правильный баг-репорт.

Знакомство

  • если приложение отказывается работать из-за проблем с правами;
  • если приложение не запускается из-за отсутствия какого-нибудь нужного файла;
  • в некоторых случаях с помощью strace быстрее, чем с помощью tcpdump, можно обнаружить проблемы с сетевыми прогами;
  • при проблемах с физическим или псевдоустройством (типа /dev/random или /dev/ audit) strace покажет последний незавершенный вызов;
  • если надо отследить все файлы, к которым обращается приложение в процессе работы. Это может быть полезным, например, для составления профиля AppArmor или переноса приложения в среду chroot. В простейшем случае вызов strace выглядит следующим образом:

По умолчанию весь вывод strace отправляет в stderr, что далеко не всегда удобно. Попросить strace писать вывод в файл можно с помощью опции '-o':

$ strace -o uname.strace uname

Первый системный вызов — execve: запуск файла на выполнение. В скобках передается команда с аргументами (если они есть) и количество переменных окружения, переданных процессу. По умолчанию strace не показы вает сами переменные окружения, но его можно попросить выводить более подробную информацию с помощью опции '-v'. Вызов возвратил 0 — значит все ok. В противном случае значение было бы -1.

Следующий интересный системный вызов — access: проверка прав пользователя на файл. В данном случае тестируется существование файла (о чем говорит режим проверки F_OK). На третьей строчке системный вызов вернул значение -1 (ошибка) и вывел ошибку ENOENT (No such file or directory). Это нормально, так как этот файл всего лишь служит для указания линковщику на использование стандартных неоптимизированных версий библиотек.

Как правило, с помощью вызова access проверяются только права на файл или существование самого файла, без каких-либо последующих манипуляций над файлом. Манипуляции над файлом всегда начинаются с системного вызова open, открывающего файл в одном из режимов (O_RDONLY, O_WRONLY или O_RDWR).

Вызов возвращает небольшое целое число — файловый дескриптор, который впоследствии будет использоваться другими вызовами (до того момента, пока не будет закрыт с помощью вызова close).

После открытия файла вызовом open происходит его чтение вызовом read или запись вызовом write. Оба вызова принимают файловый дескриптор, а возвращают количество прочитанных/записанных байт.

Вызов fstat предназначен для получения информации о файле (номер inode, uid, gid и т.д.)

Самый главный вызов в листинге выше — uname, который позволяет получить информацию о текущем ядре. Если трассировка uname занимает всего сотню строк, то трассировка серьезного приложения легко может занимать несколько тысяч строк. Читать такой лог — не самое большое удовольствие. Поэтому иногда лучше записывать в лог только определенные вызовы. Например, чтобы отследить все вызовы open и access (а на них следует обращать внимание в первую очередь при проблемах с запуском приложения):

$ strace -e trace=open,access \
-o strace.log uname

Вместо перечисления всех нужных вызовов можно использовать классы, состоящие только из специализированных вызовов: file, process, network, signal или ipc. Также можно писать в лог все вызовы, кроме одного.
Например, чтобы исключить вызов mmap:

$ strace -e trace=\!mmap -o strace.log uname

К сожалению, исключить из вывода сразу несколько вызовов не получится. Некоторые приложения в процессе работы любят наплодить большое количество дочерних процессов. По умолчанию strace игнорирует дочерние процессы, но это поведение можно изменить с помощью опции '-f'.

Если вывод strace пишется в лог, то удобно использовать опцию '-ff', которая заставляет strace писать трассировку каждого процесса в отдельный лог вида filename.PID.
Еще одна весьма полезная возможность strace: с помощью опции '-p' и указания PID можно проводить трассировку работающего процесса. Можно даже соединиться сразу с несколькими процессами, указав опцию '-p' несколько раз. Вот такая конструкция запустит трассировку всех процессов apache:

Чтобы показать всю мощь strace, опишу несколько случаев из моей практики, в которых без помощи этой удивительной утилиты на поиск и устранение проблемы я потратил бы кучу времени.

Проблемы с правами

Давным-давно, когда апач еще был версии 1.3, а PHP — 4, переехал я на новый сервак. И практически сразу вылезла одна проблема — из PHP с помощью обычной функции mail не отправлялись письма. Заглянул в логи индейца — пусто, в логах сендмыла и системных логах — тоже ничего интересного. С точно такими же конфигами apache, PHP и sendmail на другом сервере все работало, значит, причина не в них. Пора расчехлять strace. Остановил апач и запустил трассировку:

После того, как скрипт отправки почты (с нехитрым названием mail.php) был несколько раз запущен из браузера, а apache остановлен, можно приступать к анализу лога.

Здесь в каждой строчке первое поле — PID, второе — вызов с параметрами, третье — значение, которое вернул вызов. В большинстве случаев, если возвращаемое значение не отрицательное — вызов отработал без ошибки. То есть, grep по mail.php не дал ничего интересного, кроме PID-процесса (5345), который его обрабатывал. Что ж, запустим grep по PID:

Опять ничего интересного по поводу ошибки. Но на последней строчке с помощью системного вызова clone создается дочерний процесс с PID 5347. Ух ты, квест! 🙂 Grep по 5347:

$ grep 5347 /tmp/apache2.strace
5345 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f3bf2eada10) = 5347

5347 execve("/bin/sh", ["sh", "-c", "/usr/sbin/sendmail -t -i "], [/* 6 vars */] = -1 EACCES
(Permission denied)

Бинго! Для отправки почты используется /usr/sbin/sendmail, а вызов ругается на отсутствие прав. Причем права на sendmail выставлены корректно, а вот на /bin/sh — нет. Каким-то образом оказалось, что права на /bin/sh были 770 (при владельце и группе root), то есть пользователь www-data (от которого работал apache) не имел прав на выполнение. Корректировка прав исправила это недоразумение.

Проблемы с сетью

Иногда strace позволяет решать сетевые проблемы гораздо быстрее, чем tcpdump. В частности, с помощью strace очень удобно отслеживать, к каким сервисам и в каком порядке обращается приложение для определения имен.

Однажды я сменил IP для одного домена, но, несмотря на то, что dig выдавал мне правильный новый IP, firefox все еще ломился на старый. Трассируем:

Вызов connect из листинга показывает, что Firefox сначала обращается к сервису NSCD (кэширующий демон) для разрешения имен, а только потом, если NSCD ничего не выдаст — к DNS. На ноутбуке NSCD только мешается, поэтому я его смело удалил, после чего огнелис нашел правильный айпишник.

Проблемы с псевдоустройствами

Бывает, что какое-то приложение просто виснет, не выдавая никаких ошибок и завершаясь только по kill. Или работает, но тормозит на, казалось бы, простейшей операции. Приведу пример: есть старенький Debian Etch, на нем squid из репозитория с простой NCSA аутентификацией и SAMS для удобного управления. После создания пользователя через SAMS при релоаде squid долго тормозит на операциях добавления пользователей.

На последнем вызове система задумывается больше, чем на минуту. Значит, проблема в /dev/random. SAMS применяет его для создания хешей паролей пользователей. Самое простое решение — использовать /dev/urandom, который гораздо быстрее, чем /dev/random.

Сажаем nginx в песочницу

Безопасности много не бывает, поэтому никакая дополнительная ступень защиты лишней не будет. Достаточно популярный и простой в реализации механизм минимизации урона от взлома — запуск приложения в chroot. Процесс переноса приложения в песочницу не сложен, если воспользоваться strace и еще одной полезной утилитой — ldd (показывает список совместно используемых библиотек ELFфайла). Покажу на примере, как запускать в chroot популярный на просторах рунета веб-сервер nginx.

Предположим, что nginx (последней на момент написания статьи версии 0.8.40) уже собран с параметрами по умолчанию и лежит в /usr/local. Список библиотек, которые нужны ему для работы:

Переносим эти библиотеки в заранее созданное chroot-окружение (например, /chroot/nginx). Дальше, чтобы удостовериться в том, что у нас есть все необходимые библиотеки, нужно с помощью ldd посмотреть также зависимости скопированных библиотек. Кроме библиотек nginx'у нужны еще некоторые конфиги и логи. Получим список необходимых файлов:

Скопируем недостающие файлы, удаляя при этом из конфигов ненужную информацию (например, лишних пользователей из /etc/ passwd).

Создадим в chroot-окружении /dev/null, необходимый для нормального функционирования nginx'а:

Вот и все. Теперь запускать nginx в chroot можно следующим образом:

Заключение

Для применения strace есть некоторые ограничения. Во-первых, понятно, что не следует использовать этот инструмент в рабочем окружении (трассировка apache на высоконагруженном productionсервере будет большой ошибкой) — производительность приложения в режиме трассировки сильно снижается. Второе ограничение — это возможные проблемы с трассировкой 32-битных приложений на 64-битной системе. И, наконец, третье — некоторые проги падают при выполнении трассировки вследствие наличия либо багов, либо защиты от трассировок (в основном это касается, конечно, проприетарного софта).

Несмотря на широкие возможности, strace — не «серебряная пуля», он не сможет помочь найти причину абсолютно всех проблем. Однако это очень хороший инструмент, который обязательно нужно попробовать, прежде чем браться за gdb.

Немного истории

Статистика библиотечных вызовов OpenOffice Strace (сокращение от system trace) — это свободное ПО, распространяемое под BSD-подобной лицензией. Утилита была написана в 1991 году Полом Краненбургом для SunOS как аналог утилиты trace. На Linux ее портировал Бранко Ланкестер, который также реализовал поддержку в ядре. В 1992 году вышла версия 2.5 для SunOS, но версия для Linux все еще базировалась на версии 1.5. В 1993 году Рик Слэдки объединил strace 2.5 для SunOS и второй релиз strace для Linux, добавив при этом много возможностей от truss из SVR4. В результате появилась strace, которая работала и на Linux, и на SunOS. В 1994 Рик портировал strace на SVR4 и Solaris, а в 1995 — на Irix. Сегодня strace поддерживается большим количеством людей, в списке разработчиков даже успел отметиться сам Линус. Последняя на момент написания статьи версия — 4.5.20 от 14 апреля 2010 года. strace сейчас достаточно активно развивается, в основном добавляется поддержка и фиксятся баги при работе на всяких экзотичных архитектурах.

Инструменты, подобные strace

DTrace — продукт Sun Microsystems, работает на Solaris, FreeBSD и Mac OS X (10.5 и старше). Есть тестовая версия порта для Linux. ktrace — работает на FreeBSD, OpenBSD, NetBSD и Mac OS X (до версии 10.5).

Inotify-tools

Кроме Incron есть еще полезная штука, использующая inotify — inotify-tools, включающая в себя inotifywait и inotifywatch, которые очень удобно использовать в скриптах. Inotifywait просто ждет указанных событий над указанными файлами и завершается с тем или иным кодом возврата. Немного модифицированный скрипт из man'а, хорошо иллюстрирующий предназначение inotifywait:

/script.sh
while inotifywait -e modify \
/var/log/apache2/error.log;
do
tail -1 /var/log/apache2/error.log | \
notify-send "Apache needs love!"
done

Inotifywatch просто собирает статистику по обращению к определенному файлу/каталогу в течение определенного времени или до прерывания и отображает ее в виде таблицы. Есть возможность сбора статистики только по определенным событиям, задания исключения файлов по маске и чтения списка объектов для мониторинга из файла.

Inotify: мониторинг событий

С помощью strace можно отследить, к каким файлам обращалось конкретное приложение. Но иногда возникает обратная задача — отследить обращения к определенному файлу и выполнить какието действия при этих обращениях. Тогда на помощь придет механизм inotify. Inotify — подсистема ядра, позволяющая отслеживать файловые операции. Технология проверена временем — она была включена еще в ядро 2.6.13 (июнь 2005). Inotify активно используется, например, десктопными поисковиками (вроде Beagle), а также такой полезной штукой, как incron.

Incron — аналог обычного cron с той лишь разницей, что выполнение команды происходит не по времени, а по наступлению указанного в задании события. После установки (incron есть в репозиториях большинства дистрибутивов) создается пустой файл /etc/incron.allow, в котором надо перечислить пользователей, которым разрешено использовать incron.
Создаются задания с помощью команды:

<путь> <событие> <команда> (с разделением через пробел)

Самые интересные события

  • IN_ACCESS — файл был прочитан
  • IN_ATTRIB — изменились метаданные файла/каталога
  • IN_MODIFY — файл был изменен
  • IN_CREATE — файл или каталог был создан в отслеживаемой директории
  • IN_DELETE — файл или каталог был удален в отслеживаемой директории
  • IN_DELETE_SELF — отслеживаемый файл или каталог был удален
  • IN_MOVE — файл был перемещен из отслеживаемого каталога или в него
  • IN_ALL_EVENTS — все события

В описании команды можно использовать внутренние переменные. Самые полезные:

Читайте также: