Системы Linux предоставляют множество способов отслеживать активность пользователей, в том числе когда они входят в систему, как долго они остаются в системе и какие команды они выполняют.
В этой статье рассматривается ряд команд, которые могут помочь вам просматривать и понимать логины пользователей и время, которое пользователи проводят на ваших серверах Linux.
Команда who
Команда who – это базовая команда, которая покажет вам, кто сейчас зарегистрирован на вашем сервере. Но это еще не все. Вы также увидите, когда они вошли в систему и откуда они вошли в систему (т. е. IP-адрес). В этом примере показано, что два пользователя вошли в систему из разных систем.
$ who andrey seat0 2024-09-13 15:18 (login screen) andrey tty2 2024-09-13 15:18 (tty2) ira pts/1 2024-09-13 15:23 (192.168.0.7) maks pts/2 2024-09-13 11:11 (192.168.0.11)
Команда Last
Команда Last позволяет заглянуть в прошлое и увидеть как текущие, так и более ранние логины, начиная с самого последнего и переходя к предыдущим.
$ last | head -6 ira pts/1 192.168.0.7 Fri Sep 13 15:23 still logged in andrey tty2 tty2 Fri Sep 13 15:18 still logged in andrey seat0 login screen Fri Sep 13 15:18 still logged in ira pts/1 192.168.0.11 Tue Sep 10 11:51 - 12:26 (00:35) maks pts/2 192.168.0.11 Fri Sep 13 11:11 still logged in
Приведенная ниже команда сжимает пробел в отдельные пустые символы.
$ last | head -7 | tr -s " " ira pts/1 192.168.0.7 Fri Sep 13 15:23 still logged in andrey tty2 tty2 Fri Sep 13 15:18 still logged in andrey seat0 login screen Fri Sep 13 15:18 still logged in ira pts/1 192.168.0.11 Tue Sep 10 11:51 - 12:26 (00:35) maks pts/2 192.168.0.11 Fri Sep 13 11:11 still logged in
Проверка файла wtmp
Для подсчета входов в систему вы могли бы использовать команду, подобную приведенной ниже, которая предоставит количество входов в систему, записанное в текущем файле /var/log/wtmp, куда записываются входы в систему. Имейте в виду, что это двоичный файл, поэтому вы не сможете прочитать его содержимое с помощью команд grep, more или cat.
Приведённая ниже команда выводит информацию о обычных (не системных) пользователях — людях с домашними каталогами в /home — и подсчитывает количество их входов в систему.
$ for user in `ls /home` > do > echo -n "$user: " > who /var/log/wtmp | grep "^$user " | wc -l > done brie: 0 dumdum: 0 andrey: 124 george: 1 justme: 0 lola: 19 newuser: 0 ira: 90
Чтобы понять, насколько стар файл wtmp, вы можете выполнить команду, которая выведет первую (и, следовательно, самую старую) строку в файле.
$ who /var/log/wtmp | head -1 ira pts/3 2024-04-02 16:24 (192.168.0.11)
Вы также увидите дату создания файла wtmp, когда выполните такую команду, как эта, где эта информация добавляется в конец вывода.
$ last george george pts/2 192.168.0.8 Tue Jul 30 15:32 - 15:32 (00:00) wtmp begins Tue Apr 2 16:24:11 2024
Команда ac
Команда ac сообщает о времени подключения пользователя, а также имеет ряд других полезных опций.
Используйте опцию -d для просмотра ежедневных итогов входа, как в этом примере:
$ ac -d | tail -5 Aug 27 total 222.68 Sep 7 total 4.60 Sep 10 total 1.85 Sep 13 total 18.43 Today total 26.73
Для получения итоговых данных по пользователям используйте опцию -p:
$ ac -p lola 5.07 george 0.01 andrey 915.42 ira 124.67 total 1045.17
Команда lslogins
Команда lslogins отобразит данные о системных и пользовательских учётных записях. Поскольку большинство системных учётных записей никогда не используются, вы увидите много строк без данных в столбце LAST-LOGIN.
$ lslogins | head -5 UID USER PROC PWD-LOCK PWD-DENY LAST-LOGIN GECOS 0 root 147 Aug27/13:11 Super User 1 bin 0 bin 2 daemon 0 daemon 3 adm 0 adm
Чтобы отобразить имена пользователей без учёта всех системных учётных записей, используйте команду с параметром -u:
$ lslogins -u UID USER PROC PWD-LOCK PWD-DENY LAST-LOGIN GECOS 0 root 145 Aug27/13:11 Super User 1000 andrey 75 Sep13/15:18 andrey 1001 ira 5 12:24 1002 newuser 0 1003 george 0 Jul30/15:32 1004 justme 0 Feb10/12:36 JustMe 1006 lola 0 Jul22/12:30 1007 dumdum 0
Вы можете получить довольно много информации об одном пользователе с помощью команды, подобной показанной ниже. В этом случае команда lslogins обращается к дополнительным файлам (таким как файл /etc/passwd) для сбора дополнительной информации о пользователе, такой как оболочка пользователя и UID.
$ lslogins ira Username: ira UID: 1001 Gecos field: Home directory: /home/ira Shell: /bin/bash No login: no Primary group: ira GID: 1001 Supplementary groups: wheel Supplementary group IDs: 10 Last login: 12:24 Last terminal: pts/1 Last hostname: 192.168.0.7 Hushed: no Running processes: 5 Last logs: 12:29 systemd[52919]: Created slice background.slice - User Background Tasks Slice. 12:29 systemd[52919]: Starting systemd-tmpfiles-clean.service - Cleanup of User's Temporary Files and Directories... 12:29 systemd[52919]: Finished systemd-tmpfiles-clean.service - Cleanup of User's Temporary Files and Directories.
Если даты не указаны (например, 11 сентября 2013 года 13:12), указывается текущая дата.
Команда lastlog
Команда lastlog сообщает о самом последнем входе в систему всех пользователей или для конкретного пользователя.
andrey tty2 Fri Sep 13 15:18:43 -0400 2024 ira pts/1 192.168.0.7 Fri Sep 13 15:23:13 -0400 2024 newuser **Never logged in** george pts/2 192.168.0.8 Tue Jul 30 15:32:22 -0400 2024 justme tty2 Sat Feb 10 12:36:19 -0500 2024 lola pts/2 192.168.0.6 Mon Jul 22 12:30:03 -0400 2024 $ lastlog -u george Username Port From Latest george pts/2 192.168.0.8 Tue Jul 30 15:32:22 -0400 2024
Последние команды
Чтобы увидеть последние команды, которые запускал пользователь, вам необходимо иметь доступ суперпользователя и просмотреть файл истории его команд. Для пользователей bash это будет .bash_history.
# tail ~george/.bash_history pwd touch this ls -l this rm badfile
Выводы
Системы Linux предоставляют множество способов отслеживать активность пользователей – когда они входят в систему, как долго они остаются в системе и даже какие команды они выполняют.