Poleć stronę znajomemu




* Pola wymagane

 



formularz aplikacji






*


SLES12 ntpd i apparmor

czwartek, 2015-04-23

SLES 12 ntpd i apparmor

 

O tym co się dzieje, gdy strażnik służbista otrzyma niedokładną instrukcję.

 

Zadanie

Skonfigurować „coś” na nowym SLES12 w istniejącym środowisku.

 

Środowisko

Jakieś inne serwery.

Procedura

Dla poprawnego działania jakiejkolwiek usługi serwera, musimy mieć pewność, że czas tego serwera nie odbiega od czasu innych maszyn w sieci. Jeżeli pojawi się jakiś problem trudny do powiązania z tym tylko serwerem, sprawa synchronizacji czasu okaże się kluczowa.

Jeżeli nie możemy ufać stemplom czasowym systemu plików czy logów, to nie możemy skorelować zdarzeń na tym serwerze z innymi zdarzeniami w sieci. Niemożliwe będzie określenie następstwa czasowego czy równoległości zdarzeń w sieci.

Dlatego i z paru innych powodów czas serwera i jego synchronizacja ma kluczowe znaczenie dla administratora. Najczęściej do synchronizacji czasu wykorzystywany jest protokół NTP (Network Time Protocol). Programem używajacym tego protokołu jest demon ntpd korzystający z pliku konfiguracyjnego /etc/ntp.conf.

Konfiguracja w Yast jest prosta:

Alternatywna konfiguracja ntp

  • dodanie serwera

  • wpisanie adresu serwera lub wybór serwera publicznego z listy

  • zaznaczenie, że demon ma się uruchamiać automatycznie

- dopisanie do pliku ntp.conf linii:
server adres_lub_nazwa_serwera_czasu iburst

- włączenie automatycznego uruchamiania przy starcie
systemctl enable ntpd.service

- uruchomienie demona
systemctl start ntpd.service

Okazuje się jednak, że pojawia się problem z uruchomieniem demona.

Problem

Systemctl potrafi zawisnąć na kilka minut, po czym oznajmia że nie uruchomił ntpd.

sles12:~ # systemctl start ntpd.service

Job for ntpd.service failed. See "systemctl status ntpd.service" and "journalctl -xn" for details.

Sprawdzenie stanu usługi może być trochę mylące:

sles12:~ # systemctl status ntpd.service

ntpd.service - NTP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled)
Active: activating (auto-restart) (Result: timeout) since śro 2015-03-25 12:51:51 CET; 1min 22s ago
Docs: man:ntpd(1)
Process: 1764 ExecStart=/usr/sbin/start-ntpd start (code=exited, status=0/SUCCESS)

Trzeba zwrócić uwagę na wynik działania systemd zaraz za słowem Active:

Stan usługi jest określony jako activating (auto-restart) (Result: timeout)

Rzut oka na definicję usługi w /usr/lib/systemd/ntpd.service

sles12:~ # cat /usr/lib/systemd/system/ntpd.service

[Unit]
Description=NTP Server Daemon
Documentation=man:ntpd(1)
After=nss-lookup.target

Wants=network.target
After=network.target

[Service]
Type=forking
PIDFile=/var/run/ntp/ntpd.pid
ExecStart=/usr/sbin/start-ntpd start
RestartSec=11min
Restart=always

[Install]
WantedBy=multi-user.target

W razie problemów systemd restartuje ntpd co 11 minut do skutku. W razie przypadkowego wyłączenia demona będzie to skuteczne. W naszym przypadku nie pomoże. Systemd będzie restartował demona co 11 minut, ale nie wpłynie to na jego działanie. Musimy szukać dalej.

 

 

 

 

sles12:~ # journalctl -xn

-- Logs begin at śro 2015-03-25 12:37:35 CET, end at śro 2015-03-25 12:51:51 CET. --
mar 25 12:50:21 sles12 ntpd[1778]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
mar 25 12:50:21 sles12 ntpd[1778]: Listen and drop on 1 v6wildcard :: UDP 123
mar 25 12:50:21 sles12 ntpd[1778]: Listen normally on 2 lo 127.0.0.1 UDP 123
mar 25 12:50:21 sles12 ntpd[1778]: Listen normally on 3 eth0 192.168.5.72 UDP 123
mar 25 12:50:21 sles12 ntpd[1778]: Listen normally on 4 eth0 192.168.3.72 UDP 123
mar 25 12:50:21 sles12 ntpd[1778]: peers refreshed
mar 25 12:50:21 sles12 ntpd[1778]: Listening on routing socket on fd #21 for interface updates
mar 25 12:50:21 sles12 kernel: type=1400 audit(1427284221.355:44): apparmor="DENIED" operation="mknod" parent=1
mar 25 12:50:47 sles12 kernel: type=1400 audit(1427284247.355:45): apparmor="DENIED" operation="file_mmap" paren
mar 25 12:51:51 sles12 systemd[1]: Failed to start NTP Server Daemon.
-- Subject: Unit ntpd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ntpd.service has failed.
--
-- The result is failed.
lines 1-18/18 (END)


Journalctl pokazuje przyczynę problemu. W logu pojawiają się 2 linie z tekstem apparmor=”DENIED”. Widać, że demon zaczyna działać, zaczyna słuchać na interfejsach lo i eth0. Później chce wykonać 2 operacje na które nie zgadza się apparmor – skutek znamy. Naprawa polega na zmodyfikowaniu profilu apparmor dla programu ntpd. Najwygodniej zrobic to programem logprof, który zanalizuje log i zaproponuje zmiany w profilu.

sles12:~ # logprof

Reading log entries from /var/log/messages.
Updating AppArmor profiles in /etc/apparmor.d.
Enforce-mode changes:

Profile: /usr/sbin/ntpd
Path: /run/nscd/group
Mode: r
Severity: unknown

[1 - /run/nscd/group]
(A)llow / [(D)eny] / (G)lob / Glob w/(E)xt / (N)ew / Abo(r)t / (F)inish / (O)pts

Adding /run/nscd/group r to profile.

Profile: /usr/sbin/ntpd
Path: /var/lib/ntp/var/run/ntp/ntpd.pid
Mode: w
Severity: unknown

[1 - /var/lib/ntp/var/run/ntp/ntpd.pid]
(A)llow / [(D)eny] / (G)lob / Glob w/(E)xt / (N)ew / Abo(r)t / (F)inish / (O)pts

Adding /var/lib/ntp/var/run/ntp/ntpd.pid w to profile.

 = Changed Local Profiles =
The following local profiles were changed. Would you like to save them?

 [1 - /usr/sbin/ntpd]
(S)ave Changes / [(V)iew Changes] / Abo(r)t

Writing updated profile for /usr/sbin/ntpd.

Przy korzystaniu z tego programu trzeba zachować ostrożność i zgadzać się wyłącznie na takie zmiany, które są niezbędne dla naszego programu. Może się zdarzyć, że na naszym serwerze pojawi się złośliwy program, a my radośnie pozwolimy mu na swobodne działanie. W naszym przypadku ntpd chce odczytywać dane programu nscd I zapisywać swój PID w pliku. Możemy się zgodzić na proponowane zmiany. Po zapisaniu zmian możemy uruchomić usługę.

sles12:~ # systemctl restart ntpd.service

sles12:~ # systemctl status ntpd.service

ntpd.service - NTP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled)
Active: active (running) since śro 2015-03-25 12:57:46 CET; 4s ago
Docs: man:ntpd(1)
Process: 1831 ExecStart=/usr/sbin/start-ntpd start (code=exited, status=0/SUCCESS)
Main PID: 1843 (ntpd)
CGroup: /system.slice/ntpd.service
└─1843 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -i /var/lib/ntp -c /etc/ntp.conf

mar 25 12:57:46 sles12 start-ntpd[1831]: Starting network time protocol daemon (NTPD)
mar 25 12:57:46 sles12 ntpd[1843]: proto: precision = 0.168 usec
mar 25 12:57:46 sles12 ntpd[1843]: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16
mar 25 12:57:46 sles12 ntpd[1843]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
mar 25 12:57:46 sles12 ntpd[1843]: Listen and drop on 1 v6wildcard :: UDP 123
mar 25 12:57:46 sles12 ntpd[1843]: Listen normally on 2 lo 127.0.0.1 UDP 123
mar 25 12:57:46 sles12 ntpd[1843]: Listen normally on 3 eth0 192.168.5.72 UDP 123
mar 25 12:57:46 sles12 ntpd[1843]: Listen normally on 4 eth0 192.168.3.72 UDP 123
mar 25 12:57:46 sles12 ntpd[1843]: peers refreshed
mar 25 12:57:46 sles12 ntpd[1843]: Listening on routing socket on fd #21 for interface updates

sles12:~ #

Tym razem wszystko działa tak jak tego oczekiwaliśmy.

Apparmor jest programem zabezpieczajacym komputer przed nieprawidłowym działaniem innych programów. Dla kazdego chronionego programu zdefiniowany jest profil w którym zapisano co ten program może robić. Określa się jakie pliki czy kartoteki mogą być odczytywane i gdzie program może tworzyc swoje pliki. Każda próba działania poza zapisanymi w profilu jest blokowana. Apparmor jest domyślnie włączany w SLES12.


< powrót