Я бачу два хороших способи отримання такого роду інформації. Один полягає в збільшенні журналу від самого sshd, а інший - шляхом більш глибокого моніторингу сховища git на диску. Оскільки жоден окремо не дає вам потрібної інформації, ви можете зробити те й інше та співвіднести дані журналу за допомогою зовнішнього механізму аналізу журналів або на вимогу, використовуючи людські очі та часові позначки.
sshd Модифікації
За замовчуванням, як ви, без сумніву, бачили, ви можете бачити, коли користувач увійшов у систему та звідки, використовуючи журнали аутентифікації ssh. Що ви хочете зробити, це змінити рівень на, коли ви виходите з sshd. Тож відредагуйте свій /etc/ssh/sshd_config
і знайдіть такий рядок
#LogLevel INFO
і змінити це на
LogLevel VERBOSE
потім перезапустіть службу sshd. Це збільшує рівень реєстрації sshd на 1 крок, що дає набагато більше інформації. Перевірте цей фрагмент журналу мого віддаленого доступу після внесення змін.
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
Тут важливо помітити дві речі
- Ми бачимо відбиток відкритого ключа, який використовується для підтвердження автентичності
- Ми бачимо часову позначку мого журналу
Використовуючи за замовчуванням LogLevel (INFO), sshd не записує жоден із цих елементів. Отримати відбиток ключа - це один додатковий крок. Ви повинні обробити відповідний authorized_keys
файл із ssh-keygen як таким.
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
Тож тепер ви знаєте такі відомості:
- Ім'я користувача, яке увійшло
- Час, коли користувач увійшов у систему
- Який відкритий ключ використовувався для аутентифікації
- Час, коли користувач вийшов із системи
Тепер, коли у нас є спосіб віднести дії користувача до певного часу, якщо припустити, що обидва користувачі не входили одночасно, ми можемо почати перегляд змін, внесених у сховище.
Моніторинг каталогів з аудитом
Як сказав sysadmin1138, це може бути відмінним випадком використання для підсистеми аудиту. Якщо ви не використовуєте дистрибутив на основі RedHat, можливо, є аналог, але вам доведеться його знайти. Конфігурація для аудита досить інтенсивна і має безліч варіантів конфігурації. Щоб отримати уявлення про деякі варіанти, перегляньте це питання на нашому сестринському сайті для спеціалістів з інформаційної безпеки .
Як мінімум, я б рекомендував налаштувати те, що називається "дивитися", на каталог на диску, що містить ваше сховище git. Для цього потрібно доручити модулю ядра звітувати про спроби виконувати дзвінки з доступу до файлів, наприклад, open()
або creat()
на файлових ручках, що вказують на список файлів чи каталогів.
Ось зразок конфігурації, який би це зробив, і тільки це. Тому будьте уважні, щоб прочитати та зрозуміти наявні /etc/audit/audit.rules
, щоб належним чином інтегрувати зміни.
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2