У більшості дистрибутивів дві групові членства охоплюють майже все, що потрібно аналітику: adm для текстових журналів у /var/log на Debian та Ubuntu, а також systemd-journal для повного системного журналу. Додайте обліковий запис за допомогою sudo usermod -aG adm,systemd-journal <user> і почніть нову сесію входу. Декілька журналів залишаються лише для root за задумом, зокрема /var/log/secure та /var/log/messages на системах сімейства Red Hat і все під /var/log/audit. Для них використовуйте строго обмежений sudo, а не оболонку root.
Надання комусь доступу до root лише для того, щоб вони могли читати журнали, є тим скороченням, яке проявляється під час наступного аудиту або інциденту. Цей посібник охоплює спосіб найменших повноважень, а також пастки, які роблять «просто додайте їх у групу» менш простим, ніж здається.
Хто може читати що
| Log | Debian / Ubuntu | RHEL / Rocky / Alma |
|---|---|---|
| /var/log/auth.log / /var/log/secure | root і adm | лише root |
| /var/log/syslog / /var/log/messages | root і adm | лише root |
| Журнали веб сервера | root і adm | лише root (каталог журналів httpd заблокований) |
| Системний журнал (journalctl) | root, systemd-journal, adm | root, systemd-journal, wheel |
| /var/log/audit/audit.log | лише root | лише root |
Точне право власності відрізняється залежно від дистрибутиву та версії, тому перевірте безпосередньо на системі:
id
ls -l /var/log/auth.log /var/log/secure 2>/dev/null
getfacl /var/log/journal 2>/dev/null
Опція 1: Членство у групі
sudo usermod -aG adm,systemd-journal analyst
Два деталі важливі. -a не є опційною: без неї, usermod -G заміщує групи користувача замість того, щоб додаються до них. І зміни у групах застосовуються лише до нових сесій. Вийдіть і зайдіть заново, або почніть нову оболонку входу, перед перевіркою. “Я додав до групи і все ще каже про відсутність дозволу” майже завжди означає стару сесію.
На системах сімейства Red Hat, adm не відкриває /var/log/secure або /var/log/messages. Ці файли там лише для root. Використовуйте Опцію 2 або 3.
Опція 2: Вузький sudo для журналів лише для root
Дозвольте конкретні команди, а не оболонку. Створіть /etc/sudoers.d/log-readers з visudo -f:
%logreaders ALL=(root) NOPASSWD: /usr/sbin/ausearch, /usr/local/bin/read-secure-log
read-secure-log це невеликий скрипт, що належить root (режим 0755, належить root) і виконує лише одну дію:
#!/bin/sh
exec /usr/bin/zcat -f /var/log/secure /var/log/secure-*
Чому обгортка замість cat /var/log/secure* у sudoers? Тому що * у аргументі sudoers відповідає будь-чому, включаючи пробіли. cat /var/log/secure /etc/shadow відповідає cat /var/log/secure*. Обгортка без аргументів не має такої дірки.
Не надавайте journalctl через sudo. Він відкриває переглядач (less), і !sh всередині less дає оболонку root. Для доступу до журналу використовуйте групу systemd-journal.
Опція 3: Право власності групи, яке зберігається після ротації
Встановлення ACL безпосередньо працює до наступної ротації: sudo setfacl -m g:logreaders:r /var/log/secure. Потім файл створюється заново, і ACL зникає. Щоб доступ зберігався, нехай нові файли створюються з правильною групою з самого початку, у обох місцях, де їх створюють:
- logrotate, у стовпці файлу: create 0640 root logreaders
- rsyslog, для дії, що записує це: action(type=”omfile” file=”/var/log/secure” fileGroup=”logreaders” fileCreateMode=”0640″)
Перевірте це з logrotate -f на нетестовій системі перед розгортанням.
Контейнери
Не додавайте аналітиків до групи docker лише для читання журналів контейнерів. Членство в docker фактично дорівнює root на цьому хості. Отримуйте журнали контейнерів від вашого збирача журналів або SIEM, або просіть платформну команду про доступ лише на читання там.
Коли щось не так
| Симптом | Ймовірна причина | Fix |
|---|---|---|
| Все ще відмовлено в доступі після usermod | Стара сесія | Вийдіть і зайдіть заново |
| Користувач втратив інші групи | usermod -G без -a | Додайте їх знову; завжди використовуйте -aG |
| journalctl показує лише власні журнали користувача | Не в systemd-journal (або adm / wheel) | Додайте до групи; нова сесія |
| Вчора доступ працював, а сьогодні ні | ACL було втрачено при ротації журналу | Використовуйте Опцію 3 |
| adm не допомагає з /var/log/secure | Файли сімейства Red Hat – лише для root | Використовуйте Опцію 2 або 3 |