Права на файл служба проходит — её останавливает отдельная проверка. Это AppArmor: поверх обычных прав он разрешает конкретной программе только то, что записано в её профиле.
Профиль службы — файл в /etc/apparmor.d/: путь к программе и список путей, которые ей можно читать и писать. У профиля два режима:
- enforce — всё, чего в профиле нет, запрещается;
- complain — ничего не запрещается, нарушения только пишутся в журнал.
sudo aa-status показывает загруженные профили и их режимы. Переключают режим две команды:
В complain служба работает, даже если профиль не разрешает путь, — так видно, чего ей не хватает, не ломая доступ насовсем.
complain оставляют только на время отладки: в нём профиль ничего не защищает. Разобрался — верни enforce.
Переведи профиль в complain
Переведи профиль службы docsrv (/etc/apparmor.d/usr.local.bin.docsrv) в режим complain, не трогая сам профиль. После этого служба должна отдавать index.html по http://127.0.0.1:8097/index.html.
Цели · 0 из 2
- Перевести профиль docsrv в complain ещё не выполнена
- Добиться, чтобы служба отдавала страницу ещё не выполнена
Профиль docsrv ты перевёл в complain, и служба отдаёт страницы из /srv/docs. Путь в профиль ты не добавлял. Что будет, если вернуть профиль в enforce?
-
Служба запускается при любом режиме профиля; в enforce ей лишь отказывают в непрописанном пути.
systemctl is-active lab-docsостанется active. -
sudo aa-enforceпереключает профиль в любую сторону. После негоaa-statusпокажет docsrv в enforce. -
complain ничего не добавляет в профиль, только логирует. В enforce непрописанный
/srv/docsснова закрыт:curlвернёт «Permission denied».
В enforce непрописанный путь /srv/docs снова закрыт — complain профиль не менял.