Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 2:

Системные средства с открытым программным кодом: основы

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:37
2.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   w
2.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   w
2.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 дает нам список всех запущенных процессов, что лучше указывает на то, что он собирается сделать. Как только мы собрали информацию, мы можем разместить более <продвинутые> средства, которые помогут нам собрать все куски вместе и проследить его шаги - но все это началось с двух простых системных утилит.

Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва