12.5.1. Основные команды

We use cookies. Read the Privacy and Cookie Policy

12.5.1. Основные команды

Информация о текущих пользователях системы сохраняется в файле /var/run/utmp. Если попытаться посмотреть его содержимое, например, командой cat, то ничего хорошего нашему взору не откроется. Этот журнал хранит данные не в текстовом, а бинарном виде, и получение информации возможно только с помощью специализированных программ (команд).

who

Команда who позволяет узнать, кто сейчас зарегистрирован в системе и сколько времени в ней находится. Информация достается из файла /var/run/utmp. Введите эту команду, и на экране появится список примерно следующего вида:

robert tty1 Dec 8 10:15

root tty2 Dec 8 11:07

Из этого списка становится ясно, что пользователь robert работает за первым терминалом (tty1) и вошел в систему 8 декабря в 10 часов 15 минут.

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

Это еще одна причина, по которой администратор не должен входить в систему под учетной записью root. Лучше всего работать как простой пользователь, а когда не хватает прав, то переключаться на привилегированного. На такой случай я создал учетную запись, для которой установил UID, равный нулю. Она позволяет получить доступ ко всей системе, и при этом имеет имя отличное от root, и не вызовет подозрений, когда я буду работать. Так что в моем случае никогда нельзя увидеть пользователя root.

users

Эта команда позволяет вытащить из журнала /var/run/utmp список всех пользователей, которые сейчас зарегистрированы в системе.

В журнале /var/run/utmp информация хранится временно, только на момент присутствия пользователя. Когда он выходит из системы, соответствующая запись удаляется. После этого выяснить, кто и когда работал, можно только по журналу /var/log/wtmp. Это также бинарный файл, поэтому его содержимое можно увидеть с помощью специализированных программ.

last

Команда позволяет выяснить, когда и сколько времени определенный пользователь находился в системе. В качестве параметра передается интересующее имя. Например, следующая директива отображает время входа и продолжительность нахождения в системе пользователя robert:

last robert

Выполнив команду, вы увидите на экране примерно следующий список:

robert tty1 Thu Dec 2 12:17 - 12:50 (00:33)

По этой записи можно понять, что robert находился за терминалом (tty1), зашел в систему 2 декабря на 33 минуты (с 12:17 до 12:50). Если пользователь работал не локально, а через сеть, то будет отображена информация о хосте, с которого входили в систему.

Если выполнить эту команду для себя, то может вывалиться такой список, что читать его будет невозможно, потому что вы достаточно часто работаете в системе. Чтобы ограничить выводимые данные, можно указать ключ -n и количество отображаемых строк. Например, следующая команда выдаст информацию о последних пяти входах:

last -n 5 robert

lastlog

Если выполнить команду lastlog, то она выведет на экран перечень всех пользователей с датами их последнего подключения к системе. Пример списка можно увидеть в листинге 12.1.

Листинг 12.1. Результат выполнения команды lastlog

Username Port     From          Latest

root     ftpd2022 192.168.77.10 Mon Feb 21 12:05:06 +0300 2005

bin                             **Never logged in**

daemon                          **Never logged in**

adm                             **Never logged in**

lp                              **Never logged in**

sync                            **Never logged in**

shutdown                        **Never logged in**

halt                            **Never logged in**

mail                            **Never logged in**

news                            **Never logged in**

uucp                            **Never logged in**

operator                        **Never logged in**

games                           **Never logged in**

gopher                          **Never logged in**

ftp                             **Never logged in**

nobody                          **Never logged in**

vcsa                            **Never logged in**

mailnull                        **Never logged in**

rpm                             **Never logged in**

xfs                             **Never logged in**

apache                          **Never logged in**

ntp                             **Never logged in**

rpc                             **Never logged in**

gdm                             **Never logged in**

rpcuser                         **Never logged in**

nscd                            **Never logged in**

ident                           **Never logged in**

radvd                           **Never logged in**

squid                           **Never logged in**

mysql                           **Never logged in**

flenov   ftpd2022 192.168.77.10 Mon Feb 21 12:05:06 +0300 2005

named                           **Never logged in**

robert   tty1                   Mon Feb 21 12:10:47 +0300 2005

Список состоит из четырех колонок:

? имя пользователя из файла /etc/passwd;

? порт или терминал, на который происходило подключение;

? адрес компьютера, если вход был по сети;

? время входа.

С помощью lastlog удобно контролировать системные записи. У них дата последнего входа должна быть **Never logged in**, потому что под ними нельзя войти в систему (в качестве командной оболочки установлены /bin/false, /dev/null, /sbin/nologin и др.). Если вы заметили, что кто-либо проник в систему через одну из этих учетных записей, то это значит, что хакер использует ее, изменив настройки.

Простая замена командной оболочки в файле /etc/passwd может открыть хакеру потайную дверь, и администратор не заметит этой трансформации. Но после выполнения команды lastlog все неявное становится явным.

Обращайте внимание на тип подключения и адрес. Если что-то вызывает подозрение, то можно выявить атаку на этапе ее созревания.

lsof

С помощью этой команды можно определить, какие файлы и какими пользователями открыты в данный момент. Результат выполнения директивы приведен в листинге 12.2.

Листинг 12.2. Результат выполнения команды lsof

COMMAND PID USER FD  TYPE DEVICE SIZE   NODE NAME

init     1  root cwd DIR  3,2    4096      2 /

init     1  root rtd DIR  3,2    4096      2 /

init     1  root txt REG  3,2   26920 635256 /sbin/init

init     1  root mem REG  3,2   89547 553656 /lib/ld-2.2.5.so

init     1  root 10u FIFO 3,2         195499 /dev/initctl

keventd  2  root cwd DIR  3,2    4096      2 /

keventd  2  root rtd DIR  3,2    4096      2 /

kapmd    3  root 10u FIFO 3,2         195499 /dev/initctl

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

Данный текст является ознакомительным фрагментом.