Приложение Snap не видит файлы с другого раздела.

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

Я установил пакет KeePassXC в формате snap на Ubuntu 17.10. У меня установлено несколько систем Linux на одном диске, поэтому я сделал большинство своих домашних папок, таких как ~/Documents, ссылками на отдельный раздел ext4 (пользователи имеют одинаковый uid, поэтому права доступа корректные). Я попытался открыть базу данных своих паролей, которая находится в Documents, но KeePassXC не может увидеть файлы внутри Documents. Если я помещаю файл в свою домашнюю папку, то он его видит.

Могут ли пакеты snap находить файлы вне моей домашней папки? Есть ли способ сделать так, чтобы KeePassXC (и остальные пакеты snap) получили доступ к файлам на моем отдельном разделе ext4 (возможно, есть какая-то конфигурация)?

Snaps обычно изолированы. По умолчанию snaps не могут получать доступ к ничему, кроме своих собственных записываемых областей, но они могут получить права доступа через интерфейсы. Есть два интерфейса, которые обеспечивают возможность доступа к файлам за пределами по умолчанию: интерфейс home и интерфейс removable-media. Я предполагаю, что KeePassXC использует интерфейс home, что и позволяет получить доступ к ~/Documents. Возможно, он даже использует интерфейс removable-media, но это касается только того, что смонтировано в /media или /mnt. Если ваши другие разделы смонтированы в другом месте, snap не будет иметь разрешения на следование символическим ссылкам.

Способы сделать это, отсортированные по сложности:

  1. Промонтировать разделы в вашу домашнюю директорию вместо создания символических ссылок на них.
  2. Промонтировать разделы в /media и убедиться, что KeePassXC использует интерфейс removable-media. Это может потребовать изменения на уровне проекта, но небольшого.
  3. Превратить KeePassXC в классический snap, тем самым сделав его не строго изолированным. Это более крупное изменение, и проект может не быть заинтересован в этом.

Обновление: Файл snapcraft.yaml для KeyPassXC находится здесь. Похоже, он уже имеет интерфейс removable-media. Все, что вам нужно сделать, чтобы выполнить (2) — это подключить его (это не подключено автоматически):

$ sudo snap connect keepassxc:removable-media

Я столкнулся с аналогичной проблемой с приложением snap makemkv на Ubuntu 20.04.

Мне удалось решить проблему с помощью привязки монтирования:

sudo mount --bind /data/wip /home/user/Videos/wip

Это позволило мне смонтировать мой дисковод данных в дерево /home/, чтобы приложение snap могло получить к нему доступ, как упоминал Кайл выше.

Просто чтобы добавить к ответу Кайла, некоторые пакеты из Ubuntu Software Store тоже требуют этой команды.

В моем случае kdenlive не мог получить доступ к моему другому жесткому диску. Следующая команда сработала:

sudo snap connect kdenlive:removable-media

Вот быстрое решение, чтобы приложение snap вело себя как классическая установка, то есть без какой-либо изоляции.

Просто создайте символическую ссылку на бинарный файл в /usr/local/bin, например так:

/usr/local/bin/pdftk -> /snap/pdftk/current/usr/bin/pdftk

(Удивительно, но это конкретное приложение настроено с “confinement: strict”, что очень неудобно, так как оно не будет работать с файлами из других файловых систем.)

Чтобы исправить это, например, для Arduino IDE:

sudo snap remove arduino

sudo apt install arduino

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

Ситуация, с которой вы столкнулись, связана с ограничениями, накладываемыми системой пакетов Snap. Snap-пакеты функционируют в изолированном окружении и по умолчанию могут взаимодействовать только с собственными для них доступными директориями. Для доступа к файлам вне своего контейнера используются специальные интерфейсы, такие как home и removable-media.

Решение проблемы

  1. Проверка подключения интерфейсов:

    Snap-пакет KeePassXC, вероятно, использует интерфейс home, что позволяет ему получать доступ к ~/Documents. Тем не менее, проблемы могут возникнуть, если ваша отдельная ext4-раздела, на которую вы переадресовываете, смонтирована не в домашней директории пользователя.

    Чтобы предоставить KeePassXC доступ к вашему разделу, попробуйте выполнить следующую команду в терминале для подключения интерфейса removable-media (если он еще не подключен):

    sudo snap connect keepassxc:removable-media

    Это разрешит Snap-прикладному обеспечить доступ ко всем устройствам, подключенным как съемные.

  2. Перемещение точек монтирования:

    Если ваш дополнительный раздел смонтирован в какой-либо другой директории, например, в /mnt или /data, Snap-приложение не сможет получить к ним доступ. Лучший способ решения этой проблемы – переместить точки монтирования в директорию вашего домашнего каталога. Например:

    sudo mount --bind /путь/к/вашей/папке/в/д.home/новая_папка

    Убедитесь, что при использовании привязки точек монтирования выполняются необходимые шаги для регулярных монтированиеx.

  3. Создание классической версии Snap:

    Если ни один из вышеупомянутых методов не помог, можно рассмотреть вариант установки KeePassXC не в виде snap-пакета. Для этого выполните:

    sudo snap remove keepassxc
    sudo apt install keepassxc

    Это позволит избежать ограничений, связанных с контейнерной системой Snap.

Дополнительные рекомендации

  • Не забудьте проверить, действительно ли KeePassXC и другие приложения, которые вы используете, соответствуют требованиям к доступу к файлам и корректно подключены все необходимые интерфейсы.
  • При необходимости ознакомьтесь с документацией и возможностями Snap, чтобы знать, как управлять доступами для других приложений.

Эти шаги должны помочь решить вашу проблему с доступом приложения KeePassXC к файлам на другом разделе. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!

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

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