Na większości dystrybucji dwa członkostwa w grupach obejmują niemal wszystko, czego analityk potrzebuje: adm dla logów tekstowych w /var/log na Debianie i Ubuntu oraz systemd-journal dla pełnego dziennika systemowego. Dodaj konto z sudo usermod -aG adm,systemd-journal <user> i rozpocznij nową sesję logowania. Kilka logów pozostaje dostępnych tylko dla roota z założenia, zwłaszcza /var/log/secure i /var/log/messages na systemach z rodziny Red Hat oraz wszystko pod /var/log/audit. Dla nich używaj ograniczonego sudo, a nie powłoki roota.
Nadanie komuś uprawnień roota tylko po to, aby mógł odczytać logi, to rodzaj skrótu, który pojawia się podczas kolejnego audytu lub incydentu. Ten przewodnik obejmuje sposób najmniejszych uprawnień, oraz pułapki, które sprawiają, że „wystarczy dodać ich do grupy” jest mniej proste niż się wydaje.
Kto może czytać co
| Log | Debian / Ubuntu | RHEL / Rocky / Alma |
|---|---|---|
| /var/log/auth.log / /var/log/secure | root oraz adm | tylko root |
| /var/log/syslog / /var/log/messages | root oraz adm | tylko root |
| Logi serwera WWW | root oraz adm | tylko root (katalog logów httpd jest zablokowany) |
| Dziennik systemowy (journalctl) | root, systemd-journal, adm | root, systemd-journal, wheel |
| /var/log/audit/audit.log | tylko root | tylko root |
Dokładna własność różni się w zależności od dystrybucji i wersji, sprawdź zatem na samym urządzeniu:
id
ls -l /var/log/auth.log /var/log/secure 2>/dev/null
getfacl /var/log/journal 2>/dev/null
Opcja 1: Członkostwo w grupie
sudo usermod -aG adm,systemd-journal analyst
Dwa szczegóły mają znaczenie. Opcja -a nie jest opcjonalna: bez niej, usermod -G zastępuje grupy użytkownika zamiast dodawania do nich. I zmiany grup dotyczą tylko nowych sesji. Wyloguj się i zaloguj ponownie, lub rozpocznij nową powłokę sesji, przed testowaniem. „Dodałem grupę i nadal mówi, że odmowa dostępu” to niemal zawsze stara sesja.
Na systemach z rodziny Red Hat, adm nie odblokowuje /var/log/secure ani /var/log/messages. Te pliki są tam tylko dla roota. Użyj Opcji 2 lub 3.
Opcja 2: Ograniczone sudo dla logów tylko dla roota
Przyznaj określone komendy, nie powłokę. Utwórz /etc/sudoers.d/log-readers za pomocą visudo -f:
%logreaders ALL=(root) NOPASSWD: /usr/sbin/ausearch, /usr/local/bin/read-secure-log
read-secure-log to mały skrypt należący do roota (tryb 0755, należący do roota), który robi dokładnie jedną rzecz:
#!/bin/sh
exec /usr/bin/zcat -f /var/log/secure /var/log/secure-*
Dlaczego owijka zamiast cat /var/log/secure* w sudoers? Ponieważ * w argumencie sudoers dopasowuje cokolwiek, w tym spacje. cat /var/log/secure /etc/shadow dopasowuje cat /var/log/secure*. Owijka bez argumentów nie ma takiej dziury.
Nie przyznawaj journalctl przez sudo. Otwiera pager (mniej), a !sh w środku daje ci powłokę roota. Dla dostępu do dziennika użyj grupy systemd-journal zamiast tego.
Opcja 3: Własność grupy, która przetrwa obrót
Ustawienie ACL bezpośrednio działa aż do następnego obrotu: sudo setfacl -m g:logreaders:r /var/log/secure. Następnie plik jest tworzony na nowo, a ACL znika. Aby dostęp się utrzymał, niech nowe pliki będą tworzone z odpowiednią grupą na pierwszym miejscu, w obu miejscach, które je tworzą:
- logrotate, w sekcji pliku: create 0640 root logreaders
- rsyslog, na akcji, która to zapisuje: action(type=”omfile” file=”/var/log/secure” fileGroup=”logreaders” fileCreateMode=”0640″)
Przetestuj to z logrotate -f na niewielkom produkcyjnym urządzeniu zanim wdrożysz.
Kontenery
Nie dodawaj analityków do grupy docker tylko po to, aby mogli czytać logi kontenerów. Członkostwo w docker jest w istocie rootem na tym hoście. Pobierz logi kontenerów od swojego kolektora logów lub SIEM, lub poproś zespół platformy o dostęp tylko do odczytu tam.
Kiedy coś idzie nie tak
| Objaw | Prawdopodobna przyczyna | Fix |
|---|---|---|
| Nadal odmowa dostępu po usermod | Stara sesja | Wyloguj się i zaloguj ponownie |
| Użytkownik stracił inne grupy | usermod -G bez -a | Dodaj ponownie; zawsze używaj -aG |
| journalctl pokazuje tylko własne logi użytkownika | Nie w systemd-journal (lub adm / wheel) | Dodaj grupę; nowa sesja |
| Dostęp działał wczoraj, dzisiaj nie | ACL zgubione podczas obrotu logu | Użyj Opcji 3 |
| adm nie pomaga z /var/log/secure | Pliki rodziny Red Hat są tylko dla roota | Użyj Opcji 2 lub 3 |