Strona główna
» Jak
»
Zbuduj niestandardowy profil AppArmor w systemie SUSE Linux
Zbuduj niestandardowy profil AppArmor w systemie SUSE Linux
Firma SUSE ogłosiła SLES 16.0 4 listopada 2025 r., w którym SELinux zastąpił AppArmor jako domyślną, obowiązkową platformę kontroli dostępu. Jeśli na serwerze działa SLES 16, nie zakładaj, że AppArmor jest zainstalowany lub aktywny: przed użyciem tych poleceń sprawdź, jaka platforma jest obsługiwana przez daną instalację. Poniższa procedura jest zgodna z dokumentacją AppArmor dla SLES 15 SP7 firmy SUSE, w której AppArmor jest domyślnie zainstalowany i uruchomiony.
W systemie SLES 15 SP7 praktyczną ścieżką dla aplikacji niestandardowej jest utworzenie aa-genprofprofilu startowego, sprawdzenie aplikacji w trybie narzekania, przejrzenie każdego zarejestrowanego żądania, a następnie potwierdzenie, że profil wymusza. W przykładzie użyto hipotetycznego pliku wykonywalnego w /usr/local/bin/report-worker; należy go zastąpić rzeczywistą ścieżką wykonywalną aplikacji.
Zanim zaczniesz
Profile AppArmor to polityki tekstowe przechowywane w /etc/apparmor.d. apparmor-utilsPakiet dostarcza narzędzia do profilowania. Sprawdź hosta i zidentyfikuj rzeczywisty plik wykonywalny, w tym czy jednostka systemd uruchamia wrapper lub proces potomny:
Ilustrujący widok terminala polecenia używanego do potwierdzenia, że AppArmor jest aktywny przed pracą nad profilem.
SUSE domyślnie włącza AppArmor w instalacjach SLES 15. Jeśli brakuje narzędzi lub pełnego wzorca AppArmor, zainstaluj go za pomocą sudo zypper in -t pattern apparmor. Jeśli AppArmor nie jest aktywny, przed profilowaniem należy ustalić przyczynę, zamiast zakładać, że sam plik profilu zapewnia ochronę. Profil jest dołączony do ścieżki wykonywalnej; profilowanie wrappera, gdy rzeczywiste obciążenie jest uruchamiane jako inny plik binarny, może spowodować, że ważny proces nie będzie ograniczony.
Utwórz i udoskonal profil
Uruchom generator. Zatrzymaj aplikację, jeśli jest już uruchomiona, a następnie uruchom generowanie profilu:
Ilustrujący widok terminala aa-genprof rozpoczynającego profil nauki dla przykładowego pliku wykonywalnego.
Nazwa usługi jest przykładowa. Użyj rzeczywistej nazwy jednostki lub pomiń polecenie stop, jeśli program nie jest uruchomiony. aa-genprofTworzy profil przybliżony, gdy nie istnieje, przełącza go w tryb narzekania (uczenia się), ponownie ładuje i oznacza dziennik. Tryb narzekania rejestruje żądania niezgodne z polityką, ale je zezwala; jest to tymczasowy stan uczenia się, a nie wymuszania.
Przećwicz zachowanie rzeczywistej aplikacji. Pozostaw generator otwarty. W innym terminalu uruchom usługę i uruchom reprezentatywne zadania lub funkcje:
Ilustrujący widok terminala pokazujący uruchomienie przykładowej usługi i obserwowanie jej aktywności podczas działania w trybie uczenia się.
Obejmują one normalny rozruch, oczekiwane ścieżki wejściowe i wyjściowe, zaplanowane zadania, obsługę błędów oraz wszelkie programy pomocnicze uruchamiane przez aplikację. Profil może zapamiętywać jedynie żądania generowane podczas testu. Nie należy używać obciążeń wrażliwych na środowisko produkcyjne wyłącznie do generowania zdarzeń; preferowane jest bezpieczne środowisko testowe i reprezentatywne dane testowe.
Przejrzyj każde żądanie dostępu. Wróć do aa-genprofi naciśnij S, aby przeskanować oznaczony zakres logów. W przypadku każdego monitu zdecyduj, czy aplikacja rzeczywiście potrzebuje danego pliku, funkcji lub przejścia między programami potomnymi. Zezwól na najwęższą użyteczną ścieżkę i uprawnienia. Zaakceptuj abstrakcję, gdy dokładnie obejmuje ona typowe zadanie; używaj globu tylko wtedy, gdy dopasowane pliki mają te same wymagania dotyczące zaufania i dostępu. Odrzuć lub pomiń żądania, które są przypadkowe lub niewyjaśnione.
Ilustrujący widok terminala aa-logprof, interaktywnego narzędzia do przeglądania zarejestrowanych żądań dostępu.
Zwróć szczególną uwagę na żądania wykonania. Nieograniczone przejście może pozwolić dziecku na ominięcie polityki rodzica; stosuj je tylko wtedy, gdy istnieje uzasadniona potrzeba projektowa. Powtórz ćwiczenie i cykl skanowania po dodaniu prawidłowych reguł. Gdy profil obejmie testowane zachowanie, zakończ generator. SUSE zauważa, że ukończenie nowego aa-genprofcyklu uczenia zazwyczaj przełącza profil w tryb wymuszania.
Sprawdź wygenerowaną politykę. W tym przykładowym pliku ścieżka, konwencja nazewnictwa SUSE konwertuje ukośniki w ścieżce wykonywalnej na kropki, generując /etc/apparmor.d/usr.local.bin.report-worker. Sprawdź wynik zamiast traktować wygenerowane reguły jako automatycznie bezpieczne:
sudo less /etc/apparmor.d/usr.local.bin.report-worker
Ilustrujący widok terminala otwierającego plik profilu, którego nazwa jest zgodna ze ścieżką wykonywalną.
Sprawdź, czy profil nadaje nazwę docelowemu plikowi wykonywalnemu, używa wymaganych elementów include i przyznaje dostęp tylko do konfiguracji, danych, logów, gniazd i programów pomocniczych, których aplikacja faktycznie potrzebuje. Unikaj ogólnych reguł, takich jak nieograniczony dostęp do całego /drzewa lub możliwość zapisu, tylko po to, by uciszyć odmowę. Aplikacja nadal opiera się na standardowej własności i uprawnieniach systemu Unix; AppArmor dodaje osobną warstwę ograniczeń.
Ustaw jawnie zamierzony tryb. Po sprawdzeniu wymuś profil dla programu niestandardowego:
sudo aa-enforce /usr/local/bin/report-worker
Ilustrujący widok terminala programu aa-enforce stosującego ograniczenia profilu do przykładowego programu.
Jeśli edytowałeś profil ręcznie po zamknięciu generatora, załaduj ponownie zestaw profili za pomocą sudo systemctl reload apparmor. Dokumenty SUSE ładują się ponownie jako profile ponownego skanowania bez odblokowywania uruchomionych procesów. Uruchom ponownie usługę aplikacji, aby nowa polityka została zastosowana do jej procesu.
Zweryfikuj wniosek objęty egzekwowaniem
Uruchom ponownie te same zadania reprezentatywne, gdy profil jest w trybie wymuszania. Sprawdź, czy usługa uruchamia się, odczytuje odpowiednie dane wejściowe, zapisuje oczekiwane dane wyjściowe i może wykonywać wymagane operacje pomocnicze lub sieciowe. Następnie sprawdź stan profilu i ostatnie komunikaty jądra:
Ilustrujący widok terminala, przedstawiający sprawdzanie statusu, służące do potwierdzenia, że niestandardowy profil został załadowany w trybie wymuszania.Ilustrujący widok terminala filtrowania dzienników jądra dla zdarzeń AppArmor podczas weryfikacji.
Niestandardowy plik wykonywalny powinien być widoczny jako załadowany i w trybie egzekwowania. Odmowy AppArmor w dzienniku jądra identyfikują żądania zablokowane przez politykę; należy ich używać do diagnozowania rzeczywistej awarii aplikacji, a nie jako powodu do zezwalania na każdą zarejestrowaną ścieżkę. W przypadku uzasadnionego braku uprawnienia, uruchom sudo aa-logprof, zapoznaj się z sugestią, zaktualizuj regułę w wąskim zakresie, przeładuj, jeśli edytowałeś ją ręcznie, i ponownie uruchom ścieżkę aplikacji, której dotyczy problem.
W przypadku usługi działającej w sposób ciągły, której profilowanie musi obejmować restarty lub dłuższą obserwację, SUSE dokumentuje oddzielny, systemowy przepływ pracy, wykorzystujący aa-autodep, aa-complain, oraz powtarzane aa-logprofskanowanie. Metoda autonomiczna aa-genprofjest prostsza, gdy przebieg uczenia się może pozostać otwarty przez cały test. Żaden z przepływów pracy nie jest w stanie wywnioskować zachowania aplikacji, która nigdy nie została przetestowana, dlatego należy regularnie sprawdzać profil w przypadku zmian oprogramowania lub konfiguracji.