Справа SELinux
Якщо одна і та ж команда sudo повільна лише в демон і швидка в командному рядку, то вона, ймовірно, викликана SELinux . (SELinux = модуль ядра Linux з посиленою безпекою NSA, увімкнено у Fedora за замовчуванням.)
Типовим випадком є http-сервер та спеціальний скрипт для управління сервером, обмежений у sudoers
:
apache ALL=(root_or_user) NOPASSWD: /full/path/the_safe_command
У цьому випадку типово, що про журнал аудиту про SELinux не повідомляється ausearch -m avc -ts today
, але сценарій працює швидко, якщо ми тимчасово відключимо примусове виконання setenforce 0
. (а потім включити назад setenforce 1
)
Єдині відповідні повідомлення в системному журналі (journalcrl) - це після затримки на 25 секунд:
... sudo [...] pam_systemd (sudo: session): Не вдалося створити сеанс: Не отримав відповіді. До можливих причин можна віднести: віддалений додаток не надіслав відповідь, політика безпеки шини повідомлень заблокувала відповідь, минув час очікування відповіді або порушено мережеве з'єднання.
... sudo [...]: pam_unix (sudo: session): сеанс відкритий для root користувача користувачем (uid = 0)
Журнал усіх заглушених "dont-audit" повідомлень SElinux можна вмикати semodule -DB
та знову відключати semodule -B
.
(Я сподіваюся, що незабаром я напишу модуль політики SELinux для цього випадку тут, або метод із цієї відповіді можна використовувати.)