Россия, Москва, Московский Государственный Открытый Университет, 2007 |
Системные средства с открытым программным кодом: основы
who, w и last
В предыдущем разделе мы говорили о том, как программа rwho позволяет вам увидеть пользователей на удаленной Unix-машине. Если вы находитесь на Unix-машине, вы можете использовать команду who, w и last, чтобы получить много информации о пользователях, в настоящее время работающих в системе или работавших в ней с момента вашего последнего входа в систему ( last также обсуждается в лекции ""Создание и использование комплекта инструментов "живого ответа" для Unix"" ). Серьезные взломщики могут осторожно изучать поведение пользователя, входя в систему под видом обычного пользователя и избегая моментов, когда в систему входит пользователь root.
Эти три средства - стандартные для Unix-систем и полезны как системным администраторам, так и взломщикам, чтобы следить за поведением пользователя. Поскольку все эти команды могут выполняться только локально, вы можете предпочесть ограничить доступ к ним только пользователям с полномочиями root.
who
Просто набрав who в командной строке Unix-системы можно получить список имен пользователей, используемых терминалов и даты входа в систему для всех активных в настоящий момент пользователей. Вы можете попытаться использовать другие параметры командной строки для форматирования вывода различным образом.
jjohnson@host:~% who gstuart pts/0 Feb 26 01:33 wave pts/1 Feb 24 09:21 schuster pts/0 Feb 25 15:23 jjohnson pts/2 Feb 26 00:37 jjohnson@host:~% who -H USER LINE LOGIN-TIME FROM gstuart pts/0 Feb 26 01:33 wave pts/1 Feb 24 09:21 schuster pts/0 Feb 25 15:23 jjohnson pts/2 Feb 26 00:37 jjohnson@host:~% who -H -i USER LINE LOGIN-TIME IDLE FROM gstuart pts/0 Feb 26 01:33 wave pts/1 Feb 24 09:21 09:46 schuster pts/0 Feb 25 15:23 jjohnson pts/2 Feb 26 00:37 jjohnson@host:~% who -H -i -l USER LINE LOGIN-TIME IDLE FROM gstuart pts/0 Feb 26 01:35 (192.168.1.10) wave pts/1 Feb 24 09:21 09:48 (10.10.4.3) schuster pts/0 Feb 25 15:23 (10.10.4.15) jjohnson pts/2 Feb 26 00:37 (192.168.1.100) jjohnson@host:~% who -q gstuart wave schuster jjohnson # users=4 johnson@host:~% who -m host!jjohnson pts/2 Feb 26 00:372.9.
Вот что мы видим: -H выводит список заголовков для каждой колонки, -i добавляет время задержки, -l хост, с которого осуществлен вход, -q подсчитывает только число пользователей, и -m сообщает нам информацию о пользователях, которые в настоящее время используют стандартный ввод (это вы!). Вы можете отслеживать всех активных пользователей с помощью команды who.
w
Как насчет того, чтобы узнать, что делает каждый пользователь в настоящий момент? Команда w сообщит вам, что пользователь запускает сейчас из командной строки, равно как и статистику об использовании системы.
jjohnson@host:~% w 1:45am up 3 days, 12:03, 4 users, load average: 1.55, 2.23, 2.35 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT gstuart pts/0 192.168.1.10 1:44am 55.00s 0.04s 0.04s ./nc -l -p 1812 -s 1 wave pts/1 10.10.4.3 Sun 9am 9:57m 0.14s 0.11s -bash schuster pts/1 10.10.4.15 Mon 3pm 9:57m 0.14s 0.11s pine jjohnson pts/2 192.168.1.100 12:37am 1.00s 0.35s 0.08s w2.10.
last
А что можно сказать относительно пользователей, которые ранее зарегистрировались в системе, и более не проявляли своей активности? Вы когда-нибудь регистрировались в Unix-системе и получали сообщение о времени своего последнего входа в систему? Если вы запросите информацию с помощью finger о пользователях, которые в настоящее время не зарегистрированы в системе, демон всего лишь сообщит вам дату и время последнего входа в систему этих пользователей. Каким образом система хранит эту информацию?
В системе используется база данных для хранения записей о регистрации в системе в двоичном виде. Эти записи сохраняются в двух структурах: utmp и wtmp. Подробная структура записей utmp и wtmp достаточно сложна, но команда last позволяет увидеть, кто входил в систему, откуда осуществлялся вход и как долго они оставались активны. Информация, поставляемая командой last, может иметь настолько глубокую ретроспективу, насколько это позволяет системная база данных wtmp.
Пример из жизни. Слежка за пользователями
Системным администраторам нужны средства, чтобы как следует следить за своими пользователями. Периодический запуск команды w может сообщить нам, с какими программами пользователи в настоящий момент работают.
jjohnson@host:~% w 1:45am up 3 days, 12:03, 4 users, load average: 1.55, 2.23, 2.35 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT Gstuart pts/0 192.168.1.10 1:44am 55.00s 0.04s 0.04s ./nc -l -p 1812 -s 1 Wave pts/1 10.10.4.3 Sun 9am 9:57m 0.14s 0.11s -bash Schuster pts/1 10.10.4.15 Mon 3pm 9:57m 0.14s 0.11s pine Jjohnson pts/2 192.168.1.100 12:37am 1.00s 0.35s 0.08s w2.11.
Мы можем видеть, что Иванов тщетно бьется над командным запросом, Петров читает свою почту, Сидоров запускает команду w , а что же Гаврилов? Целая командная строка вырезана, но она появляется, когда он пытается запустить Netcat, чтобы перехватить трафик RADIUS. (Опция -p указывает, что RADIUS принимается на порте 1812, а опция -s указывает специфический исходящий адрес; см. лекцию ""NETCAT и CRYPTCAT"" , где подробно рассказано об утилите Netcat.) Мы также можем видеть, что Гаврилов запустил Netcat около 55 секунд назад.
Это выглядит несколько подозрительно. Давайте запустим last на своей системе, чтобы выяснить, кто входил в систему (и как часто). Поскольку мы собираемся получить кучу выходной информации в занятой системе, мы переправим ее через утилиту head (стандартная для большинства систем Unix), чтобы прочитать только первые строки.
jjohnson@host:~% last | head ilof ftpd12204 ilofhost Tue Feb 26 02:00 still logged in ilof ftpd11820 ilofhost Tue Feb 26 01:59 - 02:00 (00:00) derk ftpd11786 10.10.4.88 Tue Feb 26 01:59 - 01:59 (00:00) gstuart pts/0 192.168.1.10 Tue Feb 26 01:59 still logged in rlessen ftpd11413 192.168.118.122 Tue Feb 26 01:59 - 01:59 (00:00) deskel ftpd11665 192.168.174.42 Tue Feb 26 01:59 - 01:59 (00:00) ilof ftpd11533 ilofhost Tue Feb 26 01:59 - 01:59 (00:00) derk ftpd11189 10.10.4.88 Tue Feb 26 01:58 - 01:58 (00:00) gstuart pts/0 192.168.1.10 Tue Feb 26 01:58 - 01:59 (00:01) deskel ftpd11053 192.168.174.42 Tue Feb 26 01:58 - 01:58 (00:00)2.12.
Здесь мы можем видеть последних 10 входивших в систему пользователей, и как долго они оставались в системе. Большинство пользователей появились в FTP и не оставались в системе долго. А что же Гаврилов? Кажется, он вошел недавно и оставался там лишь минуту. Однако сейчас он вошел снова. Давайте посмотрим на его последние несколько логинов.
jjohnson@host:~% last | grep gstuart | head gstuart pts/0 192.168.1.10 Tue Feb 26 02:05 still logged in gstuart pts/0 192.168.1.10 Tue Feb 26 02:04 - 02:05 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:03 - 02:04 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:02 - 02:03 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:01 - 02:02 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:00 - 02:01 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:59 - 02:00 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:58 - 01:59 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:57 - 01:58 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:56 - 01:57 (00:01)2.13.
Гм: Этот парень определенно собирается делать какие-то непонятные вещи. Он входит в систему каждую минуту, выходит, а затем снова входит.
Теперь, когда мы знаем, что Гаврилов ведет себя странно, мы можем предпринять некоторые другие меры, чтобы проследить за ним и узнать, что он делает. Мы можем немедленно сделать копию его начальной директории, чтобы посмотреть ее в автономном режиме, что позволит нам увидеть историю его команд, электронную почту и любые другие средства, которые он недавно загружал и конфигурировал. Мы также видим, что он входит в систему с TTY pts/0. Запуск команды ps дает нам список всех запущенных процессов, что лучше указывает на то, что он собирается сделать. Как только мы собрали информацию, мы можем разместить более <продвинутые> средства, которые помогут нам собрать все куски вместе и проследить его шаги - но все это началось с двух простых системных утилит.