Configuration file is not executable — Ошибка прав доступа к unit-файлу
Архитектура ошибки и симптомы сбоя
Предупреждение «Configuration file /etc/systemd/system/app.service is not executable (or has executable bit set)» (сопровождающееся «Configuration file has wrong permissions») регистрируется парсером systemd Unit Parser. Ошибка возникает, когда unit-файл конфигурации службы ошибочно имеет установленный бит исполнения (executable bit: chmod +x / 0755) либо файл принадлежит не root, а другому пользователю. С точки зрения безопасности systemd требует, чтобы декларативные конфигурации имели права строго 0644.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| Unit File Permissions | Required: 0644 (-rw-r--r--) | Конфигурационные файлы systemd являются декларативным текстом (INI), а не скриптами. |
| Executable Bit Flag | Invalid: +x (0755 / 0777) | Установка исполняемого бита воспринимается парсером как потенциальная уязвимость безопасности. |
| Owner / Group | root:root | Файлы в /etc/systemd/system/ должны контролироваться строго суперпользователем. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка текущих прав доступа к unit-файлам
# Просмотр прав на unit-файлы в каталоге /etc/systemd/system/:
ls -la /etc/systemd/system/*.serviceЕсли вы видите права -rwxr-xr-x (0755) или -rwxrwxrwx (0777), их необходимо немедленно исправить.
Сценарий 2: Приведение прав доступа к эталонным значениям systemd (0644)
# Установка корректного владельца root:root:
sudo chown root:root /etc/systemd/system/app.service
# Снятие исполняемого бита и установка прав 644:
sudo chmod 644 /etc/systemd/system/app.service
# Массовое исправление всех кастомных юнитов:
sudo find /etc/systemd/system/ -name "*.service" -exec chmod 644 {} \;
sudo find /etc/systemd/system/ -name "*.service" -exec chown root:root {} \;Сценарий 3: Перезагрузка конфигураций менеджера systemd
# Применение исправленных прав парсером:
sudo systemctl daemon-reload
# Проверка статуса службы без предупреждений:
sudo systemctl status app.serviceITSTM проведет аудит Ansible-плейбуков и настроит безопасные политики деплоя systemd-инфраструктуры.
Частые вопросы (FAQ)
Почему unit-файл не должен быть исполняемым (executable)?
Unit-файлы — это статические конфигурационные файлы формата INI. Исполняемым должен быть только бинарный файл или скрипт, указанный внутри директивы ExecStart=, а не сам .service файл.
Может ли systemd полностью отказаться запускать сервис с правами 0777?
В новых версиях systemd (v245+) менеджер может блокировать загрузку юнитов с небезопасными правами (World-Writable) для предотвращения локального повышения привилегий.
Где должны располагаться системные и пользовательские unit-файлы?
Системные файлы администратора располагаются в /etc/systemd/system/, пакетные файлы дистрибутива — в /lib/systemd/system/, а файлы пользовательских сессий — в ~/.config/systemd/user/.
Какая команда безопасно создает новый unit-файл?
Используйте команду sudo systemctl edit --force --full my_app.service, которая автоматически создаст файл с правильными правами 0644.