🔎 Как узнать, кто редактировал файлы в системах Linux |

🔎 Как узнать, кто редактировал файлы в системах Linux

Мануал

В этом руководстве вы узнаете, как узнать, кто редактировал файлы в Linux.

Linux предоставляет пользовательские инструменты для аудита безопасности под названием auditd (Audit daemon). auditd отслеживает все изменения, происходящие в системе, и генерирует журналы, которые можно проанализировать, чтобы получить представление о состоянии безопасности системы.

Как найти пользователя, который редактировал файлы в Linux

Не существует простого способа узнать, кто и какие файлы изменил на Linux.

Однако auditd делает этот процесс простым.

Итак, как узнать, кто редактировал файлы в Linux?

Установка пакетов auditd на Linux

В этом руководстве мы будем использовать две системы, на базе Debian и RHEL, чтобы показать, как пакет Audit может быть использован для выяснения того, кто редактировал файлы в Linux.

Как отследить, кто удаляет файл в CentOS / RHEL, используя Auditd

Для начала установите пакеты auditd на Linux.

В дистрибутиве на базе RHEL:

yum install audit -y

В дистрибутивах на базе Debian;

apt install auditd -y

Инструменты пакета Audit

Пакет Audit поставляется с несколькими инструментами с различными функциональными возможностями.

К ним относятся:

  • auditd – компонент пользовательского пространства, который отвечает за запись записей аудита на диск.
  • ausearch – пользовательский компонент для запроса логов демона аудита.
  • aureport – пользовательский компонент, создающий сводные отчеты по логам аудита.
  • auditctl – программа, используемая для настройки параметров ядра, связанных с аудитом, просмотра состояния конфигурации и загрузки дискреционных правил аудита. При загрузке системы auditctl считывает правила в файле /etc/audit/audit.rules и загружает их в ядро.

Чтобы проверить состояние;

systemctl status auditd
● auditd.service - Security Auditing Service
     Loaded: loaded (/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-12-08 17:52:49 EAT; 25min ago
       Docs: man:auditd(8)
             https://github.com/linux-audit/audit-documentation
    Process: 1336 ExecStart=/sbin/auditd (code=exited, status=0/SUCCESS)
    Process: 1340 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
   Main PID: 1337 (auditd)
      Tasks: 2 (limit: 5902)
     Memory: 616.0K
        CPU: 25ms
     CGroup: /system.slice/auditd.service
             └─1337 /sbin/auditd

Dec 08 17:52:49 debian11 augenrules[1350]: enabled 1
Dec 08 17:52:49 debian11 augenrules[1350]: failure 1
Dec 08 17:52:49 debian11 augenrules[1350]: pid 1337
Dec 08 17:52:49 debian11 augenrules[1350]: rate_limit 0
Dec 08 17:52:49 debian11 augenrules[1350]: backlog_limit 8192
Dec 08 17:52:49 debian11 augenrules[1350]: lost 0
Dec 08 17:52:49 debian11 augenrules[1350]: backlog 0
Dec 08 17:52:49 debian11 augenrules[1350]: backlog_wait_time 60000
Dec 08 17:52:49 debian11 augenrules[1350]: backlog_wait_time_actual 0
Dec 08 17:52:49 debian11 systemd[1]: Started Security Auditing Service.

Узнаем, кто отредактировал файлы в Linux с помощью Auditd

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

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

Control rules: Позволяют изменять поведение системы аудита и некоторые ее конфигурации.
File system rules:позволяют проводить аудит доступа к определенному файлу или каталогу. Они также известны как “файловые часы”.
System call rules: Позволяют вести журнал системных вызовов, которые выполняет любая указанная программа.

Нас интересуют только file system rules, поскольку они позволяют нам узнать, кто редактировал файлы в Linux.

Как было сказано выше, утилита auditctl может быть использована для настройки правил аудита.

Настройка правил аудита файловой системы

Вы можете настроить правила аудита файловой системы в командной строке с помощью команды auditctl.

Синтаксис команды следующий;

auditctl -w path_to_file -p access_permissions -k filter_key

Используются следующие опции:

  • -w path_to_file: определяет путь к объекту файловой системы, за которым ведется наблюдение.
  • -p access_permissions: (-p [r|w|x|a]) Описывает тип разрешения доступа, на который будет срабатывать наблюдение за файловой системой. r=чтение, w=запись, x=выполнение, a=изменение атрибутов. Обратите внимание, что это не стандартные разрешения файлов, а скорее системный вызов, который будет выполнять подобные действия.
  • -k filter_key: определяет произвольную строку текста, длина которой может достигать 31 байта. Она может однозначно идентифицировать записи аудита, созданные правилом.

Например, мы хотим следить за изменениями чтения/записи и атрибутов файла /etc/ssh/sshd_config, тогда мы определим правило следующим образом;

auditctl -w /etc/ssh/sshd_config -p wax -k monitor_sshd_conf

Образец вывода;

-a always,exit -F arch=b64 -S execve -F path=/bin/systemctl -F key=systemctl -F key=medium
-a always,exit -F arch=b64 -S execve -F path=/sbin/service -F key=service -F key=medium

Чтобы проверить это правило, попробуйте изменить файл /etc/ssh/sshd_config.

От имени пользователя (не root) выполните команду следующим образом;

echo "AllowUsers itsecforu root" | sudo tee -a /etc/ssh/sshd_config

Если вы хотите прекратить мониторинг файла с помощью auditctl;

auditctl -W /etc/ssh/sshd_config -p wax -k monitor_sshd_conf

Настройка правил аудита файловой системы

Чтобы настроить постоянные правила, сохраняющиеся при перезагрузке системы, вы можете разместить правила в каталоге /etc/audit/audit.rules или в каталоге /etc/audit/rules.d/.

Правила в файле /etc/audit/audit.rules создаются на основе правил, определенных в каталоге /etc/audit/rules.d/.

Если правила размещены в каталоге /etc/audit/rules.d/, их необходимо загрузить с помощью утилиты augenrules.

Например:

echo "-w /etc/ssh/sshd_config -p wxa -k monitor_sshd_conf" > /etc/audit/rules.d/sshd.rules

Проверьте, обнаружены ли изменения;

augenrules --check

Загрузите правила;

augenrules --load

Это должно обновить файл /etc/audit/audit.rules.

Перезапустите службу auditd;

systemctl restart auditd

Проверьте правила;

auditctl -l

Существуют различные способы, с помощью которых можно просматривать записи логов аудита.

Чтение файла  логов аудита, /var/log/audit/audit.log.

grep --color monitor_sshd_conf /var/log/audit/audit.log
type=CONFIG_CHANGE msg=audit(1638984278.290:13): auid=1000 ses=3 subj==unconfined op=add_rule key="monitor_sshd_conf" list=4 res=1AUID="itsecforu "
type=SYSCALL msg=audit(1638984357.760:38): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7fffe54487de a2=441 a3=1b6 items=2 ppid=987 pid=988 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=5 comm="tee" exe="/usr/bin/tee" subj==unconfined key="monitor_sshd_conf"ARCH=x86_64 SYSCALL=openat AUID="itsecforu" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"

Создание отчета с помощью aureport (подробнее читайте в man aureport)

aureport -i -k
Key Report
===============================================
# date time key success exe auid event
===============================================
1. 12/08/2021 20:24:38 monitor_sshd_conf yes ? itsecforu 13
2. 12/08/2021 20:25:57 monitor_sshd_conf yes /usr/bin/tee itsecforu 38

Выполним поиск в логах с помощью команды ausearch (подробнее читайте в man ausearch).

ausearch -i -k monitor_sshd_conf
----
type=CONFIG_CHANGE msg=audit(12/08/2021 20:24:38.290:13) : auid=itsecforu ses=3 subj==unconfined op=add_rule key=monitor_sshd_conf list=exit res=yes 
----
type=PROCTITLE msg=audit(12/08/2021 20:25:57.760:38) : proctitle=tee -a /etc/ssh/sshd_config 
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=1 name=/etc/ssh/sshd_config inode=526305 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=0 name=/etc/ssh/ inode=523877 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(12/08/2021 20:25:57.760:38) : cwd=/home/itsecforu 
type=SYSCALL msg=audit(12/08/2021 20:25:57.760:38) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7fffe54487de a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6 items=2 ppid=987 pid=988 auid=kifarunix uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=5 comm=tee exe=/usr/bin/tee subj==unconfined key=monitor_sshd_conf 

Из вывода отчета ausearch попробуем интерпретировать поля записей.

  • type=PROCTITLE: Тип записи, который дает полную командную строку, вызвавшую это событие аудита.
  • msg=audit(12/08/2021 20:24:38.290:13): Определяет метку времени и уникальный ID записи в форме audit(time_stamp:ID). Время обычно отображается в EPOCH, если вы не используете опцию -i.
    Если время в EPOCH, например, 1638984357.760, то преобразуйте его с помощью команды date;
date -d @1638984357.760
Wed 08 Dec 2021 08:25:57 PM EAT
  • proctitle=tee -a /etc/ssh/sshd_config: В поле записывается полная строка команды, которая была использована для вызова анализируемого процесса. Без опции -i она была бы отображена в шестнадцатеричном виде.
  • type=PATH: тип записи PATH записывает путь, который передается системному вызову в качестве аргумента, в данном случае путь – /etc/ssh/sshd_config.
  • item=1: поле item указывает, какой элемент из общего числа элементов, на которые ссылается запись типа SYSCALL, является текущим. значение 1 означает, что это второй элемент.
  • name=/etc/ssh/sshd_config: Записывает путь к файлу или каталогу, который был передан системному вызову в качестве аргумента. В данном случае это был файл /etc/ssh/sshd_config.
  • inode=526305: поле inode содержит номер inode, связанный с файлом или каталогом, записанным в этом событии. Следующая команда отображает файл или каталог, связанный с номером inode 526305:
find / -inum 526305 -print
/etc/ssh/sshd_config
  • dev=08:01: Поле определяет минорный и мажорный идентификатор устройства, которое содержит файл или каталог, записанный в этом событии.
  • mode=file,644: Поле mode записывает разрешения на файл или каталог, 644 означает -rw-r-r- для файла /etc/ssh/sshd_config.
  • ouid=root: В поле ouid записывается идентификатор пользователя/имя пользователя владельца объекта.
  • ogid=root: В поле ogid записывается идентификатор группы/имя пользователя владельца объекта.
  • rdev=00:00: Поле rdev содержит записанный идентификатор устройства только для специальных файлов. В данном случае оно не используется, так как записанный файл является обычным файлом.
  • nametype=NORMAL: записывает намерение операции каждой записи пути в контексте данного системного вызова.
  • cap_fp=none: Поле cap_fp записывает данные, связанные с установкой разрешенной возможности объекта файла или каталога на основе файловой системы.
  • cap_fi=none: В поле cap_fi записываются данные, связанные с установкой унаследованной возможности файловой системы объекта файла или каталога.
  • cap_fe=0: В поле cap_fe записывается установка эффективного бита возможности объекта файла или каталога на основе файловой системы.
  • cap_fver=0: В поле cap_fver записывается версия возможности объекта файла или каталога на основе файловой системы.
  • type=CWD: записывает рабочий каталог, из которого выполнялся процесс, вызвавший системный вызов.
  • cwd=/home/kifarunix: указывает каталог, в котором был вызван системный вызов.
  • type=SYSCALL: указывает, что запись была вызвана системным вызовом ядра.
  • arch=x86_64: Поле содержит информацию об архитектуре процессора системы. Если опция -i не используется с auseardh, значение отображается в шестнадцатеричной системе счисления.
  • syscall=openat: В поле syscall записывается тип системного вызова, который был послан ядру. Если с ausearch используется опция -i, значения интерпретируются, в противном случае показываются числовые значения. Используйте команду ausyscall –dump, чтобы вывести список всех системных вызовов вместе с их номерами. Для получения дополнительной информации см. man ausyscall.
  • success=yes: В поле success записывается, был ли системный вызов, записанный в данном событии, успешным или неудачным. В данном случае вызов прошел успешно.
  • exit=3: Поле содержит значение, определяющее код завершения, возвращенный системным вызовом. Для разных системных вызовов это значение различно.
  • a0=0xffffff9c a1=0x7fffe54487de a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6: Поля a0 – a3 записывают первые четыре аргумента, закодированные в шестнадцатеричной системе счисления, системного вызова в данном событии. Эти аргументы зависят от используемого системного вызова.
  • items=2: Поле items содержит количество вспомогательных записей PATH, которые следуют за записью системного вызова.
  • ppid=987: В поле ppid записывается идентификатор родительского процесса (PPID).
  • pid=988: В поле pid записывается идентификатор процесса (PID).
  • auid=itsecforu: В поле auid записывается идентификатор пользователя аудита, то есть loginuid. Этот идентификатор присваивается пользователю при входе в систему и наследуется каждым процессом, даже если личность пользователя меняется, например, при смене учетной записи.
  • uid=root: В поле uid записывается идентификатор пользователя, который запустил анализируемый процесс. Идентификатор пользователя может быть интерпретирован в имена пользователей при использовании опции -i с ausearch. Вы также можете интерпретировать с помощью следующей команды: ausearch -i -uid UID.
  • gid=root: В поле gid записывается идентификатор группы пользователя, который запустил анализируемый процесс.
  • euid=root: В поле euid записывается эффективный идентификатор пользователя, запустившего анализируемый процесс.
  • suid=root: В поле suid записывается установленный идентификатор пользователя, запустившего анализируемый процесс.
  • fsuid=root: В поле fsuid записывается идентификатор пользователя файловой системы пользователя, запустившего анализируемый процесс.
  • egid=root: В поле egid записывается идентификатор эффективной группы пользователя, запустившего анализируемый процесс.
  • sgid=root: В поле sgid записывается идентификатор установленной группы пользователя, запустившего анализируемый процесс.
  • fsgid=root: В поле fsgid записывается идентификатор группы файловой системы пользователя, запустившего анализируемый процесс.
  • tty=pts1: В поле tty записывается терминал, с которого был вызван анализируемый процесс.
  • ses=5: В поле ses записывается идентификатор сессии, из которой был вызван анализируемый процесс.
  • comm=tee: В поле comm записывается имя командной строки команды, которая была использована для вызова анализируемого процесса.
  • exe=/usr/bin/tee: В поле exe записывается путь к исполняемому файлу, который был использован для вызова анализируемого процесса.
  • subj=unconfined: В поле subj записывается контекст SELinux, которым был помечен анализируемый процесс во время выполнения.
  • key=monitor_sshd_conf: В поле key записывается определяемая администратором строка, связанная с правилом, которое породило это событие в логах аудита.
----
type=CONFIG_CHANGE msg=audit(12/08/2021 20:24:38.290:13) : auid=kifarunix ses=3 subj==unconfined op=add_rule key=monitor_sshd_conf list=exit res=yes 
----
type=PROCTITLE msg=audit(12/08/2021 20:25:57.760:38) : proctitle=tee -a /etc/ssh/sshd_config 
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=1 name=/etc/ssh/sshd_config inode=526305 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 
type=PATH msg=audit(12/08/2021 20:25:57.760:38) : item=0 name=/etc/ssh/ inode=523877 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(12/08/2021 20:25:57.760:38) : cwd=/home/itsecforu
type=SYSCALL msg=audit(12/08/2021 20:25:57.760:38) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7fffe54487de a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6 items=2 ppid=987 pid=988 auid=itsecforu uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=5 comm=tee exe=/usr/bin/tee subj==unconfined key=monitor_sshd_conf

Видно, что:

  • файл конфигурации SSH-сервера, /etc/ssh/sshd_config, был обновлен с помощью команды tee.
  • Команда была выполнена из каталога /home/itsecforu.
  • Изменения были внесены пользователем itsecforu от пользователя root (с помощью sudo).

Заключение

Вот и все о том, как узнать, кто редактировал файлы в Linux. Конечно, вы можете настроить больше правил по своему усмотрению.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий