Назад | Перейти на главную страницу

ntpd работает как не root, но исходящие пакеты соответствуют uid 0

Я установил цепочку ВЫХОДОВ iptables по умолчанию на DROP пакеты. Затем я создал правило брандмауэра, позволяющее только пользователю ntp отправлять пакеты ntp:

iptables -A OUTPUT -m owner --uid-owner ntp -p udp --dport 123 -j ACCEPT

Однако каждые 10-20 минут я видел:

ntpd[27769]: sendto(<snip>) (fd=22): Operation not permitted

Затем я удалил -m owner --uid-owner ntp часть правила и добавила перед ней правило журнала:

iptables -A OUTPUT -p udp --dport 123 -j LOG --log-level debug \
    --log-prefix "Spotted a NTP packet: " --log-uid

ntpd снова начал работать, и в кольцевом буфере ядра я вижу:

Spotted a NTP packet: <snip> PROTO=UDP SPT=123 DPT=123 LEN=56 UID=0

Я использую --log-uid переключиться на LOG цель, и ntpd запущен как пользователь ntp (uid = 38):

# ps auxf | grep ntpd
ntp      27769  0.0  1.0   4512  4508 ?        SLs  Jan04   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid

Тем не менее, журнал показывает UID=0. Я уверен, что ничто больше в системе не отправляет пакеты ntp, и поскольку я больше не получаю Operation not permitted, Я уверен, что это на самом деле ntpd это отправка пакета.

Я думаю, что меня устраивает то, что я не соответствую пользователю ntp для этих пакетов; тем не мение, может кто-нибудь объяснить, почему iptables не показывает UID=38 для этих пакетов?

Чтобы программа могла использовать порт меньше 1024, она должна быть root. Многие приложения, такие как NTP, запускаются, открывают порт как root, а затем сбрасывают привилегии определенной учетной записи для всего остального.

В вашем правиле iptables есть ошибка:

iptables -A OUTPUT -m owner --uid-owner ntp -p udp --dport 123 -j ACCEPT

Если вы используете --uid-owner необходимо определить uid - числовое значение.
Для названия программы нужен другой вариант: --cmd-владелец. Правильное правило:

iptables -A OUTPUT -m owner --cmd-owner ntp -p udp --dport 123 -j

Подробное объяснение Вы можете прочитать в отличном книга по Оскар Андреассон.