В настоящее время я пытаюсь усовершенствовать свою почтовую систему, разрешив серверам, получившим от меня почту в течение последних десяти секунд, выполнять поиск по идентификатору. В то время как необходимые правила iptables работают безупречно, я сталкиваюсь с проблемами с установленным пакетом authd.
Вызов in.authd
из командной строки дает желаемые результаты:
# in.authd -t60 --xerror --os -E 993,53558
993 , 53558 : USERID : OTHER :[U2FsdGVkX19EFvZ6dxXLJJl2oKKW/PVOKmX5ER0WWWs=]
Однако при попытке сделать то же самое через сетевой сокет я получаю задержку до 10 секунд, за которой следует ошибка:
# time echo 993, 53558 | nc localhost 113
993 , 53558 : ERROR :NO-USER
real 0m5.036s
user 0m0.003s
sys 0m0.007s
Эта задержка заставила меня предположить, что возникли проблемы с правами, что привело к таймауту. Если посмотреть на исходный код authd, это может произойти, если чтение из /proc/net/tcp*
завершится неудачно или если поиск в этих файлах будет повторяться. Но:
# finger ident
Login: ident Name:
Directory: / Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
# id ident
uid=98(ident) gid=98(ident) groups=98(ident)
В свете этого, вызов in.authd
от имени пользователя ident работает как ожидалось:
# sudo -u ident in.authd -t60 --xerror --os -E 993,53558
993 , 53558 : USERID : OTHER :[U2FsdGVkX1/CxIcvTsEmTnhLSGjnwZ/X9TCwQ4ovZXk=]
# ls -alZ /proc/net/tcp*
-r--r--r--. root root system_u:object_r:proc_net_t:s0 /proc/net/tcp
-r--r--r--. root root system_u:object_r:proc_net_t:s0 /proc/net/tcp6
Здесь нет ничего подозрительного:
# grep ident /var/log/audit/audit.log | audit2why
Nothing to do
# grep auth /var/log/audit/audit.log | audit2why
Nothing to do
У меня нет идей. Это также происходит, когда я разрешаю in.authd
запускаться от имени root. journalctl
не слишком полезен, так как он просто регистрирует переход рассматриваемого устройства в состояние отказа:
# journalctl -ln5 --unit=auth@*
systemd[1]: Started Authd Ident Protocol Requests Server ([::1]:55841).
systemd[1]: Starting Authd Ident Protocol Requests Server ([::1]:55841)...
systemd[1]: auth@7-::1:113-::1:55841.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Unit auth@7-::1:113-::1:55841.service entered failed state.
systemd[1]: auth@7-::1:113-::1:55841.service failed.
Перевод in.authd
в режим "отладки" (если это можно так назвать) не дает никакой дополнительной информации. Мне не хватает принудительного указания имени пользователя через --username
, поскольку меня больше волнует задержка, чем правильность вывода. Конечно, в наше время массового хостинга виртуальных пользователей, возвращаемые значения вряд ли будут корректными, но мне очень нравится идея возвращать что-то значимое. Любая помощь будет принята с благодарностью.
Пусть другие не попадутся в ту же ловушку. На самом деле все нормально. Из раздела тестирования документации authd:
Выполните « telnet localhost auth » и введите два порта, разделенные запятой. Два выбранных порта должны иметь внешний адрес localhost или 127.0.0.1, а также соответствующий локальный адрес. В противном случае будет возвращена ошибка NO-USER.