-
-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bubblejail and AppImage #8
Comments
FUSE может легко повесить систему так что это правильно что bwrap не дает монтирование. AppImage можно распаковать и смонтировать а потом пропустить в sandbox. https://docs.appimage.org/user-guide/run-appimages.html#mount-or-extract-appimages
Вроде как Если добавить опцию чтобы использовать алтенативный |
Повесить именно систему или приложения, которые обращаются к точке монтирования? Просто я с таким не сталкивался. Если приложения, то и ладно, т.к. приложение к точке монтирование будет обращаться только одно, собственно что внутри AppImage. Знаю, что можно распаковать и потом просто запускать
Мне кажется неплохим решением добавить в Bubblejail что-то вроде helper'ов, которые в зависимости от исполняемого файла будут делать что-то до и после запуска. Может быть это оформить как сервис? Насколько я понял из исходников, сервисы в Bubblejail могут что-то делать кроме простого формирования аргументов (не со всеми нюансами я ещё разобрался). И тогда монтировать AppImage куда-нибудь в Почему я вообще стал разбираться с Bubblejail? Я совсем недавно думал о чём-то аналогичным. Правда с упором на запуск именно AppImage, хотя не только. И хотел что-то такое написать, вероятно с использованием |
Если AppImage изображение идет с полноценым /usr (все библиотеки) который надо смонтировать где-то а потом использовать внутри sandbox вместо системного. Я завтра что-то попробую.
Они только форматируют аргументы но могут это делать умно. |
Это понятно. Я хочу сделать монтирование прозрачным и удобным для пользователя, чтобы не нужно было делать вручную. Поэтому и спросил про сервисы, с точки зрения того, в какую часть Bubblejail лучше добавить функции для AppImage.
Не уверен, что из системного
Прошу прощения. На русском точно удобно общаться? Мне показалось, что это перевод с помощью переводчика в интернете. Можно вернуться на английский, если на русском сложно. Конечно, при условии, что мой английский достаточно понятен. (знаю, что английский у меня не очень хорош) |
Я провел исследование почему FUSE не работает. Дело в том что любая FUSE система использует
Скорее всего это будет в отдельной программе. Для пользователя комманда примерно будет
Я технический жаргон только на англиском знаю так что мне приходится подбирать слова которые не совсем привычными могут быть. |
Возможно я недостаточно хорошо знаю, как работает FUSE. Но я попробовал с помощью
Насколько я понимаю работу пространств имён в Linux, SUID тут не требуется. Можно создать пространство имён, внутри которого программа будет работать с правами root пользователя, а вне его это будет обычный пользователь или вообще никто ( Пример того, что
Возможно ли с помощью |
Интересно, думаю это добавили в 4.18 https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.18-FUSE
Можно но потом не переключишся на обычного пользователя. Я думаю опять изза PR_SET_NO_NEW_PRIVS. Я почти закончил прототип который монтирует извне. |
Оказывается В этой branch 3 commit. https://github.com/igo95862/bubblejail/tree/appimage 03a5c65 добавляет специальную переменую. 1015666 Вот Subsurface из образа. |
У меня получилось монтирование средствами самого AppImage внутри песочницы. Для этого я добавил аргументы |
Я добавил опцию Вот как будет выглядить запуск.
Не рекомендую так как bubblejail маскирует имя пользователя. Домашняя папка имеет имя пользователя. Лучше перемонтировать appimage гдето внути и запустить оттуда. |
А мы можем добавить
В принципе пользователь с UID 0 не обязательно должен называться root, может как угодно. Насколько я знаю.
Я согласен с тем, что монтирование AppImage вне песочницы имеет преимущества. Например, можно монтировать с использованием драйвера ядра, что повысит производительность, либо использовать какие-то другие опции. С другой стороны, было бы здорово иметь возможность монтировать средствами самого AppImage внутри песочницы. Почему? На данный момент существует два формата AppImage: suqashfs и страый iso. А если появится ещё какой-то? Придётся добавлять ещё расширения для BubbleJail. |
Я думаю это крайне специфичные насиройки. Не думаю что будет какое либо приложение которуму потребуется такие-же насиройки и иметь отдельный сервис будет только смущать пользователя. У меня есть план на Debug сервис где можно будет добавлять аргументы к bwrap так же как Но это все должно подождать пока я не перепишу сервисы. |
А какие изменения планируются? Новые сервисы будут несовместимы со старыми? У меня были ещё некоторые идеи. Значит пока стоит их отложить? |
То что сейчас в Еще значения по умолчанию будут |
Т.е. графический интерфейс планируется переписать на C++, раз уж он использует Qt? Если так, то очень жаль. Python тут очень хорошо подходит, у него низкий порог вхождения, в приложение просто вносить изменения без перекомпиляци и его производительности хватает, скоростей компилируемого языка не требуется. GTK кстати говоря, отлично работает с Python через bindings. А чтобы не было лапши, можно использовать Glade. Я использовал эту связку в своих проектах. При разделении на две части (клиент и сервер D-Bus) предполагается что сервер будет всегда висеть в памяти? |
Скорее всего в C и Gtk.
Я как раз переписываю потому что они полный кошмар. Никакой документации, нарушают стандарты и аналитические программы типа mypy не совместимы. PyQt5 только чуть лучше так как я использовал документацию от C++ но у них такие же проблемы.
Нет. У D-Bus есть опция активации при первом обращении. Потом можно выгрузить сервер при не использовании в течении какого-то времени. |
Сервисов в любом случае станет больше со временем. Я хотел предложить ещё идею. В графическом интерфейсе сделать две вкладки "Enabled services" и "Available services". Когда сервис выключен, он отображается только на вкладке "Available services" и имеет подробное описание (небольшую справку) что он делает. Когда сервис включён, он отображается на вкладке "Enabled services" с кратким описанием и самими параметрами. Так интерфейс не будет перегружен.
Вполне возможно. Приложение может проверять, является ли пользователь Раз уж речь зашла про сервисы. У меня была ещё одна идея связанная с ними. Сделать настройку для выбора фиктивной домашней директории. Три варианта: 1) Как сейчас, т.е. внутри В принципе я мог бы реализовать эти идеи. Однако я хочу, чтобы дополнения гармонично вписывались в проект, не были чужеродными. Поэтому сначала описываю идею здесь, в issue. Вообще, нужна ли проекту помощь? И имеет ли смысл предлагать идеи и код? |
Да это хорошая идея.
В сервисе Debug это будет уместно.
Я добавлял environment variable BUBBLEJAIL_DATADIRS по которой ишутся Instances. Код сдесь:
Это правда не закончено так как оно переписывает папки поиска а не добавляет.
Я думаю этому место в отдельной утилите. В исходном коде много модулярности и у меня были планы на дополнительные утилиты.
Можно сделать наброски интерфейса в Glade так как у тебя есть опыт с этим. Еще у меня есть файл в котором я описал нерешеные проблемы (на англиском правда): https://github.com/igo95862/bubblejail/blob/master/docs/TODO.md |
Bumping. So what would be the solution from yall guys? OOB support from bjail for running appimage would be great, rely on appimagetool as igo said since we don't trust users appimage binary. But this feature may be blocking that said effort?: AppImage/AppImageKit#981 |
AppImages are probably better served by a specialized tool. The SUID requirement to run them is directly opposed to bubblewrap security model. For example: https://github.com/mgord9518/aisap (I think there was a sandboxing launcher but I can't find it) |
As I roughly scan through aisap codes, they seems do mount the appimage and then runs inside it. |
Mounting squashfs as unprivileged user would need a FUSE driver. (because it is not marked with |
Yes, but beforehand we must know where to seek (offset) and pass it to squashfuse. That thing we need to do. Edit: Quick search on GH seems nobody create appimage management/manipulation on python. aisap using go, so prob recreate their header detection logic on py. |
@mxvin Finding the offset is pretty easy. I've actually even implemented it in in posix shell script. Should be quite easy in Python as I assume there is ELF parsing in the stdlib. All you have to do is multiply e_shnum and e_shentsize, then add e_shoff. |
Hi again! 😄
I am experimenting with Bubblejail and AppImage. For now it does not work. First of all executable file must be binded inside the sandbox. And, second, there is must be a /dev/fuse available inside. These are not a problems. I wrote a small patch (I am not making an pull request because it is not ready and I want to discuss it). But these things are not enough. It is impossible to mount FUSE inside:
mount("appName-v1.2.3.x86_64.AppImage", "/tmp/.mount_appName-v5QFPIr", "fuse.appName-v1.2.3.x86_64.AppImag"..., MS_RDONLY|MS_NOSUID|MS_NODEV, "fd=5,rootmode=40000,user_id=1000"...) = -1 EPERM (Operation not permitted)
I think it is a security restriction of bwrap. But I do not know how to bypass it and is it a good idea.Another way, I think, is to create a helper function, which will mount AppImage before start and unmount it after, outside of the sandbox. This can be done with udisksctl or dbus call to udisk daemon. But there is a disadvantage: mount point will be visible as a disk in /media.
P.S.: I have some more ideas about integration between Bubblejail and AppImage. Where is it convenient for you to discuss this?
P.P.S: Do you speak Russian? Do not get me wrong. I think I saw your nickname somethere as an email address with yandex.ru domain. If so, it would help communicate.
The text was updated successfully, but these errors were encountered: