Utmp linux что это

Обновлено: 28.06.2024

ВНИМАНИЕ: utmp не должен быть записываемым, так как многие системные программы (что очень глупо) зависят от его целостности. Вы рискуете спутать системные файлы статистики и внести изменения в системные файлы, если предоставите любому пользователю возможность написать файл utmp .

Этот файл представляет собой последовательность элементов со следующей структурой (заметим, что в данном случае указано только одно из нескольких определений; детали зависят от версии libc): Эта структура дает имя специальному файлу, связанному с терминалом пользователя, именем входа пользователя и временем входа, обозначенным как time (2). Поля строк заканчиваются '\0' , если они короче, чем размер целого поля.

Первые элементы, когда-либо созданные, заставят init (8) запустить inittab (5). Хотя перед тем, как элемент обрабатывается, init (8) очищает utmp, устанавливая ut_type равным DEAD_PROCESS и заполняя ut_user , ut_host и ut_time нулевыми байтами в записях, в которых ut_type не является DEAD_PROCESS или RUN_LVL , и где нет существующих процессов с PID, равным ut_pid . Если не найдено ни одной пустой записи с нужным ut_id , то init создает новый. Устанавливаемые значения ut_id из inittab, ut_pid и ut_time равны текущим значениям, и ut_type равно INIT_PROCESS .

getty (8) находит элементы по их идентификатору pid, меняет ut_type на LOGIN_PROCESS , меняет ut_time , устанавливает ut_line и ожидает установки соединения. login (8) после того, как пользователь был идентифицирован, меняет ut_type на USER_PROCESS , меняет ut_time и устанавливает ut_host и ut_addr . В зависимости от getty (8) и login (8), записи могут быть расположены согласно ut_line вместо предпочитаемого расположения согласно ut_pid .

Когда init (8) находит, что процесс завершился, он определяет, осуществлен ли вход процесса в utmp по ut_pid ; меняет ut_type на DEAD_PROCESS и заполняет ut_user , ut_host и ut_time нулевыми байтами.

xterm (1) и другие эмуляторы терминала непосредственно создают запись USER_PROCESS и генерируют ut_id , используя последние две буквы /dev/ttyp %c или используя p %d для /dev/pts/ %d . Если они обнаруживают флаг DEAD_PROCESS для этого идентификатора, то они удаляют его или создают новый элемент. Если допускается, то они пометят его как DEAD_PROCESS при выходе; предполагается, что они также обнуляют ut_line , ut_time , ut_user и ut_host .

xdm (8) не должно создавать записи в utmp, так как нет назначенного ему терминала. Если позволить ему создавать их, то это приведет примерно к такому результату: `finger: can not stat /dev/machine.dom'. Данный аргумент должен создавать элементы в wtmp, так, как это делает ftpd (8).

telnetd (8) устанавливает элемент LOGIN_PROCESS и оставляет остальное, как это обычно бывает, аргументу для login (8). После того, как закончится telnet-сессия, telnetd (8) очищает utmp вышеописанным путем.

Файл wtmp записывает все входы и выходы в систему. Его формат в точности похож на формат utmp (за исключением того, что "пустое" имя пользователя означает выход из системы через связанный терминал). Кроме того, название терминала "

" с именем пользователя "shutdown" или "reboot" означает отключение системы или ее перезагрузку, а пара названий терминала "|" / ">" означает старое/новое системное время в случае, когда date (1) меняет их. wtmp поддерживается login (1), init (1) и некоторыми версиями getty (1). Ни одна из этих программ не создает файл, поэтому если он удален, то ведение записей заканчивается.

ФАЙЛЫ

СООТВЕТСТВИЕ СТАНДАРТАМ

Элементы Linux utmp не соответствуют ни v7/BSD, ни SYSV: они являются комбинацией их обеих. v7/BSD имеет меньшее количество полей; важнее всего то, что в нем нет ut_type , который заставляет v7/BSD-совместимые программы выводить, к примеру, записи "зависания" системы или входа в нее. Также в этой версии отсутствует конфигурационный файл, который определяет места сессий. Все это делается в BSD из-за отстутствия поля ut_id . В Linux (как и в SYSV) поле ut_id записи никогда не меняется после того, как один раз установлено, что оно резервирует для себя место в конфигурационном файле без необходимости. Очищение ut_id может привести к повреждению элементов utmp и нарушению безопасности системы. Заполнение вышеупомянутых полей нулевыми байтами не требуется согласно семантике SYSV, но позволяет запускать многие программы, которые понимают семантику BSD и которые не изменяют utmp. Linux использует преобразования BSD для работы с содержимым строк, как описано выше.

Заметим, что структура utmp, описанная в libc5, изменилась в libc6. Из-за этого бинарные файлы, использующие старую структуру версии libc5, будут повреждать /var/run/utmp и/или /var/log/wtmp . Система Debian включает в себя исправленные libc5, которые используют новый формат utmp. Но проблема с wtmp все еще существует, так как обращения к нему идут непосредственно из libc5.

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

Файл состоит из списка записей с типом структуры utmp, объявленной в <utmp.h> (заметим, что в данном случае указано только один из вариантов; детали зависят от версии libc):

Эта структура дает имя специальному файлу, связанному с терминалом пользователя, именем входа пользователя и временем входа в виде как у time(2). Поля строк заканчиваются байтом null ('\'), если они короче, чем размер поля.

Самые первые записи создаются init(1) после обработки inittab(5). Хотя перед тем, как элемент обрабатывается, init(1) очищает utmp, устанавливая ut_type равным DEAD_PROCESS, заполняя ut_user, ut_host и ut_time нулевыми байтами в записях, в которых ut_type не равен DEAD_PROCESS или RUN_LVL и для которых не существует процессов с PID, равным ut_pid. Если не найдено ни одной пустой записи с нужным ut_id, то init(1) создает новую. Он устанавливает значение ut_id из inittab, ut_pid и ut_time из текущих значений и ut_type в INIT_PROCESS.

mingetty(8) (или agetty(8)) находит элементы по их идентификатору PID, меняет ut_type на LOGIN_PROCESS, изменяет ut_time, устанавливает ut_line и ожидает установки соединения.login(1), после того как пользователь был идентифицирован, меняет ut_type на USER_PROCESS, изменяет ut_time и устанавливает ut_host и ut_addr. В зависимости от mingetty(8) (или agetty(8)) и login(1), записи могут быть расположены в соответствии с ut_line, вместо более предпочитаемого ut_pid.

Когда init(1) обнаруживает, что процесс завершился, он находит его запись в utmp по ut_pid, устанавливает ut_type в DEAD_PROCESS, и затирает ut_user, ut_host и ut_time нулями.

xterm(1) и другие эмуляторы терминалов самостоятельно создают запись USER_PROCESS и генерируют ut_id, используя последние две буквы имени из имени терминала (символы после /dev/[pt]ty). Если они обнаруживают DEAD_PROCESS для этого ID, то они удаляют его или создают новый элемент. Если возможно, они пометят его как DEAD_PROCESS при выходе; предполагается, что они также обнуляют ut_line, ut_time, ut_user и ut_host.

telnetd(8) устанавливает элемент LOGIN_PROCESS и оставляет остальное, как обычно, аргументу для login(1). После завершения сеанса telnet, telnetd(8) очищает utmp вышеописанным путем.

В файл wtmp записываются все входы и выходы в систему. Его формат в точности похож на формат utmp, за исключением того, что пустое имя пользователя означает выход из системы через связанный терминал. Кроме того, название терминала

с именем пользователя shutdown или reboot означает выключение системы или её перезагрузку, а пара названий терминала |/> означает старое/новое системное время в случае, когда date(1) меняет их. В wtmp пишут login(1), init(1) и некоторые версии getty(8) (например, mingetty(8) или agetty(8)). Ни одна из этих программ не создает файл, поэтому если он удалён, то ведение записей заканчивается.

ФАЙЛЫ

СООТВЕТСТВИЕ СТАНДАРТАМ

В POSIX.1 структура utmp не определена, но есть похожая с именем utmpx и полями ut_type, ut_pid, ut_line, ut_id, ut_user и ut_tv. В POSIX.1 не указан размер полей ut_line и ut_user.

В Linux структура utmpx совпадает со структурой utmp.

Сравнение со старыми системами

В Linux записи utmp не следуют форматам ни v7/BSD ни System V; они содержат поля из обоих форматов.

v7/BSD имеет меньшее количество полей; важнее всего то, что в нём нет ut_type, который заставляет v7/BSD-совместимые программы выводить, к примеру, отработавшие записи или записи о входе систему. Также в этой версии отсутствует файл настройки, который определяет места для сеансов. Всё это делается в BSD из-за отсутствия поля ut_id.

В Linux (как в System V) поле ut_id записи никогда не меняется после того, как один раз установлено, что позволяет резервировать место без необходимости в файле настройки. Очищение ut_id может привести к соперничеству, приводящему к повреждению элементов utmp и нарушению безопасности системы. Очистка вышеупомянутых полей нулями не требуется согласно семантике System V, но позволяет запускать многие программы, которые используют семантику BSD и которые не изменяют utmp. Linux использует соглашение BSD при работе с содержимым строк, как описано ранее.

В System V нет полей ut_host и ut_addr_v6.

ЗАМЕЧАНИЯ

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

Заметим, что на двуархитектурных платформах, то есть системах, которые позволяют запускать сразу 32- и 64-битные приложения (x86-64, ppc64, s390x и т.д.), поле ut_tv имеет одинаковый размер в 32- и 64-битном режиме. Это же относится к ut_session и ut_time, если они есть. Это позволяет использовать файлы данных и память одновременно и в 32- и в 64-битных приложениях. Данная возможность достигается сменой типа ut_session на int32_t и ut_tv на структуру с двумя полями int32_t --- tv_sec и tv_usec. Так как ut_tv не может быть одинакова с struct timeval, то вместо вызова:

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

Файл состоит из списка записей с типом структуры utmp, объявленной в <utmp.h> (заметим, что в данном случае указано только один из вариантов; детали зависят от версии libc):

Эта структура дает имя специальному файлу, связанному с терминалом пользователя, именем входа пользователя и временем входа в виде как у time(2). Поля строк заканчиваются байтом null ('\'), если они короче, чем размер поля.

Самые первые записи создаются init(1) после обработки inittab(5). Хотя перед тем, как элемент обрабатывается, init(1) очищает utmp, устанавливая ut_type равным DEAD_PROCESS, заполняя ut_user, ut_host и ut_time нулевыми байтами в записях, в которых ut_type не равен DEAD_PROCESS или RUN_LVL и для которых не существует процессов с PID, равным ut_pid. Если не найдено ни одной пустой записи с нужным ut_id, то init(1) создает новую. Он устанавливает значение ut_id из inittab, ut_pid и ut_time из текущих значений и ut_type в INIT_PROCESS.

mingetty(8) (или agetty(8)) находит элементы по их идентификатору PID, меняет ut_type на LOGIN_PROCESS, изменяет ut_time, устанавливает ut_line и ожидает установки соединения.login(1), после того как пользователь был идентифицирован, меняет ut_type на USER_PROCESS, изменяет ut_time и устанавливает ut_host и ut_addr. В зависимости от mingetty(8) (или agetty(8)) и login(1), записи могут быть расположены в соответствии с ut_line, вместо более предпочитаемого ut_pid.

Когда init(1) обнаруживает, что процесс завершился, он находит его запись в utmp по ut_pid, устанавливает ut_type в DEAD_PROCESS, и затирает ut_user, ut_host и ut_time нулями.

xterm(1) и другие эмуляторы терминалов самостоятельно создают запись USER_PROCESS и генерируют ut_id, используя последние две буквы имени из имени терминала (символы после /dev/[pt]ty). Если они обнаруживают DEAD_PROCESS для этого ID, то они удаляют его или создают новый элемент. Если возможно, они пометят его как DEAD_PROCESS при выходе; предполагается, что они также обнуляют ut_line, ut_time, ut_user и ut_host.

telnetd(8) устанавливает элемент LOGIN_PROCESS и оставляет остальное, как обычно, аргументу для login(1). После завершения сеанса telnet, telnetd(8) очищает utmp вышеописанным путем.

В файл wtmp записываются все входы и выходы в систему. Его формат в точности похож на формат utmp, за исключением того, что пустое имя пользователя означает выход из системы через связанный терминал. Кроме того, название терминала

с именем пользователя shutdown или reboot означает выключение системы или её перезагрузку, а пара названий терминала |/> означает старое/новое системное время в случае, когда date(1) меняет их. В wtmp пишут login(1), init(1) и некоторые версии getty(8) (например, mingetty(8) или agetty(8)). Ни одна из этих программ не создает файл, поэтому если он удалён, то ведение записей заканчивается.

ФАЙЛЫ

СООТВЕТСТВИЕ СТАНДАРТАМ

В POSIX.1 структура utmp не определена, но есть похожая с именем utmpx и полями ut_type, ut_pid, ut_line, ut_id, ut_user и ut_tv. В POSIX.1 не указан размер полей ut_line и ut_user.

В Linux структура utmpx совпадает со структурой utmp.

Сравнение со старыми системами

В Linux записи utmp не следуют форматам ни v7/BSD ни System V; они содержат поля из обоих форматов.

v7/BSD имеет меньшее количество полей; важнее всего то, что в нём нет ut_type, который заставляет v7/BSD-совместимые программы выводить, к примеру, отработавшие записи или записи о входе систему. Также в этой версии отсутствует файл настройки, который определяет места для сеансов. Всё это делается в BSD из-за отсутствия поля ut_id.

В Linux (как в System V) поле ut_id записи никогда не меняется после того, как один раз установлено, что позволяет резервировать место без необходимости в файле настройки. Очищение ut_id может привести к соперничеству, приводящему к повреждению элементов utmp и нарушению безопасности системы. Очистка вышеупомянутых полей нулями не требуется согласно семантике System V, но позволяет запускать многие программы, которые используют семантику BSD и которые не изменяют utmp. Linux использует соглашение BSD при работе с содержимым строк, как описано ранее.

В System V нет полей ut_host и ut_addr_v6.

ЗАМЕЧАНИЯ

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

Заметим, что на двуархитектурных платформах, то есть системах, которые позволяют запускать сразу 32- и 64-битные приложения (x86-64, ppc64, s390x и т.д.), поле ut_tv имеет одинаковый размер в 32- и 64-битном режиме. Это же относится к ut_session и ut_time, если они есть. Это позволяет использовать файлы данных и память одновременно и в 32- и в 64-битных приложениях. Данная возможность достигается сменой типа ut_session на int32_t и ut_tv на структуру с двумя полями int32_t --- tv_sec и tv_usec. Так как ut_tv не может быть одинакова с struct timeval, то вместо вызова:


Обзоры В этой статье мы рассмотрим 20 команд мониторинга Linux, которые вы должны знать как системный администратор / системный администратор Linux / DevOps / SRE.

Вступление

Если вы работаете системным администратором / администратором Linux / DevOps / SRE, то, скорее всего, вам придется решать проблемы, связанные с производительностью, в среде Linux. Давайте рассмотрим некоторые из наиболее часто используемых утилит командной строки Linux для диагностики проблем, связанных с сетью и производительностью.

1. Top

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


2. vmstat

vmstat не должен присутствовать в вашей системе Linux, но не беспокойтесь.

Мы можем легко установить пакет «sysstat»


3. iostat

Команда iostat на Linux позволяет отслеживать статистику использования ЦП и ввода-вывода ( I/O) для всех дисков и файловых систем.

Команды iostat полезны для изменения конфигурации системы, чтобы лучше сбалансировать нагрузку ввода-вывода между физическими дисками.

Эта команда в основном используется системными администраторами Linux.


4. iostat -d

Команда iostat -d используется для мониторинга загрузки устройств ввода / вывода системы, отслеживая время активности устройств в зависимости от их средней скорости передачи данных.

Команда iostat -d используется для отображения отчетов об использовании устройств.


5. lsof

Открытый файл не означает pdf или текстовый файл, он включает файлы на диске или каналы, используемые процессами в фоновом режиме.


Вывод:3

6. tcpdump

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

tcpdump позволяет прослушивать весь входящий и исходящий трафик со всех интерфейсов.

Что еще более важно, он может фильтровать трафик по интерфейсу, хосту, месту назначения или хосту-источнику, типу трафика и многим другим критериям.

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

8. netstat -s

Команда netstat -s вывеодит сетевую статистику, такую как общее количество полученных и переданных пакетов по типу протокола и так далее.

Чтобы вывести статистику только избранных протоколов, таких как TCP или UDP, используйте соответствующие параметры, такие как t и u, вместе с параметром s.


9. ps -ef | grep PID

Команда ps выводит четыре столбца информации для двух минимальных процессов, запущенных в текущей оболочке.

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