Вопрос или проблема
У меня здесь большая проблема, прошло 16 дней с тех пор, как я задал ее на Stackoverflow, и я не получил ответа. Вот ссылка на вопрос https://stackoverflow.com/questions/79176447/how-can-i-fix-an-apparmor-policy-prevents-this-sender-from-sending-this-message. Я провел много исследований, и не могу это решить. Вот почему я прошу вас помочь мне… Как вы можете видеть, когда я запускаю chromium --headless --disable-gpu --no-sandbox --no-pdf-header-footer --print-to-pdf="/home/johndoe/407163caf78c6deedcb8bf732e7e1326-en.pdf" 'https://files.domain.com/docs/407163caf78c6deedcb8bf732e7e1326.html' && mv '/home/johndoe/407163caf78c6deedcb8bf732e7e1326-en. pdf' '/var/www/files.domain.com/docs/' && echo 'files.transladocs.com/docs/407163caf78c6deedcb8bf732e7e1326-en.pdf'
напрямую в SSH моего ARM-сервера, он отображает свои ошибки, а затем конвертирует в PDF, но когда я пытаюсь сделать это напрямую на своем сайте, это вообще не работает. Пожалуйста, ознакомьтесь с вопросом, чтобы увидеть все детали.
Вот ошибки, которые он мне выдал:
[17035:17192:1111/053835.545588:ERROR:object_proxy.cc(576)] Не удалось вызвать метод: org.freedesktop.DBus.ListActivatableNames: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.AccessDenied: Политика AppArmor запрещает этому отправителю отправлять это сообщение этому получателю; type="method_call", sender=":1.71" (uid=1000 pid=17035 comm="/snap/chromium/2992/usr/lib/chromium-browser/chrom" label="snap.chromium.chromium (enforce)") interface="org.freedesktop.DBus" member="ListActivatableNames" error name="(unset)" requested_reply="0" destination="org.freedesktop.DBus" (bus) [17035:17192:1111/053835.604277:ERROR:object_proxy.cc(576)] Не удалось вызвать метод: org.freedesktop.DBus.ListActivatableNames: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.AccessDenied: Политика AppArmor запрещает этому отправителю отправлять это сообщение этому получателю; type="method_call", sender=":1.73" (uid=1000 pid=17035 comm="/snap/chromium/2992/usr/lib/chromium-browser/chrom" label="snap.chromium.chromium (enforce)") interface="org.freedesktop.DBus" member="ListActivatableNames" error name="(unset)" requested_reply="0" destination="org.freedesktop.DBus" (bus) 754773 байт записано в файл /home/john/407163caf78c6deedcb8bf732e7e1326-fr.pdf files.domain.com/docs/407163caf78c6deedcb8bf732e7e1326-fr.pdf
Итак, что мне нужно сделать, чтобы это окончательно исправить? Это очень мне поможет… Я совершенно заблокирован здесь…
Ответ или решение
Чтобы исправить проблему с политикой AppArmor, которая препятствует отправке сообщений от одного отправителя к другому на вашем сервере Ubuntu ARM, необходимо выполнить несколько шагов. Важно отметить, что ошибка происходит из-за ограничений AppArmor на доступ к D-Bus, где приложение Chromium пытается вызов метода ListActivatableNames. Предлагаю следовать нижеизложенной инструкции.
1. Понимание проблемы
Ошибка, с которой вы сталкиваетесь, говорит о том, что текущая политика AppArmor для Chromium ограничивает выполнение определенных D-Bus вызовов. В частности, это касается взаимодействия с системными службами, которые могут быть необходимы для корректной работы в headless-режиме.
2. Проверка статуса AppArmor
Во-первых, убедитесь, что AppArmor включен и работает на вашем сервере. Вы можете проверить статус с помощью команды:
sudo systemctl status apparmor
3. Определение политики AppArmor для Chromium
Поскольку вы используете версию Chromium, установленную через Snap, нужно узнать текущие политики, применяемые к этой версии. Это можно сделать с помощью команды:
sudo aa-status
В выводе вы можете увидеть, какие профили активны и какие из них находятся в состоянии "enforce".
4. Создание или изменение профиля
Если профиль для Chromium уже существует, вам потребуется его отредактировать. Если нет, его нужно создать. Используйте следующую команду для редактирования:
sudo nano /etc/apparmor.d/disable/snap.chromium.chromium
5. Обновление политик
Вам нужно добавить определенные разрешения, чтобы разрешить Chromium вызывать D-Bus. Добавьте следующие строки в профиль:
# Разрешить доступ к D-Bus
dbus (send, receive) peer=(label=snap.chromium.chromium)
Это разрешает вашему приложению отправлять и получать сообщения через D-Bus, что должно устранить ошибку доступа.
6. Перезагрузка профиля
Как только вы внесли изменения в профиль, необходимо перезагрузить AppArmor и профиль Chromium:
sudo apparmor_parser -r /etc/apparmor.d/snap.chromium.chromium
sudo systemctl restart apparmor
7. Тестирование изменений
Теперь запустите вашу команду Chromium снова, чтобы проверить, устранена ли ошибка:
chromium --headless --disable-gpu --no-sandbox --no-pdf-header-footer --print-to-pdf="/home/johndoe/407163caf78c6deedcb8bf732e7e1326-en.pdf" 'https://files.domain.com/docs/407163caf78c6deedcb8bf732e7e1326.html' && mv '/home/johndoe/407163caf78c6deedcb8bf732e7e1326-en.pdf' '/var/www/files.domain.com/docs/' && echo 'files.domain.com/docs/407163caf78c6deedcb8bf732e7e1326-en.pdf'
Примечания
-
Тестирование в безопасном режиме: Рекомендуется сначала протестировать профили в режиме "complain", чтобы видеть все события, которые были бы отклонены, прежде чем активировать строгий режим "enforce":
sudo aa-complain /etc/apparmor.d/snap.chromium.chromium
-
Логи: Используйте команды
dmesg
илиjournalctl -xe
для проверки логов и устранения возможных проблем.
Следуя вышеописанным шагам, вы сможете устранить проблему с политикой AppArmor и обеспечить корректную работу Chromium на вашем сервере.