Вопрос или проблема
До недавнего времени я использовал Ubuntu 22. Будучи параноиком, мне нравится размещать свои данные в песочнице. Поэтому я запускал VS Code от имени другого пользователя через 0install (0install run https://apps.0install.net/gui/vs-code.xml
). Мне пришлось преодолеть несколько трудностей: установить переменную окружения DISPLAY
и скопировать “магический” куки к другому пользователю (с помощью xauth extract - "$DISPLAY"
и xauth merge -
). Но я был готов заплатить такую цену.
Затем вышла Ubuntu 24. Теперь, когда я пытаюсь запустить команду 0install, ничего не происходит, и она завершается с кодом 0. С аргументом --verbose
я получаю следующее:
[32146:0916/205416.674638:FATAL:setuid_sandbox_host.cc(158)] Вспомогательный двоичный файл SUID песочницы найден, но неправильно настроен. Вместо того чтобы работать без песочницы, я сейчас прерываю выполнение. Вам нужно убедиться, что /home/kevin/.cache/0install.net/implementations/sha256new_PLTHUJ6DVZ2RVZROAUFY7ANZGID5GEFNTKSAPKK4523ZXWBWZGZA/chrome-sandbox принадлежит root и имеет права 4755.
(Этот файл принадлежит kevin и имеет права 555.)
В интернете мне говорят, что это связано с изменением настроек AppArmor в Ubuntu 24 ( https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#security-improvements, раздел “Улучшения безопасности”). Я видел несколько различных предложений о том, как ослабить требования к безопасности, но я не понимаю AppArmor достаточно хорошо, чтобы убедить себя, что хотя бы одно из них все еще достаточно защищенное.
В то же время в журнале dmesg появляются сообщения:
kern :notice: [ 2796.519919] audit: type=1400 audit(1726516456.670:263): apparmor="AUDIT" operation="userns_create" class="namespace" info="Создание Userns - переход профиля" profile="unconfined" pid=32146 comm="code" requested="userns_create" target="unprivileged_userns"
kern :notice: [ 2796.520853] audit: type=1400 audit(1726516456.671:264): apparmor="DENIED" operation="capable" class="cap" profile="unprivileged_userns" pid=32148 comm="code" capability=21 capname="sys_admin"
kern :info : [ 2796.524131] traps: code[32146] trap int3 ip:609f9bb5c60a sp:7fff27a839d0 error:0 in code[609f9832c000+7e11000]
Я не совсем понимаю, что означают эти журналы, и не нашел документации нигде. Похоже, что он не может вызвать возможность “sys_admin”. Согласно man capabilities
, “sys_admin” является переоцененной возможностью; возможно, это пример ее использования там, где более специфическая возможность была бы более уместной. В любом случае я не хочу предоставлять своему процессу такие широкие полномочия.
Я не понимаю, почему требуется проверка разрешений. Единственная причина, которую я могу предположить, – это то, что это необходимо для X11. Я также пробовал xhost
без успеха. Я предоставлю больше деталей, если вы думаете, что X11 является виновником.
ОБНОВЛЕНИЕ: Режим Portable для VS Code ( https://code.visualstudio.com/docs/editor/portable ) делает точно то же самое.
Ответ или решение
К сожалению, преобразование кода на основе AppArmor из версии Ubuntu 22 в Ubuntu 24 может оказаться довольно трудоемкой задачей, особенно если вы стремитесь сохранить уровень безопасности, которому следовали ранее. В этом ответе я подробно объясню основные шаги, которые помогут вам адаптировать ваши профили AppArmor и исправить проблему запуска Visual Studio Code через 0install.
1. Понимание проблемы
Судя по сообщению об ошибке, проблема заключается в том, что chrome-sandbox в вашем каталоге кэша не имеет правильных разрешений и владельца, необходимых для работы песочницы. Вывод FATAL: setuid_sandbox_host.cc(158)
указывает, что бинарный файл должен быть запущен с привилегиями superuser для управления безопасностью.
2. Исправление прав на файл
Чтобы исправить это, выполните следующие команды:
sudo chown root:root /home/kevin/.cache/0install.net/implementations/sha256new_PLTHUJ6DVZ2RVZROAUFY7ANZGID5GEFNTKSAPKK4523ZXWBWZGZA/chrome-sandbox
sudo chmod 4755 /home/kevin/.cache/0install.net/implementations/sha256new_PLTHUJ6DVZ2RVZROAUFY7ANZGID5GEFNTKSAPKK4523ZXWBWZGZA/chrome-sandbox
Эти команды изменят владельца файла на root
и зададут правильные права доступа. Это поднимает уровень безопасности и позволяет ему работать в режиме SUID.
3. Настройка профилей AppArmor
В Ubuntu 24 произошли изменения в правилах AppArmor, и вам может понадобиться создать или отредактировать профиль для 0install или VS Code. Проверьте, какой профиль используется:
sudo aa-status
Если ваш процесс работает с профилем unconfined
, возможно, вам стоит перейти на более жесткий профиль. Вы можете создать свой собственный профиль, основываясь на существующем:
- Создайте новый профиль для 0install:
sudo aa-genprof /path/to/0install
-
Запустите 0install и выполните необходимые действия, чтобы AppArmor собрал информацию о необходимых разрешениях.
-
После завершения тестирования, добавьте необходимые правила и активируйте профиль:
sudo aa-logprof
4. Избегайте излишних прав
Вы упомянули о нежелании предоставлять перенастроенному профилю такие права, как sys_admin
. Это правильно, и вам стоит убедиться, что ваш профиль AppArmor конфигурируется так, чтобы он не запрашивал избыточные разрешения.
5. Механизмы X11 и XAUTH
Убедитесь, что переменная окружения DISPLAY
устанавливается правильно и что команды xauth
выполнены корректно. Например:
xauth extract - "$DISPLAY" | xauth merge -
Вы можете также проверить разрешения X сервера:
xhost +SI:localuser:kevin
Это должно позволить вашему другому пользователю получить доступ к X серверу.
6. Отладка и логирование
Если ошибки продолжают возникать, вы можете исследовать логи системы для выявления дополнительных проблем:
dmesg | grep apparmor
Это покажет вам любые дополнительные ошибки или проблемы с AppArmor, которые могут возникать при запуске приложения.
Заключение
Миграция от Ubuntu 22 к 24 может требовать некоторой дополнительной настройки, особенно в контексте безопасности. Следуя приведенным выше шагам, вы сможете адаптировать ваши настройки, чтобы ваши приложения продолжали работать в безопасном и изолированном окружении. Не забывайте, что важно поддерживать баланс между безопасностью и функциональностью, и в случае возникновения дополнительных вопросов лучше проконсультироваться с сообществом или документацией.