ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Отслеживание входов пользователей в Linux

Отслеживание входов пользователей в Linux

Системы 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 предоставляют множество способов отслеживать активность пользователей – когда они входят в систему, как долго они остаются в системе и даже какие команды они выполняют.

Exit mobile version