Как загрузить профиль AppArmor для службы, работающей в пространстве пользователя systemd

Вопрос или проблема

Я пытался загрузить профиль AppArmor для службы, которая работает в пользовательском экземпляре systemd. У меня есть два файла службы: sample.service для процесса и sample-profile-loader.service, который загружает его профиль AppArmor usr.bin.Sample. Профиль AppArmor расположен в /lib/systemd/system, а файл службы процесса – в /usr/lib/systemd/user. Обе службы включены.

[Unit] # sample-profile-loader.service
Before=sample.service
[Service]
Type=oneshot
ExecStart=/use/bin/apparmor-loader.sh 
/etc/apparmor.d/usr.bin.sample
[Install]
Wanted by=multi-user.target

[Unit] # sample.service
Requires=sample-profile-loader.service
After=sample-profile-loader.service
[Service]
Type=simple
ExecStart=/usr/bin/sample
[Install]
WantedBy=multi-user.target

После первой загрузки, когда я проверяю aa-status, профиль загружен. Но когда я выполняю systemctl restart sample.service –user, я получаю сообщение об ошибке: “Не удалось запустить sample.service. Не удалось загрузить единицу sample-profile-loader.service. Нет такого файла или каталога”.

Я искал решение в Google, но пока ничего не нашел. Будет очень хорошо, если вы сможете дать мне какой-либо совет.

Systemd предлагает эту переменную для файлов единиц AppArmorProfile=, и установите её на профиль, который у вас есть. Я не уверен насчет каталога… попробуйте узнать, как добавить пути, чтобы AppArmor мог находить профили…

Нет необходимости различать профили AppArmor для пользовательских и системных служб. Их можно вместе разместить в папке /etc/apparmor.d и загрузить в ядро с помощью apparmor_parser.sh.

Ответ или решение

Чтобы загрузить профиль AppArmor для службы, работающей в пространстве пользователя systemd, вам следует учитывать несколько ключевых моментов. Ваша текущая настройка указывает на некоторые проблемы, особенно при перезапуске службы. Вот шаги, которые могут помочь вам решить проблему:

  1. Размещение профилей AppArmor: Убедитесь, что профили AppArmor находятся в правильной директории. Обычно профили AppArmor размещаются в /etc/apparmor.d/. Не рекомендуется размещать их в каталогах systemd, так как это может привести к путанице. Переместите ваш профиль usr.bin.sample в /etc/apparmor.d/.

  2. Изменение файла службы загрузки профиля: Измените вашу службу sample-profile-loader.service, чтобы она загружала профиль напрямую из правильной директории. Вот пример, как это может выглядеть:

    [Unit]
    Before=sample.service
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/apparmor_parser -r /etc/apparmor.d/usr.bin.sample
    
    [Install]
    WantedBy=multi-user.target
  3. Использование переменной AppArmorProfile: Вместо создания отдельной службы для загрузки профиля, вы можете использовать переменную AppArmorProfile= непосредственно в вашем файле сервиса sample.service. Например:

    [Unit]
    Requires=sample-profile-loader.service
    After=sample-profile-loader.service
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/sample
    AppArmorProfile=/etc/apparmor.d/usr.bin.sample
    
    [Install]
    WantedBy=multi-user.target
  4. Обновление зависимостей: Убедитесь, что зависимости между службами указаны правильно. Если sample.service зависит от sample-profile-loader.service, то при каждом изменении профиля вам нужно перезагрузить обе службы, чтобы изменения вступили в силу.

  5. Проверка статуса: После внесения изменений перезапустите обе службы и проверьте их состояние с помощью команды:

    systemctl --user status sample.service
    systemctl --user status sample-profile-loader.service
  6. Использование команд AppArmor: Чтобы убедиться, что профиль загружен корректно, проверьте статус профиля с помощью:

    sudo aa-status
  7. Логирование и отладка: Если возникнут ошибки, воспользуйтесь журналами для получения дополнительной информации о проблеме:

    journalctl --user -xe

Следуя этим шагам, вы сможете корректно загружать профиль AppArmor для вашего сервиса, работающего в пространстве пользователя systemd. Это обеспечит стабильную работу вашего приложения с нужными ограничениями безопасности.

Оцените материал
Добавить комментарий

Капча загружается...