Configuration file is marked world-inaccessible
systemd предупреждает, когда unit-файл или файл настроек закрыт от чтения. Сам запуск при этом проходит, но такие права обычно выставлены случайно и мешают: другие администраторы не видят описание службы, а средства проверки не могут его прочитать.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Права выставлены слишком узко при создании файла
Файл, созданный с закрытыми правами, порождает предупреждение при каждой перезагрузке описаний.
-
В файле пытаются спрятать секреты
Закрытые права ставят, чтобы скрыть пароль в переменной окружения. Это не работает: окружение процесса видно и другими путями.
-
Предупреждение мешает читать журнал загрузки
Повторяющееся предупреждение при каждой перезагрузке описаний засоряет журнал и отвлекает от настоящих ошибок.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Права на ваши unit-файлы.
sudo ls -l /etc/systemd/system/*.service | head -20Какие файлы вызывают предупреждение.
journalctl -b --no-pager | grep -i world-inaccessible | tailОбщая оценка настроек безопасности службы.
systemd-analyze security myapp.service --no-pager 2>/dev/null | head -10Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Файл, созданный с закрытыми правами, порождает предупреждение при каждой перезагрузке описаний.
- Как проверить
-
Посмотрите права на файл и сообщение.
sudo ls -l /etc/systemd/system/myapp.service journalctl -b --no-pager | grep -i world-inaccessible | tail -5
- Как исправить
-
Установите обычные права чтения для всех и владельца root. Секреты в unit-файле хранить нельзя — для них есть отдельный механизм учётных данных.
sudo chmod 644 /etc/systemd/system/myapp.service
- Почему происходит
- Закрытые права ставят, чтобы скрыть пароль в переменной окружения. Это не работает: окружение процесса видно и другими путями.
- Как проверить
-
Посмотрите, нет ли секретов в описании.
sudo grep -iE "password|token|secret|key" /etc/systemd/system/myapp.service 2>/dev/null | sed "s/=.*/=(скрыто)/"
- Как исправить
-
Перенесите секреты в файл окружения с узкими правами или подавайте их через механизм учётных данных: они выдаются только процессам этой службы.
[Service] LoadCredential=api.key:/etc/myapp/api.key
- Почему происходит
- Повторяющееся предупреждение при каждой перезагрузке описаний засоряет журнал и отвлекает от настоящих ошибок.
- Как проверить
-
Посмотрите, сколько раз оно повторяется.
journalctl -b --no-pager | grep -ci world-inaccessible
- Как исправить
- Исправьте права на всех своих unit-файлах разом: предупреждение исчезнет и журнал станет читаемым.
Пример вывода
Unit-файл создан с закрытыми правами. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd[1]: /etc/systemd/system/myapp.service:1: Configuration file /etc/systemd/system/myapp.service is marked world-inaccessible. This has no effect as configuration data is accessible via APIs without restrictions. Proceeding anyway.
$ sudo ls -l /etc/systemd/system/myapp.service
-rw------- 1 root root 412 Sep 15 18:58 /etc/systemd/system/myapp.service
Связанные ошибки
- status=243/CREDENTIALS в systemd Код 243/CREDENTIALS: не удалось подготовить учётные данные службы из LoadCredential=, SetCredential= или ImportCredential=.
- Unit file is bad и ошибки разбора unit-файла systemd не может разобрать unit-файл: неизвестные параметры, ошибки в секциях, недопустимые значения. Как найти проблемную строку.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Панели и источники данных не подхватываются при запуске Описания источников и панелей не применяются: каталог недоступен службе или описания с ошибкой.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: правила .htaccess не действуют Файл .htaccess игнорируется: запрещён параметром AllowOverride, нет нужного модуля, файл не читается.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
Источники
-
systemd.unit(5)
Права на unit-файлы и доступность описаний. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на systemd 255: предупреждение появляется при правах без чтения для всех.